用于向堆添加和删除值的高效算法

时间:2012-11-02 16:37:49

标签: algorithm heap complexity-theory

如果我想在最大堆中添加和删除值,我首先将值添加到堆的末尾,然后根据需要向上渗透它。然后我会通过保存根节点删除该值,然后取最大堆末尾的值,将其移到顶部,然后根据需要向下渗透它,最后返回从前面保存的值。

这涉及到许多比较和价值交换。是否有一个算法具有类似的复杂性类,但是对于首次添加然后删除最大堆中的值更有效?

1 个答案:

答案 0 :(得分:2)

添加到二进制堆需要进行log(N)比较。删除项目,假设您知道项目的位置,进行log(N)比较。关于从堆中删除的低效部分是查找要删除的项目。这需要O(N)时间。

顺便说一句,您可以通过获取堆中的最后一项,将其放在要删除的项的位置,然后根据需要向上或向下渗透来提高删除性能。有关示例,请参阅任何算法文本。

如果您想要更高效的数据结构,则需要二进制堆之外的其他内容。