DAP2 Präsenzübung 7

SoSe 2015
C. Sohler
J. Flake, A. Krivo²ija
B. Rudak, V.Volz
DAP2 Präsenzübung 7
Besprechung: 27.05.2015 29.05.2015
: (AVL-Bäume)
Präsenzaufgabe 7.1
a) Gegeben sei ein leerer AVL-Baum T . Pegen Sie zunächst die folgenden Elemente in der
angegebenen Reihenfolge in die Datenstruktur ein.
35, 41, 70, −10, 1001, 1000, 80, 71
Lösung:
•
Zunächst haben wir den leeren Baum gegeben.
∅
•
Wir fügen 35 ein.
•
Wir fügen 41 ein.
35
35
41
• Wir fügen 70 ein und rotieren 35 nach links.
41
35 70
• Wir fügen -10 ein.
41
35 70
-10 · ·
• Wir fügen 1001 ein.
· ·
1
35
41
70
-10 · · · · 1001
• Wir fügen 1000 ein und rotieren 1001 rechts und anschlieÿend 70 links.
41
1000
35
-10 · · · · 70 · · 1001
• Wir fügen 80 ein.
41
1000
35
-10 · · · · 70 · · 1001
· · 80
• Als letztes fügen wir 71 ein, rotieren 80 rechts und 70 links.
41
1000
35
-10 · · · · 71 · · 1001
70 80
b) Löschen Sie die 1000 aus dem Baum und fügen Sie im Anschluÿ die 73 ein. Nun löschen
Sie noch die Elemente 1001, 41 und 73 in dieser Reihenfolge. Geben Sie den AVL-Baum
nach jeder Operation an und notieren Sie, welcher Knoten rotiert wird, um die AVLEigenschaft zu erhalten.
Lösung:
•
Wir löschen die 1000 wie folgt. Da der Knoten mit dem Schlüssel 1000 zwei Kinder
hat, suchen wir ausgehend von 1000 in dem linken Teilbaum den Knoten mit dem
maximalen Schlüssel und überschreiben mit dessen Informationen den Knoten mit
Schlüssel 1000. Anschlieÿend löschen wir den gefundenen maximalen Knoten.
2
-10
•
35
Wir fügen 73 ein.
-10
41
35
· · · ·
70
41
· · · ·
80
71
· ·
1001
· ·
80
71
· ·
1001
70 · · 73
• Wir löschen 1001. Danach rotieren wir 80 nach rechts.
41
71
35
-10 · · · · 70 · · 80
73 · ·
• Wir löschen die Wurzel mit dem Schlüssel 41. Hierfür suchen wir wieder im linken
Teilbaum das Maximum und ersetzen die Wurzel hierdurch. Anschlieÿend rotieren
wir 35 nach links.
71
80
35
-10 · · 70 · · · · 73 · · · ·
• Als letztes löschen wir 73.
71
80
35
-10 · · 70 · · · ·
c) Beschreiben Sie die Konstruktion eines AVL-Baumes, in dem eine einzige Löschoperation
eine Folge von Θ(log n) Rotationen nach sich ziehen kann.
3
Lösung:
Wir denieren induktiv die Fibonacci-Bäume T , n ∈ N der Ordnung n. Es kommt hier
nur auf deren Gestalt an.
• Der Fibonacci-Baum T der Ordnung 0 ist der leere Baum.
• Der Fibonacci-Baum T der Ordnung 1 ist ein Binärbaum mit genau 1 Knoten.
• Der Fibonacci-Baum T der Ordnung n ist ein Binärbaum, dessen Wurzel T
als
linken Unterbaum und T als rechten Unterbaum hat.
Wir geben einige Beispiele von Fibonacci-Bäumen an. Als Schlüsseleinträge verwenden
wir die Nummerierungen, die sich bei einem Inorder-Durchlauf ergeben.
• T:
2
1 3
0 · · ·
n
0
1
n
n−1
n−2
3
· ·
• T4
:
0
2
1
4
3 5
6
·
· · · · ·
· ·
• T5
:
0
1
2
4
3 5
7
6
· · · · ·
· ·
4
·
10
8
9 11
· ·
· · ·
• T6
:
0
1
2
4
3 5
12
7
19
9 11 14 16 18 ·
8 · · · 13 · · · · ·
15
10
6
· · · · ·
17
·
· ·
· ·
· ·
Wir betrachten den Eekt, wenn wir den gröÿten Schlüssel löschen.
7
12
4
15
10
6
2
1 3 5 · 9 11 14 17
0 · · · · · 8 · · · 13 · 16 18
· ·
· ·
· ·
· · · ·
Man überlegt sich leicht, dass das Löschen des gröÿten Schlüssels im Fibonaccibaum der
Ordnung n eine Folge von Rechtsrotationen nach sich zieht, die alle Knoten auf dem Pfad
zur Wurzel betreen. Da dieser Pfad eine Länge von O(log n) besitzt, bedeutet dies somit
Θ(log n) viele Rotationen.
5