さまざまな種類のヒープデータ構造を見ていました。
フィボナッチヒープは、(1)挿入、(2)削除、および(2)最小要素の検索に関して、最悪の場合の複雑度が高いようです。
Java=に、バランスの取れたバイナリヒープであるクラスPriorityQueue
があることを発見しましたが、なぜフィボナッチヒープを使用しなかったのですか?
また、Java.util
にフィボナッチヒープの実装はありますか?
ありがとう!
いいえ、標準のJavaコレクションAPIにはフィボナッチヒープの実装が含まれていません。なぜそうなのかはわかりませんが、フィボナッチヒープは償却後の漸近的に優れているためです。コレクションフレームワークには、2項式のヒープも含まれていないため、これを含めることもできます。
完全に恥知らずな自己プラグインとして、私は Java)にフィボナッチヒープの実装 を持っています。それがどれほど役立つかはわかりませんが、しかし、それがどのように機能するかを知りたい場合は、それが良い出発点になると思います。
お役に立てれば!
しかし、なぜフィボナッチヒープを使用しなかったのでしょうか。
おそらく、これらのヒープには、バイナリキーよりもエントリごとのオーバーヘッドが多いためです。
また、Java.utilにフィボナッチヒープの実装はありますか?
いいえ、でも
しかし、なぜフィボナッチヒープを使用しなかったのでしょうか。
主な理由は、フィボナッチヒープが役立つのは、1つのextractMin操作に接続された多くの減少キー操作がある場合に限られるためです。たとえば、ダイクストラのアルゴリズムで使用している場合です。
また、Java.utilにフィボナッチヒープの実装はありますか?
Java.utilには実装がありませんが、フィボナッチヒープの既存のオープンソースバージョンを使用して、このトピックについていくつかの実験を行いました。あなたはそれを 私のブログで または プロジェクトのGitHubリポジトリ で見つけることができます。