为什么最大优先级队列没有DECREASE-KEY?

时间:2011-11-09 19:43:45

标签: algorithm data-structures

在堆数据结构的讨论中,例如在CLRS中,最大优先级队列只需要INSERT,MAXIMUM,EXTRACT-MAX和INCREASE-KEY。但为什么它也没有DECREASE-KEY,至少它的操作也会使堆属性失效?它几乎不重要吗?

3 个答案:

答案 0 :(得分:3)

没有什么能阻止你在二进制堆中实现DECREASE-KEY。它可以在O(log N)中完成而不会破坏任何不变量。

我的猜测是它不包含在内,因为它不经常使用。

答案 1 :(得分:2)

如果你有一个MAX-HEAP,在第3版CLRS第6.2节“维护堆属性”中,DECREASE-KEY将是MAX-HEAPIFY。

答案 2 :(得分:1)

FWIW我的CLR V1谈论INSERT,MIN,EXTRACT-MIN,UNION,DECREASE-KEY和DELETE,但我们可以通过翻转符号转换为您的版本。

我认为这个集合是由使用优先级队列的算法的要求驱动的,例如最小生成树,Dijstra最短路径和(我怀疑)A *。例如,如果你看一下关于最小生成树的章节的开头,你可以看到一个注释,如果用fibonacci堆替换二进制堆,可以加速Prim的算法。