Python Heapq Custom Comparator

Python Heapq Custom Comparator
Algorithmen und Datenstrukturkonzepte sind notorisch schwierig. Es erfordert Zeit und Mühe, um die beste vielversprechende Klärung für ein Problem zu finden. Wenn Sie bei der Implementierung festhalten, können Sie die Aufgabe möglicherweise nicht beenden! Infolge. Zwei wenig bekannte Datenstrukturen, die ziemlich effektiv sind.

In diesem Handbuch lernen Sie, wie Sie HeapQ in Python -Modulen anwenden. Welche Arten von Problemen können ein Haufen verwendet werden, um zu lösen? Wie man diese Probleme mit dem Heapq -Modul von Python überwindet.

Was ist ein Python Heapq -Modul?

Eine Heap -Datenstruktur stellt eine vorrangige Warteschlange dar. Das "HeapQ" -Paket in Python macht es verfügbar. Die Besonderheit in Python besteht. Das Haufen [0] Element gibt immer das kleinste Element an.

Mehrere HeapQ-Routinen nehmen eine Liste als Eingabe an und organisieren sie in einer Minimer-Heibe-Reihenfolge. Ein Fehler mit diesen Routinen ist, dass sie eine Liste oder sogar eine Sammlung von Tupeln als Parameter benötigen. Sie erlauben Ihnen nicht, andere iterables oder Objekte zu vergleichen.

Schauen wir uns einige der grundlegenden Operationen an, die das Python Heapq -Modul unterstützt. Um ein besseres Verständnis dafür zu erwerben, wie das Python Heapq -Modul funktioniert, suchen Sie in den folgenden Abschnitten nach implementierten Beispielen.

Beispiel 1:

Mit dem HeapQ -Modul in Python können Sie Haufen Operationen auf Listen ausführen. Im Gegensatz zu einigen der zusätzlichen Module gibt es keine benutzerdefinierten Klassen an. Das Python HeapQ -Modul enthält Routinen, die direkt mit Listen arbeiten.

Normalerweise werden Elemente einzeln in einen Haufen hinzugefügt, beginnend mit einem leeren Haufen. Wenn bereits eine Liste von Elementen in einem Heap konvertiert werden müssen, kann die Funktion Heapify () im Python Heapq -Modul verwendet werden, um die Liste in einen gültigen Heap umzuwandeln.

Sehen wir uns Schritt für Schritt den folgenden Code an. Das HeapQ -Modul wird in der ersten Zeile importiert. Anschließend haben wir der Liste den Namen gegeben 'einen gegeben.'Die Heapify -Methode wurde aufgerufen und die Liste wurde als Parameter bereitgestellt. Schließlich wird das Ergebnis gezeigt.

Heapq importieren
eins = [7, 3, 8, 1, 3, 0, 2]
Heapq.heapifizieren (einer)
drucken (einer)

Die Ausgabe des oben genannten Code ist unten angezeigt.

Sie können sehen, dass die Liste trotz der Tatsache, dass 7 nach 8 auftritt, immer noch der Heap -Eigenschaft folgt. Zum Beispiel ist der Wert von A [2], der 3 ist, geringer als der Wert eines [2*2 + 2], das 7 ist.

Heapify () aktualisiert, wie Sie sehen können. Ein Haufen muss nicht arrangiert werden, um das Heap -Eigentum zu erfüllen. Wenn heapify () in einer sortierten Liste verwendet wird, bleibt die Reihenfolge der Elemente in der Liste erhalten, da jede sortierte Liste zur Heap -Eigenschaft passt.

Beispiel 2:

Eine Liste von Elementen oder eine Liste von Tupeln kann als Parameter an Heapq -Modulfunktionen übergeben werden. Infolgedessen gibt es zwei Optionen, um die Sortierungstechnik zu ändern. Zum Vergleich besteht der erste Schritt darin, die Iterable in eine Liste von Tupeln/Listen umzuwandeln. Machen Sie eine Wrapper -Klasse, die den Operator erweitert. In diesem Beispiel werden wir uns den ersten genannten Ansatz ansehen. Diese Methode ist einfach zu verwenden und kann für den Vergleich von Wörterbüchern angewendet werden.

