信頼できるJava min-maxヒープの実装、つまりその最小値と最大値を覗くことができるヒープ)を持つ人気のあるライブラリ(Apache、Googleなどのコレクション)を知っていますかO(1)
の値とO(log n)
の要素を削除するには?
グアバから: MinMaxPriorityQueue
。
最大/最小ヒープの代わりに、同じ要素を含む Java.util.PriorityQueue の2つのインスタンスを使用できますか?最初のインスタンスには最大値を先頭に置くコンパレーターが渡され、2番目のインスタンスには最小値を先頭に置くコンパレーターが使用されます。
欠点は、両方の構造で追加、削除などを実行する必要があることですが、要件を満たす必要があります。
Javaには、最小および最大ヒープを実装するための優れたツールがあります。私の提案は、これらのヒープを実装するために優先度キューのデータ構造を使用することです。優先度キューで最大ヒープを実装するには、これを試してください:
import Java.util.PriorityQueue;
public class MaxHeapWithPriorityQueue {
public static void main(String args[]) {
// create priority queue
PriorityQueue<Integer> prq = new PriorityQueue<>((x,y) -> y-x);
// 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()+" ");
}
}
}
詳細については、次をご覧ください。
com.aliasi.util.MinMaxHeap についてはどうですか?これは LingPipe ;の一部です。残念ながら、 ライセンス が問題になる可能性があります。
この関連論文 を参照してください。
ただし、decreaseKeyまたはincreaseKeyを実装しません。
Java.util.TreeSet クラス。