如何获得斐波那契堆的最坏情况

发布于 2024-12-15 04:26:40 字数 102 浏览 2 评论 0原文

什么操作顺序会给出斐波那契堆的最坏情况?除了最后一个节点之外,每个节点只有一个子节点?

例如:

5
|
6
|
7
|
8

What sequence of operations would give the worst case for fibonacci heaps? Where each node has only one child except for the last node?

For example:

5
|
6
|
7
|
8

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

怎言笑 2024-12-22 04:26:40

我认为 jpalecek 的答案不会产生所请求的树。在这里尝试一下:

http://www.cse.yorku.ca/~ aaw/Jason/FibonacciHeapAnimation.html

此外,您只需插入任意数量的元素,然后 extract-min 一次即可获得相同的结果。无论如何,这不是要求。

要实现您想要的形式,请执行以下操作:

  • 插入任意数量的元素 - 例如 1 到 10。
  • 提取分钟(现在您有一棵树)
  • 将所有子项减少到 -inf 除了最左边的,从最深,从左到右(参见下面的演示)。
  • 每次减少后,删除最小
  • 重复步骤 3

示例:

  • 插入 1 到 10:

start

  • extract min:

extractMin

  • 7 减少到 0

firstDec

  • 提取分钟:

extractMin

  • 5 减少到 0,提取 min ,将 4 减少到 0,提取 min ,减少 3至0,提取 min ,将 10 减少到 0,提取 min:

fin

编辑:

我忘记了有一个删除操作可以使减少然后提取分钟,所以你可以使用它来代替减少然后提取分钟我在上面所做的。

请注意,现在当您有一个“单路径”树时,您可以通过以下 O(1) 操作序列轻松地继续扩大它:

  • 插入 3 个小于 min 的元素
  • ,提取 min
  • 删除新的右子树

演示(继续示例的最后一步):

  • 插入10-1

insert_3_elements

  • 提取分钟:

extractMin2

  • 删除新的右子节点 (1):

deeper

所有图像均由此网站

I think jpalecek's answer doesn't produce the requested tree. Try it here:

http://www.cse.yorku.ca/~aaw/Jason/FibonacciHeapAnimation.html

Also, You can achieve the same result just by inserting whatever number of elements and then extract-min once. Anyway, that's not the request.

To achieve the form you wanted do this:

  • insert whatever number of elements - say 1 through 10.
  • extract min (now you have a single tree)
  • decrease all children to -inf except the leftmost, starting from the deepest, and from left to right (see demonstration below).
  • after each decrease, delete the min
  • repeat step 3

example:

  • insert 1 through 10:

start

  • extract min:

extractMin

  • decrease 7 to 0:

firstDec

  • extract min:

extractMin

  • decrease 5 to 0, extract min , decrease 4 to 0, extract min , decrease 3 to 0, extract min , decrease 10 to 0, extract min:

fin

edit:

I forgot there's a delete operation that makes decrease then extract min, so you can use it instead of the decrease then extract min i was doing above.

And note that now when you have a "single path" tree, you can easily keep enlarging it by this sequence of O(1) operations:

  • insert 3 elements smaller than the min
  • extract min
  • delete the new right child

demonstration (continuing last step from the example):

  • insert 1,0,-1:

insert_3_elements

  • extract min:

extractMin2

  • delete new right child (1):

deeper

all images are created by this website

满天都是小星星 2024-12-22 04:26:40

这实际上是最好的情况(如您所见, extract-min 总是很容易,因为我们已经对元素进行了排序)。您应该通过以下方式插入一系列反向排序的元素(即最小元素排在最后)来获取它:

  1. 插入两个元素
  2. extract-min
  3. 重复

This is actually the best case (as you can see, extract-min is always easy, since we have the element ordered). You should get it by inserting a sequence of reverse-sorted elements (that is, the minimal element would come last) in this manner:

  1. insert two elements
  2. extract-min
  3. repeat
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文