• 堆的定义

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

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

    性质:

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

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

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

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

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

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

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

    左倾堆:

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

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

    斜堆:

    二项堆:

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

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

    斐波那契堆:

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

  • 相关阅读:
    45套精美的 ( Android, iPhone, iPad ) 手机界面设计素材和线框图设计工具
    JAVA基础01
    这是我的第一个博客
    string(更新)
    KMP
    标准C++中的string类的用法总结
    coj 数学作业(300)
    异或的性质及运用
    substr在oracle和mysql中的应用和区别
    非空校验在oracle和mysql中的用法
  • 原文地址:https://www.cnblogs.com/Sky-Aces/p/8437107.html
Copyright © 2020-2023  润新知