删除元素后,擦除操作是否也会更新堆?
我在boost文档中查看了成员函数说明 fibonacci_heap其中提到了在增加/减少操作之后会发生什么,但是当涉及擦除时,唯一指出的是它擦除了句柄所指向的元素。
这是否意味着在此之后堆被重组?如果没有,被删除的节点的子节点会发生什么? 我错过了一些明显的东西吗?
答案 0 :(得分:3)
从fibonacci堆中删除元素时,树会重新合并。作为一般规则,当斐波那契堆上的操作的摊销时间为O(log(N))时,就会发生树整合。
从概念上讲,删除操作可以被认为是两个操作的组合:
在实践中,通常会优化实施以避免不必要的步骤,但摊销的对数复杂度保持不变。在Boost.Heap的fibonacci_heap::erase()
实现的情况下: