DAP2 Präsenzübung 7
Transcription
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