Tutorial für Haufen Datenstruktur

Tutorial für Haufen Datenstruktur
Daten sind eine Reihe von Werten. Daten können gesammelt und in eine Zeile oder in einer Spalte oder in einer Tabelle oder in Form eines Baumes gestellt werden. Die Datenstruktur ist nicht nur die Platzierung von Daten in einer dieser Formen. Beim Computer ist die Datenstruktur eines dieser Formate sowie die Beziehung zwischen den Werten sowie die Operationen (Funktionen) auf den Werten durchzuführen. Sie sollten bereits über Grundkenntnisse über die Baumdatenstruktur verfügen, bevor Sie hierher kommen, da die Konzepte dort mit wenig oder gar keiner Erklärung verwendet werden. Wenn Sie dieses Wissen nicht haben, lesen.com/tree_data_structure_tutorial_beginers/. Danach lesen Sie dieses Tutorial weiterhin.Eine Heap -Datenstruktur ist ein vollständiger oder fast vollständiger binärer Baum, wobei das Kind jedes Knotens gleich oder kleiner ist als der Wert seines übergeordneten Werts. Alternativ ist es ein solcher Baum, bei dem der Wert eines Elternteils gleich oder kleiner als der Wert eines seiner Kinder ist. Der Wert (Datum) eines Baumes wird auch als Schlüssel bezeichnet.

Abbildung von Haufen Datenstrukturen

Es gibt zwei Arten von Haufen: einen max-heap und einen min-heap. Bei einer Max-HEAP-Struktur ist der Maximalwert die Wurzel, und die Werte werden kleiner, wenn der Baum abstammt. Jeder Elternteil ist entweder gleich oder größer als eines seiner unmittelbaren Kinder. In einer Min-H-Kap-Struktur ist der Mindestwert die Wurzel, und die Werte werden größer, wenn der Baum abstammt. Jeder Elternteil ist entweder gleich oder kleiner als einer seiner unmittelbaren Kinder. In den folgenden Diagrammen ist das erste ein Max-heap und der zweite ist ein Min-heap:

Beachten Sie für beide Haufen, dass es für ein Paar Kinder keine Rolle spielt, ob das links der größere Wert ist. Eine Reihe in einer Ebene im Baum darf nicht unbedingt von links von minimal bis maximal gefüllt werden. Es ist auch nicht unbedingt von maximal bis mindestens von links gefüllt.

Darstellen einen Haufen in einem Array

Damit Software leicht einen Heap benutzt, muss der Heap in einem Array dargestellt werden. Der in einem Array dargestellte Max-heap ist:

89, 85, 87, 84, 82, 79, 73, 80, 81,, 65, 69

Dies geschieht mit dem Stammwert als erster Wert für das Array. Die Werte werden kontinuierlich platziert, indem der Baum von links nach rechts von oben nach unten gelesen wird. Wenn ein Element fehlt, wird seine Position im Array übersprungen. Jeder Knoten hat zwei Kinder. Wenn sich ein Knoten am Index (Position) n befindet, befindet sich sein erstes Kind im Array am Index 2n+1 und sein nächstes Kind ist in Index 2n+2. 89 ist am Index 0; Sein erstes Kind, 85, befindet sich am Index 2 (0)+1 = 1, während sein zweites Kind in Index 2 (0)+2 = 2 ist. 85 ist am Index 1; Sein erstes Kind, 84, befindet sich bei Index 2 (1)+1 = 3, während sein zweites Kind 82 in Index 2 (1)+2 = 4 ist. 79 ist am Index 5; Sein erstes Kind, 65, befindet sich am Index 2 (5)+1 = 11, während sein zweites Kind in Index 2 (5)+2 = 12 ist. Die Formeln werden auf den Rest der Elemente im Array angewendet.

Ein solches Array, bei dem die Bedeutung eines Elements und die Beziehung zwischen den Elementen durch die Position des Elements impliziert wird, wird als implizite Datenstruktur bezeichnet.

