SOTE1­2016­10­24.notebook October 24, 2016 g n u ol h r AVL Bäume ­ Adelson, Veliskii, Landis e d e i W ­ := höhenbilanzierter binärer Suchbaum Rezept (Algorithmus) zum Einfügen von Elementen in binäre Suchbäume 1) Einfügen wie bisher 2) Sofort auf Höhenbilanziertheit prüfen 3) Falls die Balance B < ­1 oder > 1, dann sofort umstrukturieren > Linksrotation, falls B > 1 > Rechtsrotation, falls B < ­1 > Rechtslinksrotation, falls B > 1 und B(Nachfolgeknoten) ­1 > Linksrechtsrotation, falls B < ­1 und B(Nachfolgeknoten) +1 1 SOTE1­2016­10­24.notebook October 24, 2016 g n u l o h er d ie W Regel für Rechts­/Linksrotation: Falls ein Knoten nicht höhenbilanziert ist (hier M), wird er nach rechts/links geschoben. Ein möglicher rechter/linker Nachfolger (H) wird linker/rechter Nachfolger des rotierten Knotens F M A F A O C F H M M A O H C O H C 2 SOTE1­2016­10­24.notebook October 24, 2016 5, 8, 2, 6, 10, 9 h r de ng u l o ie W Rezept (Algorithmus) zum Einfügen von Elementen in binäre Suchbäume 1) Einfügen wie bisher 2) Sofort auf Höhenbilanziertheit prüfen 3) Falls die Balance B < ­1 oder > 1, dann sofort umstrukturieren > Linksrotation, falls B > 1 > Rechtsrotation, falls B < ­1 > Rechtslinksrotation, falls B > 1 und B(Nachfolgeknoten) ­1 > Linksrechtsrotation, falls B < ­1 und B(Nachfolgeknoten) +1 Regel für Rechts­/Linksrotation: Falls ein Knoten nicht höhenbilanziert ist (hier M), wird er nach rechts/links geschoben. Ein möglicher rechter/linker Nachfolger (H) wird linker/rechter Nachfolger des rotierten Knotens 5 0 2 5 81 2 6 8 8 10 -1 9 2 6 10 9 5 2 6 10 9 -1 3 SOTE1­2016­10­24.notebook October 24, 2016 > Rechtslinksrotation, falls B > 1 und B(Nachfolgeknoten) ­1 > Linksrechtsrotation, falls B < ­1 und B(Nachfolgeknoten) +1 -2 5 1 2 -1 7 4 4 7 7 2 2 4 1 5 5 3 3 1 1 3 1. Teilschritt: Linksrotation um Nachfolger 5 4 0 4 1 2 1,7,3,4,2,6,5 1 7 0 51 2 3 7 3 2. Teilschritt: Rechtsrotation um "Problemknoten" (5) 4 SOTE1­2016­10­24.notebook October 24, 2016 > Rechtslinksrotation, falls B > 1 und B(Nachfolgeknoten) ­1 > Linksrechtsrotation, falls B < ­1 und B(Nachfolgeknoten) +1 1,7,3,4,2,6,5 1 +1 1 +2 31 1 2 4 1 6 2 6 4 7 1 2 3 1 6 1 2 -1 4 1 7 1 -1 4 3 7 -2 1 1 7 3 3 7 3 7 -1 0 3 4 -1 7 5 5 SOTE1­2016­10­24.notebook October 24, 2016 Löschen in binären Suchbäumen (nicht speziell in AVL­Bäumen) 1. Fall: Zu löschender Knoten ist Blatt: einfach löschen 2. Fall: Zu löschender Knoten (z.B. 2) hat ein Kindelement: Kindelement (1) direkt mit Elternelement (3) verbinden. 3. Fall: Zu löschendes Knoten (z.B. 3) hat zwei Kindelemente: Element mit entweder dem größten Element des linken Teilbaums oder dem kleinsten Element des rechten Teilbaums ersetzen. 3 6 2 4 1 7 5 6 SOTE1­2016­10­24.notebook October 24, 2016 B­Bäume B steht nicht für binär, sondern für den "Erfinder" Rudolph Bayer Charakteristiken • mindestens k (Ausnahme Wurzel Elemente pro Knoten • maximal 2k Elemente pro Knoten • Jeder Knoten hat i+1 Nachfolger, wenn i die Anzahl der Elemente des Knotens ist • Alle Wege von der Wurzel zu den Blättern sind gleich lang • sind sortiert > Alle Elemente eines Knotes sind sortiert > Elemente des linken Teilbaums sind kleiner als die Elemente im Elternknoten 7 SOTE1­2016­10­24.notebook October 24, 2016 Zusammenspiel von Datenbanken und B­Bäumen Die Knoten/Blätter nennt man bei den Datenbanken oft "Pages" (Seiten). Dabei entsprechen die Seiten den Speichereinheiten auf dem Medium z.B. der Festplatte. Der Zugriff auf das Medium ist im Vergleich zum Zugriff auf den Hauptspeicher sehr langsam (Faktor >> 1000). Die Index­/Baustruktur wird im Hauptspeicher gehalten, so dass man die Seite sehr schnell findet (z.B. zum Suchen, Einfügen). Erst dann erfolgt der Aufwendige Zugriff auf den Inhalt der Seite. Beispiel: Soll geprüft werden, ob die "2" im Baum enthalten ist, so kann Dank des Index sehr schnell der Knoten identifiziert werden, in dem die "2" sein müsste. Erst dann erfolgt der langsame Zugriff auf Knoten (das Blatt) (hier das Blatt mit der "1"). 8 SOTE1­2016­10­24.notebook October 24, 2016 Regeln zum Einfügen in B­Bäume 1. Position für neues Element suchen und dort einfügen. 2. Prüfen, ob der Knoten danach zwischen k und 2k Elementen hat. 1. falls ja: subba. Fertig. 2. falls nein: Überlaufbehandlung. 3 3, 2, 5 2 3 5 2 5 Überlaufbehandlung Mittleres Element des Knotens (hier 3) wandert nach oben (rekursiv) erfolgen, und es erfolgt ein Split. Elemente links des verschobenen Elements (hier 3) verbleiben auf dem Blatt, Elemente rechts davon (hier ´5) wandern auf das neue Blatt Baum k = 1 Bitte einfügen: 1, 5, 2, 6, 7, 8, 3, 4 9 SOTE1­2016­10­24.notebook October 24, 2016 Baum k = 1 Bitte einfügen: 1, 5, 2, 6, 7, 8, 3, 4 2 2 1 6 5 2 6 5 1 7 7 5 3 1 8 4 4 4 2 1 3 6 2 6 5 7 8 1 3 5 7 8 10