Python のプライオリティ キュー コンパレータ

Abid Ullah 2023年6月21日
  1. Python のプライオリティ キュー
  2. Python のプライオリティ キュー カスタム コンパレータ
  3. Python でリストを使用したプライオリティ キュー
  4. Python で heapdict モジュールを使用したプライオリティ キュー
Python のプライオリティ キュー コンパレータ

この記事では、Python を使用したカスタム プライオリティ キューの開発について説明します。 それに加えて、プライオリティ キューでカスタム コンパレータ関数を利用する方法も学びます。

Python のプライオリティ キュー

プライオリティ キューは、特定の優先度を持つアイテムを格納できるようにするデータ構造です。 優先度キューは、優先度が最も高いアイテムがキューの一番上になるようにアイテムを並べ替えます。

プライオリティ キューは、アイテムを優先度順に処理する必要があるアルゴリズムでよく使用されます。 タスクのリストを処理しているとします。 最も重要なタスクを最初に処理する必要があります。

優先キューを使用してそれを行うことができます。

Python のプライオリティ キュー カスタム コンパレータ

Python の組み込みモジュール queue は、優先キューの実装を提供します。 ただし、このモジュールでは、プライオリティ キューにカスタム コンパレータを指定することはできません。

これは、プライオリティ キューにデフォルトの順序付けとは異なる順序付けを使用する場合に問題になる可能性があります。

幸いなことに、Python プライオリティ キュー用のカスタム コンパレータを作成する方法があります。 この記事では、これを行う方法について説明します。

プライオリティ キューの例を 2つ紹介します。

  1. Python でリストを使用したプライオリティ キュー
  2. 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つの子孫があり、ツリー自体が常にバランスが取れていることを示します。

HeapDictHeapQueueは、heapdictモジュールによって使用可能になる 2つの主要なクラスです。 heapdictクラスは辞書と同様に機能し、その内容をヒープに保持します。

ヒープは、HeapQueue と呼ばれるキューのようなクラスによって管理される情報を保持するために使用されます。 HeapDict および HeapQueue クラスは、dict クラスの組み込みサブクラスです。

それらはすべての dict のメソッドを引き継ぎ、継承するヒープと対話する方法を提供します。

heapdict モジュールは自動的にインストールされないことに注意してください。 heapdict を構成するには、以下に示すコマンドを使用する必要があります。

pip install heapdict

heapdict ライブラリのインストールが完了したら、プライオリティ キューを実装するプロセスでそれを使用する準備が整いました。

  1. 最初のステップは、heapdict のライブラリをインポートすることです。
  2. heapdict 関数を呼び出すために使用される変数を作成し、その変数を優先的に使用し続けます。
  3. この時点で、以前に開発した関数を使用して、各タスクに優先順位を割り当てます。
  4. while ループを利用します。
  5. 変数を出力して結果を表示します。

コード全体は次の形式で記述できます。

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 でカスタム プライオリティ キューを作成する方法を理解するのに役立つことを願っています。

著者: Abid Ullah
Abid Ullah avatar Abid Ullah avatar

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