AVL Bäume - johner.org

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