Die implizite Datenstruktur für die oben genannten Mine-heap lautet:

65, 68, 70, 73, 71, 83, 84,, 79, 80,, 85, 89

Das obige Max-heap ist ein kompletter binärer Baum, aber kein voller binärer Baum. Deshalb sind einige Orte (Positionen) im Array leer. Für einen vollen Binärbaum ist in der Array kein Ort leer.

Wenn der Haufen nun ein fast vollständiger Baum wäre, wenn der Wert 82 fehlt, wäre das Array:

89, 85, 87, 84, 79, 73, 80, 81,, 65, 69

In dieser Situation sind drei Standorte leer. Die Formeln sind jedoch noch anwendbar.

Operationen

Eine Datenstruktur ist ein Datenformat (e.G. ein Baum) plus die Beziehung zwischen den Werten sowie die Operationen (Funktionen) der Werte erfolgen. Für einen Haufen ist die Beziehung, die den gesamten Haufen durchläuft, für einen Max-HEAP gleich oder höher als die Kinder. und der Elternteil muss für einen Min-Heap gleich oder weniger als die Kinder sein als die Kinder. Diese Beziehung wird als Heap -Eigenschaft bezeichnet. Die Operationen eines Haufen. Eine Zusammenfassung der Operationen des Haufens folgt:

Haufen Operationen Zusammenfassung

Es gibt bestimmte Softwareoperationen, die bei Haufen gemeinsam sind, wie folgt:

Schaffung eines Haufens

Create_heap: Erstellen eines Haufens bedeutet, ein Objekt zu bilden, das den Haufen darstellt. In der C -Sprache können Sie einen Haufen mit dem Strukturobjekttyp erstellen. Eines der Mitglieder der Struktur ist das Haufen -Array. Der Rest der Mitglieder ist Funktionen (Operationen) für den Haufen. Create_heap bedeutet, einen leeren Haufen zu erstellen.

Heapify: Das Heap -Array ist ein teilweise sortiertes (bestelltes) Array. Heapify -Mittelwerte und ein Heap -Array aus einem ungeortierten Array angeben - siehe Details unten.

Merge: Dies bedeutet, einen Gewerkschaftshaufen aus zwei verschiedenen Haufen zu bilden - siehe Details unten. Die beiden Haufen sollten sowohl max-heap als auch beide Min-heap sein. Der neue Haufen entspricht der Haufen Eigenschaft, während die ursprünglichen Haufen erhalten bleiben (nicht gelöscht).

MELD: Dies bedeutet, zwei Haufen desselben Typs zu einer neuen zu bilden, die Duplikate pflegen - siehe Details unten. Der neue Haufen entspricht der Haufen Eigenschaft, während die ursprünglichen Haufen zerstört werden (gelöscht). Der Hauptunterschied zwischen Zusammenführung und Verschmelzung besteht darin, dass ein Baum für die Verschmelzung als Subtree zur Wurzel des anderen Baums passt, wodurch doppelte Werte im neuen Baum ermöglicht werden, während für das Zusammenführen ein neuer Haufenbaum gebildet wird, wobei Duplikate entfernt werden, um Duplikate zu entfernen. Es ist nicht erforderlich, die beiden ursprünglichen Haufen mit der Verschmelzung aufrechtzuerhalten.

Grundlegende Haufen Operationen

find_max (find_min): Suchen Sie den Maximalwert im Max-HEAP-Array und geben.

Einfügen: Fügen Sie dem Haufen Array ein neues Element hinzu und ordnen Sie das Array neu an, damit die Haufen Eigenschaft des Diagramms beibehalten wird.

extract_max (extract_min): Suchen Sie den Maximalwert im Max-HEAP-Array, entfernen und geben Sie ihn zurück. oder finden Sie den Mindestwert im Min-HEAP-Array, entfernen und geben Sie ihn zurück.

