你知道一个流行的库(Apache、Google 等,集合),它有一个可靠的 Java 实现最小-最大堆,这是一个允许查看其最小值和最大值O(1)
并删除元素的堆O(log n)
?
问问题
89596 次
6 回答
39
来自番石榴:MinMaxPriorityQueue
。
于 2012-02-02T20:45:54.067 回答
28
您可以使用包含相同元素的java.util.PriorityQueue的两个实例来代替最大最小堆吗?第一个实例将通过一个比较器,将最大值放在首位,第二个实例将使用一个比较器,将最小值放在首位。
缺点是必须在两个结构上执行添加、删除等操作,但它应该满足您的要求。
于 2009-07-08T14:26:17.200 回答
27
Java 有很好的工具来实现最小和最大堆。我的建议是使用优先队列数据结构来实现这些堆。要使用优先级队列实现最大堆,请尝试以下操作:
import java.util.PriorityQueue;
public class MaxHeapWithPriorityQueue {
public static void main(String args[]) {
// create priority queue
PriorityQueue<Integer> prq = new PriorityQueue<>((a,b)->b-a);
// insert values in the queue
prq.add(6);
prq.add(9);
prq.add(5);
prq.add(64);
prq.add(6);
//print values
while (!prq.isEmpty()) {
System.out.print(prq.poll()+" ");
}
}
}
要使用优先级队列实现最小堆,请尝试以下操作:
import java.util.PriorityQueue;
public class MinHeapWithPriorityQueue {
public static void main(String args[]) {
// create priority queue
PriorityQueue< Integer > prq = new PriorityQueue <> ();
// insert values in the queue
prq.add(6);
prq.add(9);
prq.add(5);
prq.add(64);
prq.add(6);
//print values
while (!prq.isEmpty()) {
System.out.print(prq.poll()+" ");
}
}
}
欲了解更多信息,请访问:
于 2016-09-24T21:51:06.060 回答
5
最小堆: PriorityQueue minHeap= new PriorityQueue<>();
Max Heap PriorityQueue maxHeap= new PriorityQueue<>(Comparator.reverseOrder());
于 2021-01-16T06:55:17.837 回答
3
com.aliasi.util.MinMaxHeap怎么样?这是LingPipe的一部分;不幸的是,许可可能是个问题。
请参阅此相关论文。
但是,没有实现 reduceKey 或 increaseKey。
于 2009-07-08T14:25:44.173 回答
0
于 2009-07-08T14:03:40.380 回答