我想证明具有n个节点的Fibonacci堆可以具有高度n。
我用例子尝试了这个,但我不知道如何显示这一点。
答案 0 :(得分:23)
(我假设你的意思是身高n - 1:身高n是不可能的,因为n个节点的最大高度是一个高度为n的链表 - 1)
进入高度很容易:添加三个节点,然后执行dequeue-min。这将删除一个节点,并将高度为0的其他两个节点组合到此高度为1的结构中:
A
|
B
如果再次重复此过程并确保其中一个新节点具有最低优先级,则会获得其中两个树,然后将这些树合并为:
A
|\
B C
|
D
现在,在B上执行删除操作。这将使A顺序为1,标记为:
A*
|
C
|
D
再次重复此过程(插入三个节点,所有节点都具有无限的负优先级,并调用dequeue-min)以获得此结果:
E
|\
F A*
|
C
|
D
删除F以获取
E*
|
A*
|
C
|
D
如果你反复执行这个添加三个节点的过程,删除一个节点,然后删除单个剩余树的单个子节点,你可以使斐波那契堆成一个高度为n-1的树,用于任何你想要的n。
希望这有帮助!