Java中的快速双值优先级队列实现

时间:2012-06-26 08:55:59

标签: java performance algorithm priority-queue stanford-nlp

我正在寻找一个优先级队列的实现,它使用常量double值作为密钥的优先级。我相信,如果实施得当,这可以比使用灵活的比较器的默认PriorityQueue实施更快。 reduceKey操作(=降低队列中已有元素的优先级)不是必需的。

我找到了implementation from the NLP group in Stanford,但他们声称它是原始实现的的两倍。是否有一个PQ实现可以胜过我们用例的默认PriorityQueue

3 个答案:

答案 0 :(得分:0)

尝试使用

上的Sedgewick-Wayne代码

http://algs4.cs.princeton.edu/24pq/MaxPQ.java.html

但是用double替换通用Key类型并删除Comparable / Comparator代码。

答案 1 :(得分:0)

您引用的斯坦福NLP版本速度较慢是因为它支持reduceKey()。如其Javadoc中所述,您可以尝试此类,它不支持decreaseKey():

http://www.jarvana.com/jarvana/view/edu/stanford/nlp/stanford-corenlp/1.3.0/stanford-corenlp-1.3.0-javadoc.jar!/javadoc/edu/stanford/nlp/util/FixedPrioritiesPriorityQueue.html

答案 2 :(得分:0)

我们最终实现了自己的堆结构。具有优化remove()操作的d-ary堆表现得相当好,特别是在加载的共享内存计算机上。