Binärer Suchbaum IV AVL-Baum I Diskrete Mathematik I Vorlesung 8 Binärer Suchbaum IV AVL-Baum I
Durchlaufstrategien Preorder 1 Durchlaufstrategien Preorder Die Wurzel wird vor den Unterbäumen besucht, die Unterbäume werden von links nach rechts abgearbeitet Breitendurchlauf Mit einem Knoten werden seine Nachbarn von links nach rechts besucht
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 Warteschlange 16 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 Ws 16 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 Ws 10 24 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 10 24 Ws A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 Ws 24 9 14 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 24 9 Ws 14 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 9 14 Ws 18 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 9 9 14 Ws 18 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 9 14 14 18 Ws A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 9 14 Ws 18 13 15 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 9 14 18 18 13 Ws 15 A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 9 14 18 13 13 15 Ws A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 9 14 18 13 15 15 Ws A 26x
Durchlaufstrategie: Breitendurchlauf 2 Durchlaufstrategie: Breitendurchlauf 18 14 9 10 24 16 13 15 16 10 24 9 14 18 13 15 Ws A 26x
Durchlaufstrategie: Breitendurchlauf 3 Durchlaufstrategie: Breitendurchlauf class BST { ... void Breitendurchlauf() { SohnListe ws = new SohnListe(); Knoten aktuell; ws.FügeAn(wurzel); while ((aktuell = ws.Entferne()) != null) { System.out.println(aktuell.GibWert()); ws.FügeAn(aktuell.GibLinks()); ws.FügeAn(aktuell.GibRechts()); } Test auf Ende entferne A 2x
Breitendurchlauf: SohnElem 4 Breitendurchlauf: SohnElem knoten (statt int) class SohnElem { private Knoten wert; private SohnElem weiter; SohnElem(Knoten k) { wert = k; weiter = null; } void SetzeWert(Knoten k) { wert = k; } Knoten GibWert() { return wert; } void SetzeWeiter(SohnElem s) { weiter = s; } SohnElem GibWeiter() { return weiter; } }
Breitendurchlauf: SohnListe, FügeAn (hinten) 5 Breitendurchlauf: SohnListe, FügeAn (hinten) class SohnListe { private SohnElem kopf, fuß; Sohn Liste() {kopf = fuß = null;} void FügeAn(Knoten an) { SohnElem neu = new SohnElem(an); if (fuß != null) { fuß.SetzeWeiter(neu); fuß = neu; } else kopf = fuß = neu;
Breitendurchlauf: Entferne vorne 6 Breitendurchlauf: Entferne vorne . Knoten Entferne() { Knoten erster = null; if (kopf != null) { erster = kopf.GibWert(); kopf = kopf.GibWeiter(); if (kopf == null) fuss = null; } return erster;
Vergleich „Binäre Suchbäume“ - „Liste“ 7 Vergleich „Binäre Suchbäume“ - „Liste“ in einem binären Suchbaum findet man schneller ein vorhandenes Objekt in einem binären Suchbaum stellt man schneller fest, daß ein Objekt nicht vorhanden ist warum? der Weg vom Kopf zur Wurzel ist im allgemeinen kürzer als der Weg vom Anfang zum Ende eine Liste (kann man das genauer, d. h. quantitativ angeben? später) es gibt aber auch ungünstige Fälle, wo der Baum aussieht wie eine Liste diese Fälle treten stets bei der iterativen Eingabe sortierter Elemente auf
Beispiele für den Aufbau binärer Suchbäume 8 Beispiele für den Aufbau binärer Suchbäume Eingabefolge 1-2-3 Eingabefolge 3-2-1 1 2 3 1 2 3 Eingabefolge 2-3-1 oder 2-1-3 Eingabefolge 3-1-2 1 2 3 2 1 3 A 7x
AVL-Baum (Definition) 9 AVL-Baum (Definition) Ein binärer Baum heißt ausgeglichener Baum oder AVL-Baum (nach Adelson- Velskij und Landis), falls sich für jeden Knoten k die Höhen h der beiden Teilbäume um höchstens 1 unterscheiden.
10 AVL-Baum: Beispiel
Balancefaktor Balancefaktor bal(k) 11 Balancefaktor Balancefaktor bal(k) bal(k) = h(rechter Teilbaum von k) - h(linker Teilbaum von k) Für AVL-Bäume gilt: bal(k)
12 AVL-Baum: Beispiel +1 -1 +1 +1 A 2x
12 AVL-Baum: Beispiel +1 -1 +1 +1 A 2x
12 AVL-Baum: Beispiel +2 +1 +1 A 2x
Einfügen von Knoten +1 14 +1 8 20 3 11 17 33 26 39 Einfügen von k = 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +1 8 20 3 11 17 33 26 39 A 36x
Einfügen von Knoten +1 14 +1 8 20 3 11 17 33 26 39 Einfügen von k = 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +1 8 20 3 11 17 33 26 39 A 36x
Einfügen von Knoten +1 14 +1 8 20 3 11 17 33 26 39 Einfügen von k = 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +1 8 20 3 11 17 33 26 39 A 36x
Einfügen von Knoten +1 14 +1 8 20 3 11 17 33 26 39 Einfügen von k = 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +1 8 20 3 11 17 33 26 39 A 36x
Einfügen von Knoten +1 14 +1 8 20 3 11 17 33 26 39 Einfügen von k = 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +1 8 20 3 11 17 33 26 39 A 36x
13 Einfügen von Knoten +1 14 Einfügen von k = 30 +1 8 20 3 11 17 33 26 39 30 A 36x
Einfügen von Knoten +1 14 +1 8 20 3 11 17 33 +1 26 39 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +1 8 20 3 11 17 33 +1 26 39 30 A 36x
Einfügen von Knoten +1 14 +1 8 20 -1 3 11 17 33 +1 26 39 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +1 8 20 -1 3 11 17 33 +1 26 39 30 A 36x
Einfügen von Knoten +1 14 +2 8 20 -1 3 11 17 33 +1 26 39 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +2 8 20 -1 3 11 17 33 +1 Ausgeglichenheit ist verletzt 26 39 30 A 36x
Einfügen von Knoten +1 14 +2 8 20 -1 3 11 17 33 +1 26 39 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +2 8 20 -1 3 11 17 33 +1 26 39 Ausbalancieren durch Rotation 30 A 36x
Einfügen von Knoten +1 14 +2 8 20 -1 3 11 17 33 +1 26 39 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +2 8 20 -1 3 11 17 33 +1 26 39 R- Rotation 30 A 36x
Einfügen von Knoten +1 14 +2 8 20 -1 3 11 17 33 +1 26 39 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +2 8 20 -1 3 11 17 33 +1 26 39 30 A 36x
Einfügen von Knoten +1 14 +2 8 20 -1 3 11 17 33 +1 26 39 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 +2 8 20 -1 3 11 17 33 +1 26 39 30 A 36x
13 Einfügen von Knoten +1 14 Einfügen von k = 30 +2 8 20 3 11 17 26 33 L- Rotation 30 39 A 36x
13 Einfügen von Knoten +1 14 Einfügen von k = 30 +2 8 20 3 11 17 26 33 30 39 A 36x
13 Einfügen von Knoten +1 14 Einfügen von k = 30 +2 8 20 3 11 17 26 33 30 39 A 36x
Einfügen von Knoten +1 14 8 26 3 11 20 33 17 30 39 Einfügen von k = 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 8 26 3 11 20 33 17 30 39 A 36x
Einfügen von Knoten +1 14 8 26 3 11 20 33 17 30 39 Einfügen von k = 30 13 Einfügen von Knoten +1 14 Einfügen von k = 30 8 26 3 11 20 33 17 30 39 A 36x
13 Einfügen von Knoten +1 14 8 26 3 11 20 33 17 30 39 A 36x
Löschen von Knoten +1 14 +1 8 20 3 11 17 33 26 39 Löschen von k = 8 A +1 8 20 3 11 17 33 26 39 A 9x
Löschen von Knoten +1 14 +1 8 20 3 11 17 33 26 39 Löschen von k = 8 A +1 8 20 3 11 17 33 26 39 A 9x
Löschen von Knoten +1 14 +1 8 20 3 11 17 33 26 39 Löschen von k = 8 A +1 8 20 3 11 17 33 26 39 A 9x
Löschen von Knoten +1 14 -1 +1 11 20 3 17 33 26 39 Löschen von k = 8 A 3 17 33 26 39 A 9x
Löschen von Knoten +1 14 -1 +1 11 20 3 17 33 26 39 Löschen von k = 8 A 3 17 33 26 39 A 9x
Löschen von Knoten +1 14 -1 +1 11 20 3 17 33 26 39 Löschen von k = 8 A 3 17 33 26 39 A 9x
Löschen von Knoten +1 14 -1 +1 11 20 3 17 33 26 39 Löschen von k = 11 15 Löschen von Knoten +1 Löschen von k = 11 14 -1 +1 11 20 3 17 33 26 39 A 15x
Löschen von Knoten +1 14 -1 +1 11 20 3 17 33 26 39 Löschen von k = 11 15 Löschen von Knoten +1 Löschen von k = 11 14 -1 +1 11 20 3 17 33 26 39 A 15x
Löschen von Knoten +1 14 -1 +1 11 20 3 17 33 26 39 Löschen von k = 11 15 Löschen von Knoten +1 Löschen von k = 11 14 -1 +1 11 20 3 17 33 26 39 A 15x
Löschen von Knoten +1 14 +1 3 20 17 33 26 39 Löschen von k = 11 A 15x +1 3 20 17 33 26 39 A 15x
Löschen von Knoten +2 14 +1 3 20 17 33 26 39 Löschen von k = 11 15 Löschen von Knoten +2 Löschen von k = 11 14 +1 3 20 17 33 L- Rotation 26 39 A 15x
Löschen von Knoten +2 14 +1 3 20 17 33 26 39 Löschen von k = 11 A 15x +1 3 20 17 33 26 39 A 15x
Löschen von Knoten +2 14 +1 3 20 17 33 26 39 Löschen von k = 11 A 15x +1 3 20 17 33 26 39 A 15x
15 Löschen von Knoten Löschen von k = 11 20 14 33 3 17 26 39 A 15x
15 Löschen von Knoten 20 14 33 3 17 26 39 A 15x
16 L-Rotation Knoten x wird eingefügt und verletzt dadurch die Ausgeglichenheit an einem höher gelegenen Knoten k1 Notwendige Korrektur durch L-Rotation (symmetrisch: R-Rotation): Umhängen von zwei Kanten
17 L-Rotation +1 k1 k2 T1 T2 T3 A 7x
17 L-Rotation +2 k1 +1 k2 T1 T2 T3 x A 7x
17 L-Rotation +2 k1 +1 k2 T1 T2 T3 x A 7x
17 L-Rotation +2 k1 +1 k2 T1 T2 T3 x A 7x
17 L-Rotation k2 k1 T3 T1 T2 x A 7x
18 LR-Rotation x wird eingefügt und verletzt dadurch die Ausgeglichenheit an einem höher gelegenen Knoten k1. Notwendige Korrektur durch LR- Rotation (symmetrisch: RL-, RR- und LL- Rotation): Umhängen von vier Kanten
19 LR-Rotation -1 k1 k2 T4 k3 T1 T2 T3 A 14x
19 LR-Rotation -2 k1 +1 k2 +1 T4 k3 T1 T2 T3 x A 14x
19 LR-Rotation -2 k1 T1 k2 x +1 T3 k3 T2 T4 A 14x
19 LR-Rotation -2 k1 T1 k2 x +1 T3 T4 k3 T2 A 14x
19 LR-Rotation -2 k1 +1 k2 +1 T4 k3 T1 T2 T3 x A 14x
19 LR-Rotation -2 k1 T1 k2 x -1 T3 k3 T2 T4 A 14x
19 LR-Rotation -2 k1 T1 k2 x -1 T3 T4 k3 T2 A 14x
19 LR-Rotation -2 k1 -1 k3 -1 k2 T4 T3 T1 T2 x A 14x
19 LR-Rotation k3 -1 k1 k2 T2 T3 T1 T4 x A 14x