斐波那契堆中的dequeuemin

时间:2016-07-15 12:50:59

标签: data-structures tree fibonacci-heap

我想问一下Fibonacci堆。 如果我有这种情况:

A
|
B

然后,我们再添加两个节点C和D:

A
|\
B C
  |
  D

现在我们删除B:

A
|
C
|
D

现在我们添加E和F.

我看到它创建了一个这样的树:

E
|\
F A
  |
  C
  |
  D

但是我不明白为什么E和F与树连接。从我读到的,我们连接相同等级的树(例如,一个节点的树与一个节点的另一棵树),我错了吗?

非常感谢。

1 个答案:

答案 0 :(得分:0)

如果将节点C和D添加到第一个Fibonacci堆中,则不会得到您绘制的树。相反,你有这个堆:

    A   C   D
    |
    B

请记住,Fibonacci会懒洋洋地将每个新添加的值添加到顶级树列表中,并且仅在删除时合并内容。如果您要删除B,则将其提升到顶级,如下所示:

    A   B   C   D

然后删除B:

    A   C   D

现在,您将扫描根列表并将同一订单的树合并在一起。我们假设您按照A,C,D的顺序扫描节点。首先,您将A和C合并在一起,如下所示:

   A   D
   |
   C

此时,不会再发生合并,因为每个订单中只有一棵树。

如果你再添加E和F,你就把它们放在顶层,如下所示:

   A   D   E   F
   |
   C

所以是的,你是对的,这些节点不应该被添加到树中。