Python のプライオリティ キュー コンパレータ
- Python のプライオリティ キュー
- Python のプライオリティ キュー カスタム コンパレータ
- Python でリストを使用したプライオリティ キュー
-
Python で
heapdict
モジュールを使用したプライオリティ キュー
この記事では、Python を使用したカスタム プライオリティ キューの開発について説明します。 それに加えて、プライオリティ キューでカスタム コンパレータ関数を利用する方法も学びます。
Python のプライオリティ キュー
プライオリティ キューは、特定の優先度を持つアイテムを格納できるようにするデータ構造です。 優先度キューは、優先度が最も高いアイテムがキューの一番上になるようにアイテムを並べ替えます。
プライオリティ キューは、アイテムを優先度順に処理する必要があるアルゴリズムでよく使用されます。 タスクのリストを処理しているとします。 最も重要なタスクを最初に処理する必要があります。
優先キューを使用してそれを行うことができます。
Python のプライオリティ キュー カスタム コンパレータ
Python の組み込みモジュール queue
は、優先キューの実装を提供します。 ただし、このモジュールでは、プライオリティ キューにカスタム コンパレータを指定することはできません。
これは、プライオリティ キューにデフォルトの順序付けとは異なる順序付けを使用する場合に問題になる可能性があります。
幸いなことに、Python プライオリティ キュー用のカスタム コンパレータを作成する方法があります。 この記事では、これを行う方法について説明します。
プライオリティ キューの例を 2つ紹介します。
- Python でリストを使用したプライオリティ キュー
- Python の
heapdict
モジュールを使用したプライオリティ キュー
Python でリストを使用したプライオリティ キュー
まず、空白のリストを作成します。 その後、各人の名前を重要度順にリストに追加します。
1から始めてアセンドしていきます。 したがって、各名前には番号が割り当てられ、リストの優先順位として機能します。
優先度は、タスクが最終的に完了するときに実行される順序を確立する整数です。
コードを使用して実行してみましょう。 まず、names
というリストを作成します。
このリストは最初は空です。 以下のコードを参照してください。
names = []
リストに名前を追加するには、list
機能から簡単にアクセスできる append
メソッドを使用します。 append
メソッドでは、2つの引数を送信する必要があります。
リストに番号を追加して、優先度、番号、名前などを示します。 ここでは、Abid
という名前をリストの position1
に表示したいと考えています。
names.append((1, "Abid"))
追加できる名前やアイテムの数に制限はなく、インデックス番号は優先順位を示します。
コード例:
names.append((1, "Abid"))
names.append((4, "Jesica"))
names.sort(reverse=True)
names.append((3, "Anna"))
names.sort(reverse=True)
names.append((2, "Pat"))
ここで while
ループを使用すると、names
リスト レコードが出力されます。
while names:
print(names.pop())
これは以前に作成したコードと同じです。 それをコピーして実行し、結果を確認します。
names = []
names.append((1, "Abid"))
names.append((4, "Jesica"))
names.sort(reverse=True)
names.append((3, "Anna"))
names.sort(reverse=True)
names.append((2, "Pat"))
names.sort(reverse=True)
while names:
print(names.pop())
出力:
(1, 'Abid')
(2, 'Pat')
(3, 'Anna')
(4, 'Jesica')
これは、コードを実行した結果です。 指定した優先度とインデックスに従って各名前が並べられていることがはっきりとわかります。
Python で heapdict
モジュールを使用したプライオリティ キュー
ヒープに基づくプライオリティ キューは、heapdict
Python モジュールを介してアクセスできるようになります。 通常の heapq
モジュールに匹敵しますが、より多様な機能と適応性を提供します。
バイナリ ヒープは、heapdict
データ構造の基盤です。 バイナリ ヒープは、データの効率的な取得と変更を容易にする方法でデータを格納するために使用できるデータ構造です。
バイナリ ヒープは完全なバイナリ ツリーです。これは、ツリー内のすべてのノードに 2つの子孫があり、ツリー自体が常にバランスが取れていることを示します。
HeapDict
とHeapQueue
は、heapdict
モジュールによって使用可能になる 2つの主要なクラスです。 heapdict
クラスは辞書と同様に機能し、その内容をヒープに保持します。
ヒープは、HeapQueue
と呼ばれるキューのようなクラスによって管理される情報を保持するために使用されます。 HeapDict
および HeapQueue
クラスは、dict
クラスの組み込みサブクラスです。
それらはすべての dict
のメソッドを引き継ぎ、継承するヒープと対話する方法を提供します。
heapdict
モジュールは自動的にインストールされないことに注意してください。 heapdict
を構成するには、以下に示すコマンドを使用する必要があります。
pip install heapdict
heapdict
ライブラリのインストールが完了したら、プライオリティ キューを実装するプロセスでそれを使用する準備が整いました。
- 最初のステップは、
heapdict
のライブラリをインポートすることです。 heapdict
関数を呼び出すために使用される変数を作成し、その変数を優先的に使用し続けます。- この時点で、以前に開発した関数を使用して、各タスクに優先順位を割り当てます。
while
ループを利用します。- 変数を出力して結果を表示します。
コード全体は次の形式で記述できます。
import heapdict
tasks = heapdict.heapdict()
tasks["Breakfast"] = 3
tasks["Wake up"] = 1
tasks["Get ready for work"] = 4
tasks["Exercise"] = 2
while tasks:
print(tasks.popitem())
出力:
('Wake up', 1)
('Exercise', 2)
('Breakfast', 3)
('Get ready for work', 4)
コードの出力は、コード内のさまざまなタスクに割り当てられた優先順位に従って、コードが正しく機能していることを示しています。 私たちの活動のアウトプットは同じ順序に従い、適切な優先順位を示します。
この記事では、リストを利用してプライオリティ キューを作成する方法を説明しました。 それに加えて、Python でカスタム プライオリティ キューを作成するために必要な手順を実行しました。
これで、プライオリティ キューを使用してカスタム コンパレータ関数を実装する方法がわかりました。
この記事が、Python でカスタム プライオリティ キューを作成する方法を理解するのに役立つことを願っています。
My name is Abid Ullah, and I am a software engineer. I love writing articles on programming, and my favorite topics are Python, PHP, JavaScript, and Linux. I tend to provide solutions to people in programming problems through my articles. I believe that I can bring a lot to you with my skills, experience, and qualification in technical writing.
LinkedIn