📜  二叉堆、二项堆和斐波那契堆的区别

📅  最后修改于: 2021-10-28 02:04:10             🧑  作者: Mango

二叉堆
二叉堆是具有以下属性的二叉树。

  1. 它是一个完整的二叉树,即所有级别都被完全填充,可能除了最后一级之外,最后一级尽可能保留所有键。二叉堆的这个特性使得它们适合存储在数组中。
  2. 二叉堆是Min HeapMax Heap 。在最小二叉堆中,根处的键必须是二叉堆中所有键中的最小值。对于二叉树中的所有节点,相同的属性必须递归为真。 Max Binary Heap 类似于Min Heap

最小堆示例:

二项式堆:
二项式堆是二项式树的集合,其中每个二项式树都遵循最小堆属性,并且最多可以有一个任意度数的二项式树。

二项式堆的例子:

叉堆和二叉堆之间的主要区别在于堆的结构。在二叉堆中,堆是一棵单树,是一棵完全二叉树。在二项式堆中,堆是一些较小的树(即一片树林)的集合,每棵树都是一棵二项式树。可以构建一个完整的二叉树来容纳任意数量的元素,但是在某个阶数N的二叉树中元素的数量总是2*N 。因此,需要一棵完整的二叉树来支持二叉堆,但我们可能需要多棵二叉树来支持二叉堆。

斐波那契堆
与二项式堆一样,斐波那契堆是具有最小堆或最大堆属性的树的集合。在斐波那契堆中,树可以具有任何形状,甚至所有树都可以是单个节点(这与二项式堆不同,其中每棵树都必须是二项式树)。 Fibonacci Heap 维护一个指向最小值(即树的根)的指针。所有树根都使用循环双向链表连接,因此可以使用单个“min”指针访问所有树根。

斐波那契堆示例:

下表中提到了与二叉堆、二项堆和斐波那契堆相关的各种操作的时间复杂度差异。

Operation Binary Heap Binomial Heap Fibonacci Heap
insert     O(log N)     O(log N) O(1)
find-min     O(1)     O(log N)     O(1)
delete     O(log N)     O(log N)     O(log N)
decrease-key     O(log N)     O(log N)     O(1)
union     O(N)     O(log N)     O(1)

如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程学生竞争性编程现场课程。