Algorithm 二进制堆和二项式堆之间的区别是什么?

Algorithm 二进制堆和二项式堆之间的区别是什么?,algorithm,data-structures,priority-queue,binary-heap,binomial-heap,Algorithm,Data Structures,Priority Queue,Binary Heap,Binomial Heap,我需要知道二元堆和二项式堆之间的主要区别,不管它们的结构不同,二元堆只能有两个子堆(树表示),而二项式堆可以有任意数量的子堆 实际上我只是想知道,在组织二叉树结构时,有什么特别之处,第一个子节点上有一个节点,第二个节点上有两个节点,第三个节点上有四个节点,依此类推 如果我们对堆使用普通树,而不限制两个子堆,然后应用联合过程,只使一个堆成为其他堆的左子堆,会怎么样?二进制堆和二项式堆的关键区别在于堆的结构。在二进制堆中,堆是一棵树,它是一棵完整的二叉树。在二项式堆中,堆是一组较小的树(即树木的森林

我需要知道二元堆和二项式堆之间的主要区别,不管它们的结构不同,二元堆只能有两个子堆(树表示),而二项式堆可以有任意数量的子堆

实际上我只是想知道,在组织二叉树结构时,有什么特别之处,第一个子节点上有一个节点,第二个节点上有两个节点,第三个节点上有四个节点,依此类推


如果我们对堆使用普通树,而不限制两个子堆,然后应用联合过程,只使一个堆成为其他堆的左子堆,会怎么样?

二进制堆和二项式堆的关键区别在于堆的结构。在二进制堆中,堆是一棵树,它是一棵完整的二叉树。在二项式堆中,堆是一组较小的树(即树木的森林),每个树都是一棵二项式树。一个完整的二叉树可以容纳任意数量的元素,但是一个n阶二叉树中的元素数量总是2n。因此,我们只需要一个完整的二叉树来支持一个二叉堆,但我们可能需要多个二叉树来支持一个二叉堆。有趣的是,二项式堆中使用的二项式树的顺序对应于林中元素数的二进制表示中设置的1位

按原样组织二项堆的原因是,n阶二项树中始终正好有2n个节点。这使我们能够假设二叉树中的元素数量,而不必实际检查该树的结构。另一方面,一个高度为h的完整二叉树中的节点数量可能会根据最后一行的填充方式而变化。每个子级必须有一个非常精确定义的结构,这一事实也可以用来证明子级的数量最多为O(logn),其中n是堆中的节点总数,这意味着delete min的开销不会太大

这背后的一个重要细节是,二项式堆不是任何碰巧有k个子树的树。这是一棵被严格定义为

  • 阶数为0的二叉树是单个节点,并且
  • n阶二叉树是一个节点,其子节点为0、1、2、…、n-1阶二叉树
(从技术上讲,这里不需要订单0特例)。你可以在这里看到:

请注意,每个订单只有一棵树,节点的数量或位置没有任何灵活性

然而,一个重要的替代定义如下:

  • 阶数为0的二叉树是单个节点,并且
  • n阶二叉树是两棵n-1阶二叉树,其中一棵树是另一棵树的子树
(花一分钟看看为什么这些是等效的)。使用第二个定义,可以快速归纳证明树中的节点数为2n。作为基本情况,0阶树根据需要有20=1个节点。对于归纳步骤,如果我们有两棵阶数为n-1的树,它们根据需要共同具有2n-1+2n-1=2n个节点。因此,n阶二叉树中的节点总数正好是2n

您在最后一段中描述的堆的想法并不总是带来高效的运行时。特别是,如果树具有巨大的分支因子,并且没有其他结构约束,那么理论上可以构建一个由n个节点组成的堆,其中一个节点包含(n-1)个子节点。在这种情况下,在从堆中删除最小元素之后,您必须查看所有n-1子元素,以确定哪个是新的最小元素,从而给出一个O(n)的运行时。树上的其他结构约束,如完全二叉树、二叉树等,保证了这种最坏情况不会发生


希望这有帮助

二进制堆可以通过将任意两个具有相同秩的完整二叉树连接到根节点上来创建。这是一棵有点自由风格的树——有些叶子可以从右边剪下来

秩N的二叉树不是树的森林。它是一个根节点,与其相连秩为N-1,N-2,…,1,0的二叉树。二项式堆是一棵结构绝对固定的树

(恐怕有人看错了维基。)

添加到上面由templatetypedef提供的伟大答案。下面是一个可视化表格,显示不同操作的不同时间复杂度

╔══════════════╦═══════════════════════╦════════════════════════╗
║  活动║       二元的║      二项式║
╠══════════════╬═══════════════════════╬════════════════════════╣
║              ║                       ║                        ║                              
║   插入║      O(后勤)║      O(后勤)║
║              ║                       ║                        ║                              
╠══════════════╬═══════════════════════╬════════════════════════╣
║  找敏║       O(1)║      O(后勤)║
║              ║                       ║                        ║
╠══════════════╬═══════════════════════╬════════════════════════╣
║              ║