Binärbaum mit zwei Eigenschaften: (1) links

Werbung
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
Herunterladen