从堆中删除第i个节点

时间:2011-02-24 15:56:55

标签: algorithm

我知道从堆中删除节点是O(log n)在根节点发生的。而且我也知道在其中一个堆树问题中删除堆中的任意节点并且是O(n)

是否有任何算法可以减少将 Ith 节点从maxheap删除到O(log n)的运行时间,其中<​​em> I 的范围是1到N?

1 个答案:

答案 0 :(得分:4)

从堆中删除任意节点的昂贵部分不在删除中,而在于查找要删除的节点。实际上删除节点是O(log n)。但首先,您必须对基础数据存储执行顺序扫描才能找到节点。这是O(n)部分。

加快这一速度的唯一方法是保留第二个数据结构,如字典或哈希映射或类似的,可以快速告诉您项目在后备存储中的位置。然后你在字典中进行O(1)查找,从字典中删除O(1),从堆中删除O(log n)。