从boost :: fibonacci_heap中删除元素会发生什么?

时间:2015-03-09 17:07:22

标签: c++ boost data-structures priority-queue fibonacci-heap

删除元素后,擦除操作是否也会更新堆?

我在boost文档中查看了成员函数说明 fibonacci_heap其中提到了在增加/减少操作之后会发生什么,但是当涉及擦除时,唯一指出的是它擦除了句柄所指向的元素。

这是否意味着在此之后堆被重组?如果没有,被删除的节点的子节点会发生什么? 我错过了一些明显的东西吗?

1 个答案:

答案 0 :(得分:3)

从fibonacci堆中删除元素时,树会重新合并。作为一般规则,当斐波那契堆上的操作的摊销时间为O(log(N))时,就会发生树整合。

从概念上讲,删除操作可以被认为是两个操作的组合:

  • 对于min-heap实现,Delete是Decrease-Key(O(1))和Extract-Min(O(log(n))的组合。
  • 对于max-heap实现,Delete是Increase-Key(O(1))和Extract-Max(O(log(n))的组合。

在实践中,通常会优化实施以避免不必要的步骤,但摊销的对数复杂度保持不变。在Boost.Heap的fibonacci_heap::erase()实现的情况下:

  1. cuts off the link between the node and its parent
  2. moves the erase node's children to the root list
  3. consolidates the tree