Vorlesung 10 16.12.99 -AVL-Bäume/Algorithmen- Diskrete Mathematik I Vorlesung 10 16.12.99 -AVL-Bäume/Algorithmen-
Übersicht Vollständige Bäume Minimale Knotenanzahl von AVL-Bäumen Fibonacci-Zahlen Maximale Höhe von AVL-Bäumen Das Wichtigste zu AVL in Kürze 4 Fälle im Überblick „Überleitung“ Güte von Algorithmen Groß-Oh-Notation Inklusion Komplexität - Beispiele
Vollständige Bäume Ein binärer Baum heißt vollständig, wenn alle Blätter die gleiche Höhe haben. Ein vollständiger binärer Baum gegebener Höhe enthält die maximale Anzahl von Knoten. Wie groß ist die maximale Anzahl der Knoten eines vollständigen Baumes gegebener Höhe?
S = 2h-1 Vollständige Bäume 1 1 2 1 2 3 3 4 h 2h-1-1 2h-1 Anzahl innere Knoten Blätter Baum Höhe 1 1 2 1 2 3 3 4 ... h 2h-1-1 2h-1 S = 2h-1
Vollständige Bäume S: 2h + 2h - 1 = 2h+1-1 Satz: Ein vollständiger binärer Baum der Höhe h enthält 2h-1 Blätter und 2h-1 Knoten. Beweis: 1) Induktionsanfang: h= 1 Der Baum besteht nur aus der Wurzel, die auch das einzige Blatt ist: 21-1 = 20 = 1 Blatt 21-1 = 2 - 1 = 1 Knoten 2) Induktionsschritt: h h + 1 Höhe h Höhe h + 1 2h-1 Blätter 2h Blätter 2h-1 Knoten 2h-1 innere Knoten S: 2h + 2h - 1 = 2h+1-1
Minimale Knotenanzahl von AVL-Bäumen N(h) sei die minimale Anzahl von Knoten eines AVL- Baumes der Höhe h. h = 1 N(1) = 1 h = 2 N(2) = 2 h = 3 N(3) = 4
Minimale Knotenanzahl von AVL-Bäumen Allgemeiner Fall: 1 N(h-2) N(h-1) worst case der Höhe h: N(h) = N(h-1) + N(h-2) + 1
Fibonacci-Zahlen fib(0) = 0 fib(1) = 1 fib(2) = 1 ... fib(n) = fib(n-1) + fib(n-2) Abschätzung von fib: Sei
Minimale Knotenanzahl von AVL-Bäumen Satz: N(h) = fib(h+2) - 1 Beweis: 1) Induktionsanfang: h = 1 fib(1+2) - 1 = fib(3) - 1 = 2 - 1 = 1 2) Induktionsschritt: h h + 1 N(h+1) = 1 + N(h) + N(h-1) = 1+ fib(h+2) - 1 + fib(h+1) - 1 = fib(h+3) - 1 = fib([h+1]+2) - 1 1 N(h-1) N(h)
Maximale Höhe von AVL-Bäumen Daraus folgt nach Umformung der Abschätzung: Ein AVL-Baum mit n Knoten hat höchstens die Höhe 1,44... log(n) + const
Das Wichtigste zu AVL in Kürze 1. Die { L, R, RL, LR } - Rotationen finden Anwendung, wenn bei der Rückkehr von den eingefügten/gelöschten Knoten zur Wurzel des Baumes ein Balance-Faktor {-2, +2 } gefunden wird. 2. Die Wiederherstellung der AVL-Eigenschaft involviert höchstens 3 Knoten + Verweise auf die Nachfolger. Prinzip der Lokalität (Das Problem kann auch nur auf dem Weg von einem Blatt zur Wurzel des Baumes auftreten.) 3. Es finden nur vertikale Verschiebungen der involvierten Knoten statt.
Das Wichtigste zu AVL in Kürze Die Form eines Baumes hängt von der Eingabefolge ab: Eingabe von {1, 2, 3} Eingabefolge: 2, 1, 3 2 1 3 2 1 3 Eingabefolge: 2, 3, 1
Das Wichtigste zu AVL in Kürze Eingabefolge: 1, 2, 3 1 2 1 2 3 2 1 3 L-Rotation
Das Wichtigste zu AVL in Kürze Eingabefolge: 3, 2, 1 -2 1 2 3 R-Rotation 2 1 3
Das Wichtigste zu AVL in Kürze Eingabefolge: 3, 1, 2 R 2 2 1 2 3 1 2 3 L 2 1 3 L-R-Rotation
Das Wichtigste zu AVL in Kürze Eingabefolge: 1, 3, 2 2 L 2 3 2 1 3 2 1 R 2 1 3 R-L-Rotation
4 Fälle im Überblick R LR RL L Woher rührt die Verletzung der Balance am Knoten ? R LR RL L
Güte von Algorithmen Gesichtspunkte Nachvollziehbarkeit Implementierungsaufwand Portierbarkeit Platzbedarf Zeitbedarf, abhängig von Größe der Eingabe Maschine (CPU, ...) Algorithmus Benchmarks asymptotische Komplexität
Asymptotische Komplexität Groß-Oh-Notation Definition: wobei
Groß-Oh-Notation Beispiele:
Inklusion O(1) O(log n) O(n) O(n log n) O(n2) O(n3) ... O(exp n)
Wie schnell wächst ... ? n log n n log n
„Nichts wächst so schnell ...“ exp n n² n log n ... wie exponentiell!“
Komplexität - Beispiele Wie schwierig ist Addition/Multiplikation bei Zahlen gegebenen Formats, z.B. double: a+b, a*b O(1) Vergleich: a < b O(1) Zuweisung : a = b O(1) Sprungbefehle: while(a > b) O(1) Zugriff auf array a[ i ]: O(1) i-te Element einer Liste (Länge n): O(n) Einfügen am Anfang einer Liste: O(1) Einfügen am Anfang eines Arrays: O(n)
Komplexität (Beispiele - worst case) Suchen in einem Array (nicht sortiert): O(n) in einer Liste: O(n) in einem binären Suchbaum: O(n) in einem AVL-Baum: O(log n) Sortieren mit Quicksort: O(n²) mit AVL-Bäumen: O(n * log n) Suchen eines Punktes in einer geeigneten Struktur: O(log n) Aufbau einer geeigneten Struktur von Punkten: O(n * log n)