Bemühen Sie sich, den folgenden Code zu verstehen. Wie Sie sehen können, haben wir das Heapq -Modul importiert und ein Wörterbuch namens dict_one generiert. Anschließend ist die Liste für die Tupelkonvertierung definiert. Der Funktionsqualität.Heapify (meine Liste) organisiert die Listen in einem Min-HEAP und druckt das Ergebnis aus.

Schließlich konvertieren wir die Liste in ein Wörterbuch und zeigen die Ergebnisse an.

Heapq als Hauptquartier importieren
dict_one = 'z': 'zinc', 'b': 'bill', 'w': 'Wicket', 'A': 'Anna', 'C': 'Caouch'
list_one = [(a, b) für a, b in dict_one.Artikel()]
print ("Vor dem Organisieren:", list_one)
HQ.heapify (list_one)
print ("nach organisierender:", list_one)
dict_one = dict (list_one)
print ("letztes Wörterbuch:", dict_one)

Der Ausgang ist unten angehängt. Das endgültige wiederverkehrte Wörterbuch wird neben der vor- und nach der angeordneten Liste angezeigt.

Beispiel 3:

Wir werden eine Wrapper -Klasse in dieses Beispiel integrieren. Betrachten Sie ein Szenario, in dem die Objekte einer Klasse in einem Min-HEAP aufbewahrt werden müssen. Betrachten Sie eine Klasse, die Attribute wie "Name", "Grad", "Dob" (Geburtsdatum) und "Gebühr" enthält.'Die Objekte dieser Klasse müssen je nach "Dob" (Geburtsdatum) in einem Min-heap gehalten werden.

Wir überschreiben nun den relationalen Operator “, um die Gebühr jedes Schülers zu vergleichen und True oder False zurückzugeben.

Unten finden Sie den Code, den Sie Schritt für Schritt durchlaufen können. Wir haben das Heapq -Modul importiert und den Klasse 'Schüler' definiert, in dem wir den Konstruktor und die Funktion für maßgeschneiderten Druck geschrieben haben. Wie Sie sehen können, haben wir den Vergleichsbetreiber außer Kraft gesetzt.

Wir haben jetzt Objekte für die Klasse erstellt und die Listen des Schülers angegeben. Basierend auf dem DOB das Code -Hauptquartier.Heapify (EMP) wird in Min-heap konvertieren. Das Ergebnis wird im letzten Code -Stück angezeigt.

Heapq als Hauptquartier importieren
Klassenstudent:
def __init __ (self, a, b, yos, c):
selbst.Name = a
selbst.Grad = b
selbst.Dob = yos
selbst.Gebühr = c
Def print_me (self):
print ("Name:", Selbst.Name)
print ("Grad:", Selbst.Grad)
Druck ("Geburtsdatum:", str (Selbst.Dob)))
print ("Gehalt:", str (Selbst selbst.Gebühr))
def __lt __ (self, nxt):
Rückkehr selbst.Dob < nxt.DOB
Std1 = Student ('Alex', 'Law', 1990, 36000)
STD2 = Student ('Mathew', 'PhD', 1998, 35000)
STD3 = Student ('Tina', 'Informatik', 1980, 70000)
STD4 = Student ('Jack', 'It', 1978, 90000)
STD = [STD1, STD2, STD3, STD4]
HQ.heapifizieren (STD)
für i in Reichweite (0, Len (STD)):
std [i].Druck mich()
drucken()

Hier ist die vollständige Ausgabe des oben genannten Referenzcode.

Abschluss:

Sie haben jetzt ein besseres Verständnis der Datenstrukturen von Haufen und Prioritätswarteschlangen und wie sie Ihnen bei der Lösung verschiedener Arten von Problemen helfen können. Sie haben untersucht. Sie haben auch untersucht, wie Sie die verschiedenen Operationen des Python Heapq -Moduls nutzen können. Um das Thema besser zu verstehen, lesen Sie den Artikel gründlich und wenden Sie die angegebenen Beispiele an.