Delete_max (Delete_Min): Suchen Sie den Stammknoten eines Max-HEAP, das das erste Element des Max-HEAP-Arrays ist, ohne es unbedingt zurückzugeben. oder lokalisieren Sie den Wurzelknoten eines Min-Hakens, das das erste Element des Min-H-Kaps-Arrays ist, ohne es unbedingt zurückzugeben

Ersetzen. Es spielt keine Rolle, ob die alte Wurzel zurückgegeben wird.

Interne Haufen Operationen

erhöhen_key (mecrease_key): Erhöhen Sie den Wert eines beliebigen Knotens für einen Max-heap und ordnen Sie sie neu an, damit die Heap-Eigenschaft erhalten bleibt, oder verringern Sie den Wert eines jeden Knoten.

Löschen: Löschen Sie jeden Knoten und ordnen Sie sie dann neu an.

SHIFT_UP: Bewegen.

SHIFT_DOWN: Bewegen.

Häufigkeitsprüfung

Größe: Dies gibt die Anzahl der Schlüssel (Werte) in einem Haufen zurück; Es enthält nicht die leeren Standorte des Haufens -Arrays. Ein Haufen kann durch Code, wie im Diagramm oder mit einem Array dargestellt werden.

ist leer: Dies gibt boolean wahr, wenn es keinen Knoten in einem Haufen oder boolean falsch gibt, wenn der Haufen mindestens einen Knoten hat.

Sieben in einem Haufen

Es gibt Sift-up und Sift nach unten:

Sieben: Dies bedeutet, einen Knoten mit seinem Elternteil auszutauschen. Wenn das Heap -Eigentum nicht erfüllt ist, tauschen Sie den Elternteil mit seinem eigenen Elternteil aus. Fahren Sie auf dem Weg fort, bis das Heap -Eigentum erfüllt ist. Das Verfahren könnte die Wurzel erreichen.

Sieben: Dies bedeutet, einen Knoten mit großem Wert mit dem kleineren seiner beiden Kinder (oder einem Kind gegen einen fast vollständigen Haufen) auszutauschen. Wenn die Heap -Eigenschaft nicht erfüllt ist, tauschen Sie den unteren Knoten mit dem kleineren Knoten ihrer eigenen beiden Kinder aus. Fahren Sie auf dem Weg fort, bis das Heap -Eigentum erfüllt ist. Das Verfahren könnte ein Blatt erreichen.

Häufbar

Heapify bedeutet, ein ungeortes Array zu sortieren, damit das Heap-Eigentum für Max-heap oder Min-heap zufrieden ist. Dies bedeutet. Der grundlegende Algorithmus zum Heapifizieren eines max-heap oder min-heap ist wie folgt:

- Wenn der Wurzelknoten extremer ist als jeder der Knoten seines Kindes, tauschen Sie die Wurzel mit dem weniger extremen Kinderknoten aus.

- Wiederholen Sie diesen Schritt mit den Kinderknoten in einem Vorbestellungsbaum, das durchquert wird.

Der letzte Baum ist ein Haufenbaum, der die Haufen Eigenschaft erfüllt. Ein Haufen kann als Baumdiagramm oder in einem Array dargestellt werden. Der resultierende Haufen ist ein teilweise sortierter Baum, ich.e. ein teilweise sortiertes Array.

Heap -Betriebsdetails

In diesem Abschnitt des Artikels werden die Details der Heap -Operationen angezeigt.

Schaffung eines Haufensdetails

Create_heap

Siehe oben!

hüpfen

Siehe oben

verschmelzen

Wenn sich die Haufen anordnen,

89, 85, 87, 84, 82, 79, 73, 80, 81,, 65, 69

Und

89, 85, 84, 73, 79, 80, 83, 65, 68, 70, 71

werden verschmolzen, das Ergebnis ohne Duplikate kann sein,

