如何显示具有n个节点的Fibonacci堆可以具有高度n?

时间:2013-01-13 03:01:06

标签: algorithm data-structures fibonacci-heap

我想证明具有n个节点的Fibonacci堆可以具有高度n。

我用例子尝试了这个,但我不知道如何显示这一点。

1 个答案:

答案 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。

希望这有帮助!