min-maxヒープで信頼性の高いJava実装を持っている人気のあるライブラリ(Apache、Googleなど)のことを知っていますか?それは最小値と最大値を覗き見ることができるヒープで、O(1)
O(log n)
の要素ですか?Min-MaxヒープのJava実装ですか?
答えて
グアバから:MinMaxPriorityQueue
。
私は重複した値をサポートする必要があります...この設定では、設定は「少し問題があります」。 –
-1 TreeSetはほとんどの操作をO(log n)で実装しています - 要件はO(1)の最小値と最大値を調べるためのものでした。 – Avi
TreeSetには、ヒープの決定的な操作の1つであるdecrementKeyまたはincreaseKey操作もありません。 http://en.wikipedia.org/wiki/Heap_(data_structure) – NamshubWriter
約com.aliasi.util.MinMaxHeap?これはLingPipeの一部です。残念ながら、licensingが問題になることがあります。
this related paperを参照してください。
ただし、reduceKeyまたはincreaseKeyは実装されていません。
max-minヒープの代わりに、同じ要素を含むjava.util.PriorityQueueという2つのインスタンスを使用できますか?最初のインスタンスは、先頭に最大値を置くコンパレータに渡され、2番目のインスタンスは、最小値を先頭に置くコンパレータを使用します。
両方の構造で追加、削除などを実行する必要がありますが、要件を満たす必要があるという欠点があります。
+1。これは、O(1)のルートを覗いてO(log.n)内のルートを削除するための規定された要件を満たした場合に有効です。ただし、PriorityQueueはすべてのヒープ操作(たとえば、declineKey、increaseKey)を実装していないことに注意してください。 – dty
'remove()'はキューの先頭から削除され、 'O(log(n))'であり、 'remove(Object o)'は 'O(n)'です。参照:http://docs.oracle.com/javase/8/docs/api/java/util/PriorityQueue.html – erwaman
削除はO(ログn)ではなくなるため、下降します。キューの1つから最小値を削除するのはO(log n)ですが、他のキューの最後にある同一のアイテムを削除するのはO(n)です。 –
private void heapifyUp(int current) {
int parent = (current - 1)/2;
if (current < 0)return;
while (current > 0 && arr[current] > arr[parent]) {
int temp = arr[parent];
arr[parent] = arr[current];
arr[current] = temp;
current = parent;
parent = (current - 1)/2;
} return;
}
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()+" ");
}
}
}
は、詳細については、下記をご覧ください:
[Collections.reverseOrder()](https://docs.oracle.com/javase/8/docs/api)を使用する方が便利です。 /java/util/Collections.html#reverseOrder--)をMaxHeapクラスのPriorityQueueの引数として使用します。 –
もっと便利なところはどういう意味ですか?もっと説明していただけますか? – Mohammad
_reverseOrder_メソッドは、(x、y) - > y-x'と比較して何を理解しているかをより明確に理解していると思います。 –
- 1. 配列のないMinMaxヒープ実装
- 2. メジアンJavaの最大ヒープと最小ヒープ実装
- 3. ヒープを実装する
- 4. 最大ヒープの実装
- 5. 4行(connect4)ゲームでMinMaxを実装して使用する
- 6. Cでminヒープを実装する
- 7. Java Connect 4 MinMaxアルゴリズム
- 8. このヒープ実装の問題点は何ですか?
- 9. リストのヒープのアルゴリズムの実装
- 10. ヒープは実際にはヒープですか?
- 11. JavaでのJavaの実装
- 12. Javaでのntlmの実装ですか?
- 13. C++でヒープの最小実装を抽出します
- 14. HP-UX環境のJVMでCヒープとJavaヒープを実行するのは何ですか?
- 15. "標準" Java DateBuilderの実装ですか?
- 16. livecountのJava実装ですか?
- 17. java - tf * idfの実装ですか?
- 18. Javaでのグラフの実装
- 19. Javaでのジッタバッファの実装
- 20. JavaでのKademliaの実装
- 21. Javaでのサブクラスの実装
- 22. Javaでのグラフの実装
- 23. Javaでのカスタムキャッシングの実装
- 24. JavaでのRSAの実装
- 25. Javaでのペアクラスの実装
- 26. JavaでのPCAの実装
- 27. JavaでのRNTNの実装
- 28. JavaでのTrieの実装
- 29. Javaでのバーコードスキャナーの実装
- 30. Javaでのファイルアップロードタイプの実装
特に、元の質問はグーバであるGoogleのコレクションについて尋ねてきました。 –
唯一の小さな欠点は、標準的な 'Deque'実装の欠如です。 –
Deque契約を満たしていないため、意図通りに動作しています。 –