89, 85, 87, 84, 82, 83, 81, 80, 79, 73, 68, 65, 69, 70, 71

Nach einiger Sieben. Beachten Sie, dass im ersten Array 82 keine Kinder hat. In dem resultierenden Array befindet es sich in Index 4; und seine Standorte am Index 2 (4)+1 = 9 und 2 (4)+2 = 10 sind frei. Dies bedeutet, dass es auch keine Kinder im neuen Baumdiagramm hat. Die ursprünglichen zwei Haufen sollten nicht gelöscht werden, da ihre Informationen nicht wirklich im neuen Heap (Neuarray) enthalten sind. Der grundlegende Algorithmus zum Zusammenführen von Haufen desselben Typs lautet wie folgt:

- Schließen Sie ein Array zum Ende des anderen Arrays an.

- Heapify beseitigt Duplikate und sorgt dafür, dass Knoten, die keine Kinder in den ursprünglichen Haufen hatten, immer noch keine Kinder auf dem neuen Haufen haben.

verschmelzen

Der Algorithmus zur Verschmelzung von zwei Haufen desselben Typs (entweder zwei maximale oder zwei min) ist wie folgt:

- Vergleichen Sie die beiden Wurzelknoten.

- Machen Sie die weniger extreme Wurzel und den Rest seines Baumes (Subtree), das zweite Kind der extremen Wurzel.

- Sieben Sie das streunende Kind der Wurzel des jetzt extremen Teilbaums nach unten im extremen Subtree.

Der resultierende Haufen entspricht immer noch mit der Haufen Eigenschaft, während die ursprünglichen Haufen zerstört werden (gelöscht). Die ursprünglichen Haufen können zerstört werden, da alle Informationen, die sie besaßen.

Grundlegende Haufen Operationen

find_max (find_min)

Dies bedeutet, den Maximalwert im Max-HEAP-Array zu lokalisieren und eine Kopie zurückzugeben oder den Mindestwert im Min-HEAP-Array zu finden und eine Kopie zurückzugeben. Ein Heap -Array erfüllt die Heap -Eigenschaft im Definition bereits. Geben Sie also einfach eine Kopie des ersten Elements des Arrays zurück.

Einfügung

Dies bedeutet, dem Haufen Array ein neues Element hinzuzufügen und das Array neu zu ordnen, damit die Haufen Eigenschaft des Diagramms beibehalten wird (zufrieden). Der Algorithmus, um dies für beide Arten von Haufen zu tun, lautet wie folgt:

- Nehmen Sie einen vollen binären Baum an. Dies bedeutet, dass das Array bei Bedarf am Ende mit leeren Stellen gefüllt werden muss. Die Gesamtzahl der Knoten eines vollständigen Haufens beträgt 1 oder 3 oder 7 oder 15 oder 31 usw.; Verdoppeln Sie weiter und fügen Sie 1 hinzu.

- Setzen Sie den Knoten in der am besten geeigneten leeren Stelle nach Größe gegen Ende des Haufens (gegen Ende des Haufens -Arrays). Wenn es keinen leeren Ort gibt, starten Sie eine neue Reihe von unten nach links.

- Geben Sie bei Bedarf an, bis das Haufen Eigentum erfüllt ist.

extract_max (extract_min)

Suchen Sie den Maximalwert im Max-HEAP-Array, entfernen und geben Sie ihn zurück. oder finden Sie den Mindestwert im Min-HEAP-Array, entfernen und geben Sie ihn zurück. Der Algorithmus zum Extract_max (extract_min) lautet wie folgt:

- Entfernen Sie den Wurzelknoten.

- Nehmen Sie (entfernen) den unteren Knoten am rechten Platz (letzter Knoten im Array) und an die Wurzel legen.

- Geben Sie gegebenenfalls nach unten, bis das Heap -Eigentum erfüllt ist.

Delete_max (Delete_Min)

