web-dev-qa-db-ja.com

プライオリティキューはいつ使用しますか?

私が知っている優先キューを使用する唯一の例は、ダイクストラのアルゴリズム(最小コストの計算用)です。

他のどのような状況でそれは役に立ちますか?

22
Oleksiy

これが実際の例です-ビジネスアプリケーションの場合:

あなたは病院を運営していて、患者が入院しています。スタッフの医師は1人だけです。最初の男が入り、すぐに仕えます。次に、風邪をひいた男性がやってきて、介助が必要になります。あなたは彼をキューに追加し、彼は医師が対応可能になるのを待つ。次に、頭に斧を持った男がドアからやって来る。彼はより高い医療責任を負っているので、彼はより高い優先順位を割り当てられています。だから、風邪をひいた男が並んでいます。次に、誰かが呼吸障害を起こします。だから、もう一度、風邪をひいた男は優先順位を下げられます。これは現実の世界ではトリアージと呼ばれますが、この場合は医療関係です。

これをコードで実装すると、優先度キューとワーカースレッド(医師)を使用して、消耗品/作業単位(患者)で作業を実行します

49
Vaughan Hilts

統計の大規模なコレクションをスキャンして、上位N項目を報告します-最も忙しいネットワーク接続N、最も価値のある顧客N、最大のディスクユーザーN ...

12
mcdowella

ヒープに基づく優先キューは、入力シーケンスを部分的にソートしています。これには、mcdowellaがいくつかの例を示したように、シーケンス全体が必要ない場合にすぐに並べ替えるよりも利点があります。特に、n個の要素のうちm個だけが必要な場合は、O(m log n)の複雑さになります。 2番目の利点は、要素を動的に追加する場合、つまり、シーケンス全体が事前にわからない場合です。ヒープをバッキングストレージとして使用すると、別の要素を追加する方が、ソートされたシーケンスに挿入するよりも速くなります。

さらに、並べ替えられた順序で単一の要素をポップし、それらを破棄する場合(つまり、後で並べ替えられたシーケンスは必要ない場合)、優先度キューを使用すると、正しいメッセージが読者に提供されます。また、さまざまな実装を簡単に入れ替えることもできます。ヒープに基づくもの、または入力シーケンスを事前にソートするもの。これは好みの問題ですが、それに応じて使用するシーケンスを使用して常に同じことを達成できますが、これによりコードが読みにくくなります。

12
Ulrich Eckhardt

リストは次のとおりです。イベント駆動型シミュレーション:列に並んだ顧客、衝突する粒子

数値計算丸め誤差の低減データ圧縮データを圧縮するハフマン符号。 グラフ検索:ダイクストラのアルゴリズム、プリムのアルゴリズム数論:べき乗和人工知能: A *検索統計:シーケンスの最大M値を維持オペレーティングシステム:ロードバランシング、割り込み処理離散最適化ビンパッキング、スケジューリングスパムフィルタリングベイジアンスパムフィルター

8
AKS

優先度キュー(最小/最大ヒープ)の多くのアプリケーションがあります。しかし、古典的で有名なアルゴリズムを探している場合、例として Prim's algorithm は優先キューを使用します。

2
Fallen