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

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

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

    性质:

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

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

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

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

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

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

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

    左倾堆:

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

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

    斜堆:

    二项堆:

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

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

    斐波那契堆:

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

  • 相关阅读:
    读取库中的所有表名
    ADOX学习
    自己寫的AccessDBHelper
    C#中Split用法~
    SQL Server:查看SQL日志文件大小SQL脚本
    MS SQL2005 How to find the top 50 cpu execution time.
    跨浏览器的本地存储解决方案
    這個SQL 語句你真的看明白了嗎?
    一个简单的SQL最优写法讨论(1)
    Gmail的标签容纳的邮件数量有限制。
  • 原文地址:https://www.cnblogs.com/Sky-Aces/p/8437107.html
Copyright © 2011-2022 走看看