微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用势法对斐波那契堆进行摊销分析

如何解决使用势法对斐波那契堆进行摊销分析

我正在尝试使用潜在方法对斐波那契堆进行摊销分析。我正在努力理解 pop min / delete min 操作的分析。

在教程中,我可以找到限制“pop min”操作的摊销复杂度,such as this one,教程作者将潜力设置为“phi(fib heap) = 根节点数 + 2 * 根节点数失败节点”。然后,他们分两步分析 popmin 操作:

  1. 第一步,它删除最小节点并将最小节点的子节点放在根列表中。通过对树的分析(不允许节点丢失超过一个子节点这一事实),您知道这将只需要 O(log n) 次操作。这部分我明白了。

  2. 在第二步中,您通过迭代合并所有相同大小的树来执行清理。对我来说,这就是分析令人困惑的地方:

在摊销分析中,成本总是“实际成本+潜力变化”。他们分析实际成本为 O(t + m + d) —— m 数字是合并的数量,d 数字是合并后的树数,而 t 数字是合并之前的节点数当您对根列表进行线性扫描时进行清理。电位的变化受 -m 以上的约束——根列表大小随着合并次数的减少而减小。 t = m + d,所以操作是 O(m + d)。到目前为止,我正在关注。

然后,在链接的教程中,他将电位的变化添加到 O(m + d) 以获得 O(m + d) - m = O(d) ... 这没有任何意义!我相当肯定,根据大 O 的定义,这是不可能的。尽管如此,这仍然是他对视频中 popmin 操作的摊销成本的理由。

谁能解释一下他用 O(m + d) - m 表示的意思,或者如果不是,请分析斐波那契堆中的 popmin 操作以获得 O(log n) 的摊销运行时间?

解决方法

我在标记 30:35 左右发现了答案 in this video。他指出,您只需取隐藏在大 O 中的摊销运算的所有常数的最大值,并将其乘以潜在函数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。