Suchen Sie den Wurzelknoten eines Max-HEAP, der das erste Element des Max-HEAP-Arrays ist, und entfernen Sie es, ohne es unbedingt zurückzugeben. oder lokalisieren. Der Algorithmus zum Löschen des Stammknotens lautet wie folgt:

- Entfernen Sie den Wurzelknoten.

- Nehmen Sie (entfernen) den unteren Knoten am rechten Platz (letzter Knoten im Array) und an die Wurzel legen.

- Geben Sie gegebenenfalls nach unten, bis das Heap -Eigentum erfüllt ist.

ersetzen

Suchen Sie den Wurzelknoten eines Heaps, entfernen Sie ihn und ersetzen Sie ihn durch den neuen. Es spielt keine Rolle, ob die alte Wurzel zurückgegeben wird. Geben Sie gegebenenfalls nach unten, bis das Heap -Eigentum erfüllt ist.

Interne Haufen Operationen

erhöhen_key (mecrease_key)

Erhöhen Sie den Wert eines Knotens für einen Max-HEAP und eine neu ordnungsgemäß. Sieben Sie gegebenenfalls nach oben oder unten, bis das Haufen Eigentum erfüllt ist.

löschen

Entfernen Sie den interessierenden Knoten und ordnen Sie sie dann neu an. Der Algorithmus zum Löschen eines Knotens lautet wie folgt:

- Entfernen Sie den interessierenden Knoten.

- Nehmen Sie (entfernen) den unteren Knoten am rechten Platz (letzter Knoten im Array) und platzieren Sie am Index des entfernt entfernten Knotens. Wenn der gelöschte Knoten in der letzten Zeile ist, ist dies möglicherweise nicht erforderlich.

- Sieben Sie gegebenenfalls nach oben oder unten, bis das Haufen Eigentum erfüllt ist.

Hochschalten

Bewegen.

Herunterschalten

Bewegen.

Häufigkeitsprüfung

Größe

Siehe oben!

ist leer

Siehe oben!

Andere Klassen von Haufen

Der in diesem Artikel beschriebene Heap kann als Haupt- (allgemeiner) Haufen angesehen werden. Es gibt andere Klassen von Haufen. Die beiden, die Sie darüber hinaus wissen sollten, sind der binäre Haufen und der D-Ary-Haufen.

Binärhaufen

Der binäre Haufen ähnelt diesem Haupthaufen, jedoch mit mehr Einschränkungen. Insbesondere muss der binäre Haufen ein vollständiger Baum sein. Verwechseln Sie nicht zwischen einem vollständigen Baum und einem vollen Baum.

D-Ary Heap

Ein binärer Haufen ist ein 2-Ary-Haufen. Ein Haufen, bei dem jeder Knoten 3 Kinder hat, ist ein 3-Ary-Haufen. Ein Haufen, bei dem jeder Knoten 4 Kinder hat, ist ein 4-Ary-Haufen und so weiter. Ein D-Ary-Heap hat andere Einschränkungen.

Abschluss

Ein Haufen ist ein vollständiger oder fast vollständiger binärer Baum, der das Haufen Eigentum erfüllt. Die Heap-Eigenschaft hat 2 Alternativen: Für einen Max-heap muss ein Elternteil einen gleichen oder höheren Wert haben als die unmittelbaren Kinder; Für einen Miner-HEAP muss ein Elternteil gleich oder weniger Wert haben als die unmittelbaren Kinder. Ein Haufen kann als Baum oder in einem Array dargestellt werden. Wenn der Stammknoten in einem Array dargestellt wird, ist er der erste Knoten des Arrays; und wenn ein Knoten bei Index N ist, befindet sich sein erstes Kind im Array am Index 2n+1 und sein nächstes Kind ist in Index 2n+2. Ein Haufen hat bestimmte Operationen, die auf dem Array durchgeführt werden.

Chrys