无序二项树U0包含一个结点,一棵无序的二项树Uk包含两棵无序二项树Uk-1,其中一棵的根节点成为另一棵的根结点的任意子结点。
二项树的性质堆无序二项树仍然成立
4' 对无序二项树Uk,根的度数为k,它大于任何其他结点的度数。根的子女按某种顺序分别为子树U0,U1,...,Uk-1的根。
创建一个新的斐波那契堆
插入一个结点
将x插入到H的根表中。结点x成为一棵单结点的最小堆有序树,同时也是堆中的一棵无序二项树。
连续执行k次INSERT操作,则k棵单结点的树被加到了根表中。
平摊代价O(1)
寻找最小结点
最小结点由指针min[T]指示,故可以在O(1)实际时间内找到最小结点。
合并两个斐波那契堆
将H1和H2的根表拼接成一个新的根表H。
抽取最小结点
先使最小结点的每个子女都成为一个根,并将最小结点从根表中去掉。
通过将度数相同的根连接起来,直至对应每个度数至多只有一个根来调整根表。
若执行EXTRACT-MIN前,斐波那契堆中所有的树都是无序二项树,则在此以后,它们也都是无序的二项树。
树发生变化的方式有两种。根z的每个孩子x成为一个根,都是无序的二项树。度数相同时,连接起来,若各有k个子女,则所得的树具有Uk+1的结构。
20.2-1 给出图调用EXTRACT-MIN后得到的斐波那契堆。
20.2-2 证明:二项树的性质对无序二项树也成立。
20.2-3 证明:如果仅需支持可合并堆操作,则在包含n个结点的斐波那契堆中结点的最大度数D(n)至多为floor(lgn)。
20.2-4 插入和合并在最后的步骤中做合并调整。最坏运行时间是多少?
20.2-5 论证:如果对关键字的唯一操作是比较两个关键字,则并非所有的可合并堆操作都有O(1)的平摊运行时间。