0

在斐波那契堆中,所有操作分析本质上都是摊销的。为什么我们不能像二项式堆那样进行正常分析。

4

1 回答 1

0

在二项式堆中,每个操作都保证以某种最坏情况的性能运行。插入永远不会超过 O(log n),合并永远不会超过 O(log n + log m),等等。因此,在分析二项式堆的效率时,通常使用更传统的算法分析。

现在,也就是说,二项式堆的几个属性只有在进行摊销分析时才会变得明显。例如,假设堆最初是空的,那么在二项式堆中进行 n 次连续插入的成本是多少?您可以证明,在这种情况下,插入的摊销成本为 O(1),这意味着进行 n 次插入的总成本为 O(n)。从这个意义上说,在传统分析之上使用摊销分析比最初可能从更保守的最坏情况分析中获得的数据结构更深入。

从某种意义上说,斐波那契堆最好在摊销的意义上进行分析,因为即使许多操作的最坏情况界限确实不是那么好(例如,删除最小或减少键可能需要时间 Θ(n ) 在最坏的情况下),在任何一系列操作中,斐波那契堆都具有出色的摊销性能。即使单个删除分钟可能需要 Θ(n) 时间,但一系列 m 删除分钟不可能花费超过 Θ(m log n) 时间。

然而,在另一种意义上,斐波那契堆被专门设计为在摊销意义上而不是最坏情况意义上是有效的。它们最初是为了加速 Dijkstra 和 Prim 的算法而发明的,其中重要的是在 n 节点堆上执行 m 个减少键和 n 次删除的总成本,由于这是设计目标,因此设计者没有尝试在最坏的情况下使斐波那契堆有效。

于 2016-10-02T21:37:52.967 回答