大量のデータでJavaを使用しています。
[できるだけ問題を単純化しようとする]
実際、私はint KEYと2つのWEIGHT(getter&settersを含む)を含む小さなクラス(要素)を持っています。
これらのオブジェクトの多くをファイルから読み取り、最高の(最も重みのある)Mオブジェクトを取得する必要があります。
実際には、2つの要素を比較するために記述されたコンパレーターでPriorityQueueを使用していますが、動作しますが、遅すぎます。
あなたはそれを行うためのより速い方法を知っていますか?
ありがとうございました
ヒープベースの優先度キューは、この問題に適したデータ構造です。健全性チェックと同様に、キューを正しく使用していることを確認します。
最も重いアイテムが必要な場合は、min -queueを使用します。ヒープの一番上が最小のアイテムです。すべてのアイテムを最大キューに追加し、M
完了時に上位のアイテムを調べることは効率的ではありません。
各アイテムについてM
、キュー内のアイテムが少ない場合は、現在のアイテムを追加します。それ以外の場合は、ヒープの上部をのぞきます。現在のアイテムより小さい場合は、それを破棄し、代わりに現在のアイテムを追加します。それ以外の場合は、現在のアイテムを破棄します。すべてのアイテムが処理されると、キューにはM
最も重いアイテムが含まれます。
一部のヒープには、ヒープのトップを置き換えるためのショートカットAPIがありますが、JavaにQueue
はありません。それでも、big-Oの複雑さは同じです。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加