左式堆的懒惰删除

左式堆的懒惰删除

在左式堆中一个已知位置删除节点的一种方法是使用懒惰策略。要删除一个节点,只要将其标记为已被删除即可。当执行一个 F i n d M i n FindMin D e l e t e M i n DeleteMin 时,若标记根节点被删除则存在一个潜在的问题,因为此时节点必须被实际删除且需要找到实际的最小元,这可能涉及到删除其他一些已做标记的节点。

在该方法中, D e l e t e Delete 花费一个单位,但一次 D e l e t e M i n DeleteMin F i n d M i n FindMin 的开销却依赖于被做删除标记的节点的个数。

Cheriton和Tarjan [1] 在论文中讨论了左式堆中的懒惰删除。一般的想法是:如果根被标记为删除,则形成堆的先序遍历,并删除标记删除的节点,留下堆的集合。通过将所有的堆放在队列中,每次出队两个堆进行合并然后将结果放在队列的末尾,直到队列中只有一个堆时停止操作。

发布了32 篇原创文章 · 获赞 18 · 访问量 3235

猜你喜欢

转载自blog.csdn.net/u011714517/article/details/104154064