Priority Queue Comparator in Python

Abid Ullah 21 Juni 2023
  1. Prioritätswarteschlange in Python
  2. Benutzerdefinierter Komparator für Prioritätswarteschlangen in Python
  3. Prioritätswarteschlange mit Liste in Python
  4. Prioritätswarteschlange mit dem heapdict-Modul in Python
Priority Queue Comparator in Python

Dieser Artikel befasst sich mit der Entwicklung einer benutzerdefinierten Prioritätswarteschlange mit Python. Darüber hinaus werden wir auch lernen, wie wir eine benutzerdefinierte Komparatorfunktion mit der Prioritätswarteschlange verwenden können.

Prioritätswarteschlange in Python

Eine Prioritätswarteschlange ist eine Datenstruktur, die es uns ermöglicht, Elemente mit einer bestimmten Priorität zu speichern. Die Prioritätswarteschlange ordnet dann die Artikel so an, dass der Artikel mit der höchsten Priorität ganz oben in der Warteschlange steht.

Eine Prioritätswarteschlange wird häufig in Algorithmen verwendet, bei denen wir die Elemente in der Reihenfolge ihrer Priorität verarbeiten müssen. Angenommen, wir würden eine Liste von Aufgaben bearbeiten; Wir möchten die wichtigsten Aufgaben zuerst bearbeiten.

Wir können dies mit einer Prioritätswarteschlange tun.

Benutzerdefinierter Komparator für Prioritätswarteschlangen in Python

Das eingebaute Modul queue in Python bietet eine Priority-Queue-Implementierung. Das Modul erlaubt uns jedoch nicht, einen benutzerdefinierten Komparator für die Prioritätswarteschlange anzugeben.

Dies kann ein Problem sein, wenn wir eine andere Reihenfolge als die Standardreihenfolge für die Prioritätswarteschlange verwenden möchten.

Glücklicherweise gibt es eine Möglichkeit, einen benutzerdefinierten Komparator für eine Python-Prioritätswarteschlange zu erstellen. In diesem Artikel werden wir sehen, wie das geht.

Wir werden zwei Beispiele der Prioritätswarteschlange untersuchen.

  1. Prioritätswarteschlange Verwenden der Liste in Python
  2. Priority Queue Verwendung des heapdict-Moduls von Python

Prioritätswarteschlange mit Liste in Python

Zu Beginn erstellen wir eine leere Liste. Danach werden wir die Namen jeder Person der Liste in der Reihenfolge ihrer Wichtigkeit hinzufügen.

Wir beginnen bei 1 und bewegen uns zum Aufstieg. Daher wird jedem Namen eine Nummer zugewiesen, die als Priorität auf der Liste dient.

Die Priorität ist eine ganze Zahl, die die Reihenfolge festlegt, in der die Aufgaben ausgeführt werden, wenn sie schließlich abgeschlossen sind.

Lassen Sie es uns erledigen, indem Sie den Code verwenden. Zuerst erstellen wir eine Liste namens Namen.

Diese Liste ist zunächst leer. Siehe Code unten.

names = []

Um nun Namen zur Liste hinzuzufügen, verwenden wir die Methode append, die über die list-Funktionalitäten leicht zugänglich ist. Die Methode append erfordert die Einsendung von zwei Argumenten.

Fügen Sie der Liste eine Nummer hinzu, um die Priorität, die Nummer, den Namen oder irgendetwas anderes anzugeben. Für unsere Zwecke möchten wir, dass der Name Abid an position1 in der Liste erscheint.

names.append((1, "Abid"))

Es gibt keine Begrenzung für die Anzahl der Namen oder Elemente, die hinzugefügt werden können, und die Indexnummern geben ihre Prioritätsreihenfolge an.

Beispielcode:

names.append((1, "Abid"))
names.append((4, "Jesica"))
names.sort(reverse=True)
names.append((3, "Anna"))
names.sort(reverse=True)
names.append((2, "Pat"))

Die Datensätze der Namen-Liste werden ausgedruckt, wenn wir hier die while-Schleife verwenden.

