Fibonacci堆在摊销意义上是有效的,但在最坏的情况下它们的效率如何?具体来说,n节点Fibonacci堆上每个操作的最坏情况时间复杂度是多少?
答案 0 :(得分:3)
Fibonacci堆上的find-min操作总是花费最坏情况的O(1)时间。总是有一个指针保持直接指向该对象。
在最坏的情况下,删除min的成本需要时间Θ(n)。要想看到这一点,想象一下从空堆开始并对其进行一系列n次插入。每个节点都将存储在自己的树中,并且执行delete-min堆会将所有这些对象合并到O(log n)树中,要求Θ(n)工作至少访问所有节点一次。
插入的成本是最坏的情况O(1);这只是创建一个节点并将其添加到列表中。合并类似于O(1),因为它只是将两个列表拼接在一起。
最坏情况下降低键的成本是Θ(n)。可以构建一个退化的Fibonacci堆,其中所有元素都存储在一个由n个标记节点的链表组成的树中。在最底层节点上执行reduce键然后触发一系列级联切换,将树转换为n个独立节点。