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

Rat*_*565 0 algorithm data-structures fibonacci-heap

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

我用例子尝试了这个,但我不知道如何在一般情况下显示这个.

tem*_*def 23

(我假设你的意思是身高n - 1:身高n是不可能的,因为有n个节点,最大身高是一个高度为n - 1的链表)

获得高度很容易:添加三个节点,然后执行dequeue-min.这将删除一个节点,并将高度为0的其他两个节点组合到此高度为1的结构中:

A
|
B
Run Code Online (Sandbox Code Playgroud)

如果再次重复此过程并确保其中一个新节点具有最低优先级,则会获得其中两个树,然后将它们合并在一起,如下所示:

A
|\
B C
  |
  D
Run Code Online (Sandbox Code Playgroud)

现在,在B上执行删除操作.这使A与订单1和标记:

A*
|
C
|
D
Run Code Online (Sandbox Code Playgroud)

再次重复此过程(插入三个节点,所有节点都具有无限的负优先级,并调用dequeue-min)以获得此结果:

E
|\
F A*
  |
  C
  |
  D
Run Code Online (Sandbox Code Playgroud)

删除F得到

E*
|
A*
|
C
|
D
Run Code Online (Sandbox Code Playgroud)

如果您反复执行添加三个节点的过程,删除一个节点,然后删除单个剩余树的单个子节点,则可以使Fibonacci堆为任何您想要的n的单个高度为n - 1的树.

希望这可以帮助!

  • @ Rat565-正如我在回答中提到的那样,不可能得到身高n.其中包含一个节点的树的高度为零,因此高度始终至少比节点数少一个.但是,如果将单个节点的高度定义为1,则可以使用.另外,请不要那么忘恩负义.看看你的问题,我感觉我正在为你做功课.你至少可以感激我已经付出了努力来帮助你. (3认同)
  • @ Rat565-再次,你是绝对肯定的,它正是n?这在数学上是不可能的.一个常见的问题是,是否有可能得到一个n个节点链,这就是我在上面所示,但这与高度n不同. (3认同)