double
キーの優先度として定数値を使用する優先度キューの実装を探しています。これを適切に実装すればPriorityQueue
、柔軟なコンパレータを使用したデフォルトの実装よりも高速になると思います。decreaseKey操作(=すでにキューにある要素の優先度を下げる)は必要ありません。
スタンフォードのNLPグループから実装を見つけましたが、元の実装の2倍遅いと彼らは主張しています。PriorityQueue
ユースケースのデフォルトを上回るPQ実装はありますか?
double
キーの優先度として定数値を使用する優先度キューの実装を探しています。これを適切に実装すればPriorityQueue
、柔軟なコンパレータを使用したデフォルトの実装よりも高速になると思います。decreaseKey操作(=すでにキューにある要素の優先度を下げる)は必要ありません。
スタンフォードのNLPグループから実装を見つけましたが、元の実装の2倍遅いと彼らは主張しています。PriorityQueue
ユースケースのデフォルトを上回るPQ実装はありますか?
Sedgewick-Wayneコードを使用してみてください
http://algs4.cs.princeton.edu/24pq/MaxPQ.java.html
ただし、汎用キータイプをdoubleに置き換え、Comparable/Comparatorコードを削除してください。
引用するStanfordNLPバージョンの速度が遅いのは、decreaseKey()をサポートしているためです。Javadocで述べられているように、decreaseKey()をサポートしていないこのクラスを試すことができます。
最終的に、独自のヒープ構造を実装しました。最適化された操作を備えたd-aryヒープはremove()
、特にロードされた共有メモリマシンで、適度に良好に機能することが判明しました。