HEAP Info1, Heap ❑ Binärbaum mit zwei Eigenschaften: EINFÜGEN EINES EINTRAGES Info1, Heap algm insert(h, k) {füge k in Heap h ein} (1) links-vollständig (2) partiell geordnet -> Eintrag im Vaterknoten >= Eintrag in den beiden Söhnen erzeuge einen Knoten q mit Eintrag k; füge q auf der ersten freien Position der untersten Ebene ein (falls die unterste Ebene voll, beginne eine neue Ebene); ❑ Beispiel: ein möglicher Heap über den Zahlen 0 bis 9 sei p der Vater von q; while p existiert and Eintrag(p) < Eintrag(q) do 9 Vertausche die Einträge in p und q; q := p; // Vorrücken von q und p entlang p := Vater von p // des Weges Richtung Wurzel 6 8 endwhile 5 7 3 1 endalgm insert. 2 [email protected] 0 4 WS 2005 HEAP, ANMERKUNGEN 3.3 - 1 / 6 Info1, Heap ❑ der Eintrag der Wurzel liefert das Maximum der Knoteneinträge [email protected] WS 2005 EINFÜGEN, ANMERKUNGEN 3.3 - 3 / 6 Info1, Heap ❑ der neue Eintrag steigt so lange auf, bis die Heap-Eigenschaft wieder erfüllt ist ❑ Folge der Knoteninhalte auf einem Pfad ist monoton fallend ❑ Länge dieses Weges ist durch die Höhe des Baumes beschränkt -> log n ❑ Eigenschaft (2) kann auch als “<=” ausgelegt werden -> Wurzel - Minimum der Knoteneinträge ❑ Ringtausch optimiert den Aufwand beim Aufstieg eines neuen Eintrages -> monoton steigende Knoteninhalte [email protected] WS 2005 3.3 - 2 / 6 [email protected] WS 2005 3.3 - 4 / 6 LÖSCHEN EINES EINTRAGES Info1, Heap algm deleteMax(h) {lösche den maximalen Eintrag und gib ihn aus} entnimm der Wurzel den maximalen Eintrag; nimm den Eintrag der letzten besetzten Position im Baum (lösche diesen Knoten) und setze ihn in die Wurzel; sei p die Wurzel und q, r ihre Söhne; while q oder r existieren and Eintrag(p) < Eintrag(q) or Eintrag(p) < Eintrag(r) do Vertausche den Eintrag in p mit dem größeren Eintrag der beiden Söhne; setze p auf den Knoten, mit dem vertauscht wurde; setze q, r auf Söhne von p endwhile endalgm deleteMax. [email protected] WS 2005 LÖSCHEN, ANMERKUNGEN 3.3 - 5 / 6 Info1, Heap ❑ der “neue” Eintrag in der Wurzel sinkt so lange, bis die Heap-Eigenschaft wieder erfüllt ist ❑ Länge dieses Weges ist durch die Höhe des Baumes beschränkt -> log n ❑ Ringtausch optimiert den Aufwand beim Abstieg eines “neuen” Eintrages [email protected] WS 2005 3.3 - 6 / 6