zoukankan      html  css  js  c++  java
  • 堆的定义

    堆(heap),这里所说的堆是数据结构中的堆,而不是内存模型中的堆。堆通常是一个可以被看做一棵树。

    常见的堆有二叉堆、左倾堆、斜堆、二项堆、斐波那契堆等等。

    性质:

    [性质一] 堆中任意节点的值总是不大于(不小于)其子节点的值;

    [性质二] 堆总是一棵完全树。

    二叉堆的定义:二叉堆是完全二元树或者是近似完全二元树,它分为两种:最大堆和最小堆。

    将任意节点不小于其子节点的堆叫做最大堆或大根堆。

    最大堆:父结点的键值总是大于或等于任何一个子节点的键值;

    将任意节点不大于其子节点的堆叫做最小堆或小根堆

    最小堆:父结点的键值总是小于或等于任何一个子节点的键值。

    左倾堆:

    它和二叉堆一样,都是优先队列实现方式。当优先队列中涉及到"对两个优先队列进行合并"的问题时,二叉堆的效率就无法令人满意了,

    而左倾堆,则可以很好地解决这类问题。

    斜堆:

    二项堆:

    二项堆是二项树的集合。在了解二项堆之前,先对二项树进行介绍。

    二项树是一种递归定义的有序树。它的递归定义如下:
    (1) 二项树B0只有一个结点;
    (2) 二项树Bk由两棵二项树B(k-1)组成的,其中一棵树是另一棵树根的最左孩子。

    斐波那契堆:

    它和二项堆一样,也是一种可合并堆;可用于实现合并优先队列。斐波那契堆比二项堆具有更好的平摊分析性能,它的合并操作的时间复杂度是O(1)。
    与二项堆一样,它也是由一组堆最小有序树组成,并且是一种可合并堆。
    与二项堆不同的是,斐波那契堆中的树不一定是二项树;而且二项堆中的树是有序排列的,但是斐波那契堆中的树都是有根而无序的。

  • 相关阅读:
    如何用css画一个文件上传图案?
    Vue.js命名风格指南
    JS的静态类型检测,有内味儿了
    每天认识几个HTTP 响应码
    剑指offer二叉树算法题JavaScript整理
    javascript
    JS数据结构与算法
    (转自MDN)CSS基础一定要看的包含块(containing block)
    简单记记display中inline、block、inline-block以及常见行内/块内元素
    从计算机操作系统中了解并发与并行、进程与线程
  • 原文地址:https://www.cnblogs.com/Sky-Aces/p/8437107.html
Copyright © 2011-2022 走看看