while names:
    print(names.pop())

Dies ist derselbe Code, der zuvor erstellt wurde; Kopieren Sie es und führen Sie es aus, um die Ergebnisse anzuzeigen.

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())

Ausgang:

(1, 'Abid')
(2, 'Pat')
(3, 'Anna')
(4, 'Jesica')

Dies ist die Ausgabe der Ausführung des Codes. Wir können deutlich sehen, dass jeder Name gemäß der von uns bereitgestellten Priorität und dem Index geordnet ist.

Prioritätswarteschlange mit dem heapdict-Modul in Python

Die auf einem Heap basierende Prioritätswarteschlange wird über das Python-Modul heapdict zugänglich gemacht. Es ist mit dem normalen heapq-Modul vergleichbar, bietet aber eine grössere Vielfalt an Möglichkeiten und Anpassbarkeit.

Ein binärer Heap ist die Grundlage der Datenstruktur heapdict. Ein binärer Heap ist eine Datenstruktur, die zum Speichern von Daten in einer Weise verwendet werden kann, die das effiziente Abrufen und Ändern dieser Daten erleichtert.

Der binäre Heap ist ein vollständiger binärer Baum, was darauf hinweist, dass jeder Knoten im Baum zwei Abkömmlinge hat und der Baum selbst immer ausgeglichen ist.

HeapDict und HeapQueue sind die beiden primären Klassen, die vom heapdict-Modul zur Verfügung gestellt werden. Die Klasse heapdict funktioniert ähnlich wie ein Wörterbuch und hält ihren Inhalt auf einem Heap.

Ein Heap wird verwendet, um die Informationen zu speichern, die von der warteschlangenähnlichen Klasse namens HeapQueue verwaltet werden. Die Klassen HeapDict und HeapQueue sind eingebaute Unterklassen der Klasse dict.

Sie übernehmen alle Methoden des dict und bieten Interaktionsmöglichkeiten mit Haufen, die sie erben.

Bitte beachten Sie, dass das Modul heapdict nicht automatisch für uns installiert wird. Wir müssen den unten gezeigten Befehl verwenden, um heapdict zu konfigurieren.

pip install heapdict

Nach Abschluss der Installation der heapdict-Bibliothek können wir diese nun im Prozess der Implementierung der Prioritätswarteschlange verwenden.

  1. Der erste Schritt besteht darin, die Bibliothek von heapdict zu importieren.
  2. Erstellen Sie eine Variable, die zum Aufrufen der heapdict-Funktion verwendet wird, und verwenden Sie die Variable weiterhin für die Priorität.
  3. An dieser Stelle verwenden wir die Funktion, die wir zuvor entwickelt haben, um jeder Aufgabe Prioritäten zuzuweisen.
  4. Verwenden Sie eine while-Schleife.
  5. Zeigen Sie das Ergebnis an, indem Sie die Variable drucken.

Der gesamte Code kann in der folgenden Form geschrieben werden.

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())

Ausgang:

('Wake up', 1)
('Exercise', 2)
('Breakfast', 3)
('Get ready for work', 4)

Die Ausgabe des Codes zeigt, dass der Code gemäß der Prioritätsreihenfolge, die verschiedenen Aufgaben im Code zugewiesen ist, korrekt funktioniert. Der Output unserer Aktivitäten folgt der gleichen Reihenfolge und zeigt die richtige Priorität an.

In diesem Artikel haben wir gelernt, wie man mithilfe einer Liste eine Prioritätswarteschlange erstellt. Darüber hinaus haben wir die Schritte durchlaufen, die zum Erstellen einer benutzerdefinierten Prioritätswarteschlange in Python erforderlich sind.

Wir wissen jetzt, wie eine benutzerdefinierte Komparatorfunktion mit der Prioritätswarteschlange implementiert wird.

Wir hoffen, dass Sie diesen Artikel hilfreich finden, um zu verstehen, wie Sie eine benutzerdefinierte Prioritätswarteschlange in Python erstellen.

Autor: 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