Python のデータ構造とアルゴリズム - 優先度キュー

Python のデータ構造とアルゴリズム - 優先度キュー

[[405132]]

序文

キュー ライブラリは、マルチスレッド プログラミングに適した先入れ先出し (FIFO) データ構造を提供します。これを使用して、プロデューサー スレッドとコンシューマー スレッド間でメッセージやその他のデータを安全に渡すことができます。

呼び出し元のロック処理を行い、複数のスレッドが同じ Queue インスタンスを安全かつ簡単に操作できるようにします。メモリ使用量や処理を制限するために、キューのサイズが制限される場合があります。

基本的な使い方

Queue クラスは、基本的な先入れ先出しコンテナーを実装します。 put() を使用してこのシーケンスの一方の端に要素を追加し、get() を使用してもう一方の端から要素を削除します。具体的なコードは次のとおりです。

  1. インポートキュー
  2.  
  3. q = キュー.キュー()
  4.  
  5. iが範囲(1, 10)内にある場合:
  6. q.put(i)
  7. q.empty()ではない場合:
  8. print(q.get(),終了= " " )

実行後の効果は次のようになります。

ここでは、1 から 10 までを順番にキューに追加します。先入れ先出しの原則により、出てくる順序は追加された順序と同じになります。

LIFO キュー

先入れ先出しキューが存在するため、データ構造には後入れ先出しキューが存在する必要があります。後入れ先出しキューは LifoQueue です。例は次のとおりです。

  1. インポートキュー
  2.  
  3. q = キュー.LifoQueue()
  4.  
  5. iが範囲(1, 10)内にある場合:
  6. q.put(i)
  7. q.empty()ではない場合:
  8. print(q.get(),終了= " " )

実行後の効果は次のようになります。

優先キュー

オペレーティング システムでは、多くの場合、優先度に基づいてタスクを処理します。たとえば、システムの優先度が最も高い場合は、必ず最初にシステム タスクを処理し、次にユーザー タスクを処理します。同様に、キュー ライブラリは、優先キューを処理するための PriorityQueue を提供します。

次に例を示します。

  1. インポートキュー
  2. インポートスレッド
  3.  
  4. クラスジョブ:
  5. def __init__(self, 優先度, desc ):
  6. self.priority = 優先度
  7. 自己.desc = desc  
  8. print( "新しい仕事: " , desc )
  9. 戻る 
  10.  
  11. __eq__(自分、他):
  12. 試す:
  13. self.priority == other.priorityを返す
  14. AttributeErrorを除く:
  15. 実装されていないを返す
  16.  
  17. __lt__(自分、他):
  18. 試す:
  19. self.priority > other.priorityを返す
  20. AttributeErrorを除く:
  21. 実装されていないを返す
  22.  
  23. process_Job(q)を定義します。
  24. 真の場合:
  25. 次のジョブ = q.get()
  26. 印刷( next_job.desc )
  27. タスク完了()
  28.  
  29. q = キュー.優先度キュー()
  30.  
  31. q.put(Job(5, "5つの仕事" ))
  32. q.put(Job(15, "15の仕事" ))
  33. q.put(Job(1, "1つのジョブ" ))
  34.  
  35. 労働者 = [
  36. スレッド化.Thread(ターゲット=process_Job、引数=(q,))、
  37. スレッド化.Thread(ターゲット=process_Job、引数=(q,))、
  38. ]
  39.  
  40. のために 仕事 労働者の場合:
  41. 作業.setDaemon( True )
  42. 作業.開始()
  43.  
  44. q.join ()関数

実行後の効果は次のようになります。

ここでは、値が大きいほど優先度が高くなるようにデフォルト設定されています。15 が最初に実行され、その後に 5 と 1 のタスクが実行されていることがわかります。この例では、複数のスレッドがタスクを処理している場合、get() 中にキュー内の要素の優先度に従ってタスクが処理されることを示しています。

<<:  アラスカ航空は人工知能を活用して時間、燃料、費用を節約

>>:  マッピングドローンは多くの「ファン」を獲得しており、これらの利点は刺激的です

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

信頼とセキュリティの分野におけるデータサイエンスの典型的な 7 つの使用例

信頼とセキュリティとは何でしょうか? 現在の世界ではどのような役割を果たしているのでしょうか? 多く...

Google AI、眼球スキャンから心臓病リスクを予測可能

グーグルと、同じくアルファベットグループの健康関連子会社であるベリリー・ライフ・サイエンシズが共同で...

AI による自動ラベル付けの普及により、データラベル作成者の職は失われるのでしょうか?

データ注釈業界では、「知能と同じくらい人工知能も存在する」という有名な格言があります。ラベル付けが必...

天津市、スマートテクノロジー産業の発展促進に向け多方面から対策

2017年に第1回世界情報会議が開催されて以来、天津では257件のプロジェクトが実施され、1000億...

...

AI技術により人類の寿命が延びる

現在、50歳以上の人口は世界で最も急速に増加している年齢層となっており、当然ながら世界経済と医療制度...

Google 検索に AI による要約、定義、コーディングの改善が追加

Google 検索に AI による要約、定義、コーディングの改善が追加Google は、約 3 か月...

チャットボットについては長い間話されてきましたが、良いチャットボットとはどのように定義されるのでしょうか?

なぜ良いチャットボットがないのでしょうか? これは私がかなり頻繁に、おそらく平均して週に 2 回は聞...

年間100万ドルの給料でも、このタイプの才能のギャップを埋めることはできません。 AI業界も「人手不足」

年収100万の仕事に就くことを夢見たことがありますか?人工知能業界に参入して、あなたの夢を現実にしま...

テキストマイニングからの分類、クラスタリング、情報抽出などのアルゴリズムのレビュー

テキストマイニングは、推奨システム、検索システム、その他の広範なアプリケーションなど、テキストマイニ...

「顔の特徴による犯罪者の識別」という論文がNatureに掲載されるのでしょうか? 1,700人の科学者が共同で反対

1,700人の研究者が、Nature による AI 研究論文の出版をボイコットする請願書に署名した。...

ロンドンの顔認識で誤った人物が逮捕される:合理的な使用が鍵

顔認識の応用範囲は、アクセス制御やデバイスログインから空港や公共エリアの監視まで、非常に広範囲にわた...

マスク氏がai.comドメイン名を購入しました!ウルトラマンは数千万ドルを費やしてそれを購入し、4ヶ月でアイアンマンに売却した

ai.comドメイン名は、OpenAIが数千万ドルを費やしてマスク氏に購入された。これで、URL a...

AIチップ帝国が戦争状態!アルトマン氏は米国政府と密かに会談し、孫正義氏は大きな賭けに向け1000億ドルを緊急調達

この時代において、AIは科学技術の将来の発展の重要な支点となり、AIチップは産業の発展を牽引する新た...