左式堆的懒惰删除

左式堆的懒惰删除

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

在该方法中,DeleteDelete花费一个单位,但一次DeleteMinDeleteMinFindMinFindMin的开销却依赖于被做删除标记的节点的个数。

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

不一定每天 code well 但要每天 live well
原文地址:https://www.cnblogs.com/geekfx/p/12423059.html