在Fibonacci堆中,所有运营分析都在本质上摊销。为什么我们不能像二项式堆一样进行正态分析。
答案 0 :(得分:0)
在二进制堆中,保证每个操作都以某种最坏情况的性能运行。插入永远不会超过时间O(log n),合并永远不会超过时间O(log n + log m)等。因此,在分析二项式堆的效率时,通常使用更多传统的算法分析。
现在,也就是说,二元堆的几个属性只有在进行摊销分析时才会变得明显。例如,假设堆最初是空的,那么连续两次插入二进制堆的成本是多少?您可以证明,在这种情况下,插入的摊销成本为O(1),这意味着进行n次插入的总成本为O(n)。从这个意义上说,在传统分析的基础上使用摊销分析可以发现更多关于数据结构的见解,而不是最初由更保守的最坏情况分析引起的。
从某种意义上说,斐波那契堆最好以摊销的方式进行分析,因为即使许多操作的最坏情况界限确实不是那么好(例如,删除最小值或减少键也需要时间在最坏的情况下Θ(n),在任何一系列操作中,斐波那契堆具有优异的摊销性能。即使单个delete-min可能需要Θ(n)时间,一系列m个删除分钟也不可能超过Θ(m log n)时间。
从另一个意义上说,斐波纳契堆是专门设计为在摊销意义上有效而不是在最坏情况意义上。它们最初被发明用于加速Dijkstra和Prim的算法,其中所有重要的是在n节点堆上执行m减少键和n次删除的总成本,并且由于这是设计目标,因此设计者没有尝试在最坏的情况下使斐波纳契堆有效。