Binärer Suchbaum IV AVL-Baum I

Slides:



Advertisements
Ähnliche Präsentationen
8. Termin Teil B: Wiederholung Begriffe Baum
Advertisements

Vorbereitung: struct knoten { int x; struct knoten *l, *r; } *b, *bh, **bp; b: Zeiger auf Wurzel bh: Hilfszeiger bp: Zeiger auf Zeiger auf knoten b bp.
Mindesthöhe: |_log2 n_|, maximale Höhe: n-1
Claudio Moraga; Gisbert Dittrich
7. Natürliche Binärbäume
Durchlaufen eines Binärbaumes
R. Der - Vorlesung Algorithmen und Datenstrukturen (Magister)
Balancierte Bäume Effizienz der Wörterbuchoperationen auf Bäumen hängt direkt von der Baumhöhe ab. Baum mit n Knoten: Mindesthöhe: |_log2 n_|, maximale.
Bäume • Kernidee: Speicherung von Daten in einer Baumstruktur
Sortieren mit Binären Bäumen
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (18 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (20 - Balancierte Bäume, AVL-Bäume) Prof. Th. Ottmann.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
Universität Dortmund, Lehrstuhl Informatik 1 EINI II Einführung in die Informatik für Naturwissenschaftler und Ingenieure.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 12 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 10 Claudio Moraga; Gisbert Dittrich FBI Unido
Diskrete Mathe II Übung IKG - Übung Diskrete Mathe II – Jörg Schmittwilken 2 Ü6 Wendet den Scan-Line Algorithmus auf unten stehende Situation.
Klausur „Diskrete Mathematik II“
IKG - Übung Diskrete Mathe I – Jörg Schmittwilken
Diskrete Mathematik I Vorlesung 6 Binärer Suchbaum II.
Diskrete Mathematik I Vorlesung 9b AVL-Baum, Algorithmen.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Listen-
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Bäume-
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
Planung einfache Dateibehandlung (externe Dateien, Öffnen, Lesen/Schreiben, Schließen). Diskussion des Problems, die Wörter in einem gegebenen Text.
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Kapitel 2: Datenstrukturen
Einfach verkettete Listen (OOP)
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Animationen zu Kap. 4.3: AVL-Bäume
Rekursion mit Listen: Quicksort
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Geoinformation II Vorlesung 2 SS 2001 AVL-Bäume.
Diskrete Mathematik II
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Vorlesung Binärer Suchbaum II-
Graphen und Bäume.
Einfach und doppelt verkettete Listen in JAVA by Jens Weibler
Kapitel 6: Suchbäume und weitere Sortierverfahren
SWE1 / Übung 10 ( ) Rekursion Binärbäume.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Diskrete Mathematik II
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Geoinformation II 6. Sem. Vorlesung April 2000 AVL-Bäume.
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik II Vorlesung Datenstrukturen für den Algorithmus von.
Diskrete Mathe II Übung IKG - Übung Diskrete Mathe II – Jörg Schmittwilken 2 Übung5 Prüft, ob sich folgende Segmente schneiden: –P1(1/7) P2(3/1)
Institut für Kartographie und Geoinformation Prof. Dr. Lutz Plümer Diskrete Mathematik I Vorlesung Binärer Suchbaum III- -AVL-Baum-
Binärer Baum, Binärer Suchbaum I
Institut für Kartographie und Geoinformation Diskrete Mathematik I Vorlesung Binärer Suchbaum I-
Diskrete Mathematik I Vorlesung 7 Binärer Suchbaum III.
Diskrete Mathe Diskrete Mathematik I Listen Vorlesung 4.
Binärbäume.
1 // Verkettete Liste 2 // demonstriert verkettete Listen und // Rekursion // (Einfügen am "Fuß") // #include struct Liste { int Element; Liste *weiter;
Klausur „Diskrete Mathematik II“
AVL-Bäume.
Vorlesung AVL-Bäume/Algorithmen-
Vorlesung AVL-Bäume/Algorithmen-
2. Die rekursive Datenstruktur Baum 2.1 Von der Liste zum Baum
Heapsort-Algorithmus
 Präsentation transkript:

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