Max heap ist eine Datenstruktur, bei der es sich um einen Baum handelt, der einer Eigenschaft entspricht pyramidalitäten. In max heap hat jeder übergeordnete Knoten einen Wert, der größer oder gleich dem Wert seiner untergeordneten Knoten ist. Auf diese Weise können Sie den maximalen Wert schnell finden und verarbeiten.
In diesem detaillierten Anfängerleitfaden werden wir uns ansehen, wie man einen Max Heap baut. Dieser Prozess wird als Pyromidalisierung. Wir verwenden den Percolate Down-Algorithmus, um Elemente zu durchlaufen und an die richtigen Stellen zu verschieben.
Um zu beginnen, müssen Sie ein Array von Elementen haben, aus denen max heap erstellt wird. Der Algorithmus beginnt mit dem letzten übergeordneten Knoten und geht in der Struktur nach unten, vergleicht die Werte der Knoten und tauscht sie bei Bedarf aus. Dadurch wird sichergestellt, dass die größten Werte an der Spitze der Pyramide stehen und die kleineren Werte niedriger bleiben.
Was ist max heap?
Der maximale Heap wird häufig in Sortier- und Suchalgorithmen sowie in vielen anderen Aufgaben verwendet, bei denen eine effiziente Sortierung und der Zugriff auf Elemente erforderlich sind.
Die folgenden Eigenschaften unterscheiden max heap:
- Der Wert eines Knotens in der Struktur ist größer oder gleich dem Wert seiner Nachkommen.
- Die Tiefe des Baumes ist minimal.
- Die letzte Ebene des Baumes wird von links nach rechts ausgefüllt.
Der maximale Heap kann als Array dargestellt werden, wobei sich jedes Element an einer bestimmten Position befindet. Auf diese Weise können Sie schnell Einfüge-, Lösch- und Suchvorgänge durchführen.
Max heap wird beispielsweise im Heapsort-Algorithmus verwendet, der einer der schnellsten Sortieralgorithmen ist.
Warum ist max heap für die Programmierung wichtig?
In der Programmierung hat max heap eine breite Palette von Anwendungen:
- Prioritätswarteschlangen: Mit Max heap können Sie Aufgaben mit unterschiedlichen Prioritäten effizient verwalten. Abfragen mit höherer Priorität können zuerst verarbeitet werden.
- Sortieren von Daten: Max heap wird in Sortieralgorithmen wie der Pyramidensortierung verwendet. Dadurch können Sie große Datenmengen effizient organisieren.
- Das k-ten größte Element finden: Max heap kann verwendet werden, um das k-ten größte Element in einem Datenarray zu finden. Dies ist besonders nützlich, wenn Sie mit großen Datenmengen arbeiten.
Max heap hat eine Reihe von Vorteilen, die es für die Programmierung wichtig machen:
- Effizienz: Max heap bietet effizienten Zugriff auf das größte Element. Die Ausführungszeit für grundlegende Operationen wie Hinzufügen, Löschen oder Suchen beträgt O(log n), wobei n die Anzahl der Elemente im max heap ist.
- Datenreihenfolge: Max heap stellt sicher, dass jeder Knoten einen Wert hat, der den Wert seiner Eltern nicht übersteigt. Auf diese Weise können Sie die Daten effizient organisieren und verschiedene Operationen darauf durchführen.
- Flexibilität: Max heap kann als Array implementiert werden, wodurch es flexibel und einfach in verschiedenen Softwareumgebungen verwendet werden kann.
Daher ist max heap ein wichtiges Programmierwerkzeug, mit dem Sie Daten effizient verwalten und organisieren können. Das Wissen und Verständnis von max heap kann die Effizienz und Leistung von Code verbessern, insbesondere bei der Arbeit mit großen Mengen an Informationen.
Wie erstelle ich einen Max heap?
Betrachten wir die Schritte zum Erstellen von Max heap:
- Konvertiert das Eingabearray in einen binären Heap. Dazu werden wir alle Elemente des Arrays ab der Mitte durchlaufen und jedes Element an seine richtige Position auf dem Heap verschieben.
- Überprüfen und Verschieben von Elementen im Baum nach oben. Wenn der Wert eines Knotens größer ist als der Wert seines übergeordneten Knotens, tauschen wir sie aus. Dies wird so lange fortgesetzt, bis der Heap die Max Heap-Bedingung erfüllt.
Nachdem wir diese Schritte ausgeführt haben, erhalten wir einen erstellten max heap, bei dem der übergeordnete Knoten größer ist als seine untergeordneten Knoten. Diese Datenstruktur wird häufig verwendet, z. B. in Sortieralgorithmen wie der Pyramidensortierung.
Max Heap-Komprimierung in einer Richtung
Der max heap unidirektionale Komprimierungsprozess umfasst die folgenden Schritte:
- Entfernt das Stammelement, das das größte Element in max heap ist.
- Ersetzt das gelöschte Element durch das letzte Element im Heap.
- Reduziert die Größe des Max heap durch Reduzierung der Anzahl der Elemente.
- Ordnet den max heap neu an, indem das ersetzte Element an die entsprechende Position verschoben wird.
Die unidirektionale Max-Heap-Komprimierung ist nützlich, wenn nur die größten Elemente aus dem Heap verwendet werden müssen oder wenn die Heapgröße schrittweise reduziert werden muss. Dieser Algorithmus kann in verschiedenen Bereichen nützlich sein, z. B. in Computernetzwerken, bei der Sortierung von Daten und bei anderen Anwendungen, bei denen eine effiziente Verwaltung großer Datenmengen erforderlich ist.
Es ist wichtig zu beachten, dass die unidirektionale max Heap-Komprimierung dazu führen kann, dass sich die Reihenfolge der Elemente auf dem Heap ändert. Nachdem der Algorithmus angewendet wurde, befindet sich das größte Element im neuen Heapstamm, und die anderen Elemente werden an die entsprechenden Positionen verschoben, um die max heap-Eigenschaft beizubehalten.
Der Pseudocode des Max Heap-Konstruktionsalgorithmus
Der Max Heap-Algorithmus (Pyramide) verwendet den Prozess, um die Elemente eines Arrays so zu permutieren, dass jedes übergeordnete Element größer oder gleich seinen untergeordneten Elementen ist. Der Pseudocode des Max Heap-Konstruktionsalgorithmus lautet wie folgt:
| BuildMaxHeap-Prozedur(arr) |
| heapSize = arr.length |
| for i = floor(heapSize/2) downto 1 |
| MaxHeapify(arr, i) |
| Ende des Verfahrens |
Für jedes Element im Array, beginnend in der Mitte bis zum ersten Element (i = floor(heapSize/2) downto 1), wird die Prozedur MaxHeapify(arr, i) aufgerufen, die eine Teilstruktur mit einer Wurzel an Position i in max heap konvertiert.
Die Prozedur MaxHeapify(arr, i) führt die folgenden Aktionen aus:
| MaxHeapify-Prozedur(arr, i) |
| links = 2 * ich |
| rechts = 2 * i + 1 |
| größte = i |
| wenn links < heapSize и arr[left] >arr[zweitgrößte] |
| größte = links |
| wenn richtig < heapSize и arr[right] >arr[zweitgrößte] |
| größte = rechts |
| wenn am größten != ich |
| tauschen(arr[ich], arr[zweitgrößte]) |
| MaxHeapify(arr, größte) |
| Конец процедуры |
Die Prozedur MaxHeapify(arr, i) wird rekursiv für jedes Element aufgerufen, das über untergeordnete Elemente verfügt, die größer sind als das Element selbst. Das Ergebnis des Max Heap-Konstruktionsalgorithmus ist ein Array, das den Max heap-Eigenschaften entspricht.
Komplexität beim Aufbau von Max heap
Der Max Heap-Konstruktionsalgorithmus besteht aus zwei Hauptschritten: konvertieren Sie ein Array in fast max heap und konvertieren Sie fast max heap in max heap. Während der ersten Phase durchläuft der Algorithmus die Elemente des Arrays von rechts nach links und führt für jedes Element eine Abwärts-Abwärts-Operation durch, um sicherzustellen, dass die max Heap-Eigenschaft ausgeführt wird.
Im schlimmsten Fall kann jede der N Down-Down-Operationen bis zu O(log n) Zeit in Anspruch nehmen, was O(n * log n) Zeit ergibt, um das Array in fast max heap zu konvertieren.
Im zweiten Schritt führt der Algorithmus für jedes Element bei Bedarf eine Operation zum Heap-Stamm durch. Im schlimmsten Fall kann dieser Vorgang auch bis zu O(log n) Zeit in Anspruch nehmen. Da es im maximalen Fall n-1 Elemente geben wird, die die Operation "nach oben heben" erfordern, beträgt die Komplexität dieser Phase O(n * log n).
Daher ist die Gesamtkomplexität beim Erstellen des max heap eines ursprünglich unsortierten Arrays O(n * log n). Wenn das Array jedoch bereits teilweise sortiert ist oder weniger Elemente enthält, kann die Ausführungszeit erheblich geringer sein.
Beispiel für den Max Heap-Build-Algorithmus
Nehmen wir an, wir haben eine ungeordnete Anzahl von Zahlen: [8, 5, 3, 9, 2]. Um den max heap zu erstellen, werden wir jedes Element nacheinander in den Heap einfügen.
Schritt 1: Fügen Sie das erste Element ein - 8.
- Das erste Element wird zum Stammknoten des Heaps.
Schritt 2: Fügen Sie das zweite Element ein - 5.
- 5 ist kleiner als 8, daher wird es zum linken Nachkomme des Wurzelknotens.
Schritt 3: Wir fügen das dritte Element ein - 3.
- 3 ist kleiner als 8, also wird es ein linker Nachkomme von 5.
- Dann überprüfen wir den übergeordneten Knoten 5 und stellen fest, dass er kleiner als 3 ist. Um die max heap-Eigenschaft beizubehalten, tauschen wir 5 und 3 aus.
Schritt 4: Fügen Sie das vierte Element ein - 9.
- 9 ist größer als 8 und wird zu einem neuen Wurzelknoten.
- Dann überprüfen wir seinen linken Nachkommen, der 5 ist. Wir sehen, dass 9 größer ist als 5, also lassen wir es stehen.
Schritt 5: Fügen Sie das fünfte Element ein - 2.
- 2 ist kleiner als 8, also wird es ein linker Nachkomme von 9.
- Dann überprüfen wir Knoten 5 und stellen fest, dass es größer als 2 ist. Wir tauschen die Plätze 5 und 2 aus.
- Dann überprüfen wir den übergeordneten Knoten 9 und stellen fest, dass er kleiner als 2 ist. Wir tauschen die Plätze 9 und 2 aus.
Nach all den Schritten erhalten wir max heap: [9, 8, 3, 5, 2].