310 likes | 473 Views
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume). Prof. Th. Ottmann. Binäre Suchbäume. Binärbäume zur Speicherung von Mengen von Schlüsseln (in den inneren Knoten der Bäume), so dass die Operationen Suchen (find)
E N D
Vorlesung Informatik 2Algorithmen und Datenstrukturen(17 - Bäume: Durchlaufreihenfolgen, Analyse nat. Bäume) Prof. Th. Ottmann
Binäre Suchbäume • Binärbäume zur Speicherung von Mengen von Schlüsseln (in den inneren Knoten der Bäume), so dass die Operationen • Suchen (find) • Einfügen (insert) • Entfernen (remove, delete) • unterstützt werden. • Suchbaumeigenschaft: Die Schlüssel im linken Teilbaum eines Knotens p sind alle kleiner als der Schlüssel von p, und dieserist wiederumkleiner als sämtliche Schlüssel im rechten Teilbaum von p. • Implementierung:
Natürliche Bäume Einfügen 5 9 9 3 12 3 12 4 4 5 • Baum-Struktur hängt von Einfügereihenfolge in anfangs leeren Baum ab • Höhe kann linear zunehmen, sie kann aber auch in O(log n) sein, genau
Durchlaufreihenfolgen in Bäumen Durchlaufreihenfolgen zum Besuchen der Knoten des Baums • zur Ausgabe • zur Berechnung von Summe, Durchschnitt, Anzahl der Schlüssel . . . • zur Änderung der Struktur Wichtigste Durchlaufreihenfolgen: • Hauptreihenfolge = Preorder = WLRbesuche erst Wurzel, dann rekursiv linken und rechten Teil-Baum falls vorhanden • Nebenreihenfolge = Postorder = LRW • Symmetrische Reihenfolge = Inorder = LWR • die Spiegelbild-Varianten von 1-3
17 11 22 14 7 12 Hauptreihenfolge (Preorder) Ausgehend von der Wurzel p eines Baums ist die Hauptreihenfolge wiefolgt rekursiv definiert: Durchlaufen aller Knoten eines Binärbaumes mit Wurzel p in Hauptreihenfolge: Besuche p, durchlaufe den linken Teilbaum von p in Hauptreihenfolge, durchlaufe den rechten Teilbaum von p in Hauptreihenfolge.
Hauptreihenfolge Programm // Hauptreihenfolge; WLRvoid preOrder (){ preOrder (root); System.out.println ();}void preOrder (SearchNode n){ if (n == null) return; System.out.print (n.content+" "); preOrder (n.left); preOrder (n.right);}// Nebenreihenfolge; LRWvoid postOrder (){ postOrder (root); System.out.println ();}// ...
Symmetrische Reihenfolge (Inorder) Die Durchlaufreihenfolge ist: erst linker Teilbaum, dann Wurzel, dann rechterTeilbaum: // Symmetrische; LWRvoid inOrder (){ inOrder (root); System.out.println ();}void inOrder (SearchNode n){ if (n == null) return; inOrder (n.left); System.out.print (n.content+" "); inOrder (n.right);}// Nebenreihenfolge; LRW// ... Die anderen Durchlaufreihenfolgen werden analog implementiert.
17 11 22 14 7 12 Beispiel Preorder:17, 11, 7, 14, 12, 22 Postorder:7, 12, 14, 11, 22, 17 Inorder:7, 11, 12, 14, 17, 22
17 22 11 7 14 12 Nichtrekursive Varianten mit gefädelten Bäumen Wurzel Rekursion kann vermiedenwerden, wenn man anstelle dernull-Referenzensogenannte Fädelungszeiger auf die Vorgängerbzw. Nachfolgerverwendet.
Binäre Suchbäume • Binärbäume zur Speicherung von Mengen von Schlüsseln (in den inneren Knoten der Bäume), so dass die Operationen • Suchen (find) • Einfügen (insert) • Entfernen (remove, delete) • unterstützt werden. • Suchbaumeigenschaft: Die Schlüssel im linken Teilbaum eines Knotens p sind alle kleiner als der Schlüssel von p, und dieserist wiederumkleiner als sämtliche Schlüssel im rechten Teilbaum von p. • Implementierung:
Natürliche Bäume Einfügen 5 9 9 3 12 3 12 4 4 5 • Baum-Struktur hängt von Einfügereihenfolge in anfangs leeren Baum ab • Höhe kann linear zunehmen, sie kann aber auch in O(log n) sein, genau
17 11 22 14 7 12 Beispiel für Suchen, Einfügen, Entfernen
Sortieren mit natürlichen Suchbäumen Idee:Bau für die Eingabefolge einen natürlichen Suchbaum auf und gib dieSchlüssel in symmetrischer Reihenfolge (Inorder) aus. Bemerkung:Abhängig von der Eingabereihenfolge kann der Suchbaumdegenerieren. Komplexität:Abhängig von der internen Pfadlänge Schlechtester Fall:Sortierte Eingabe: Schritte. Bester Fall:Es entsteht ein vollständigerSuchbaum mit minimalmöglicher Höhe von etwa log n. n mal Einfügen und Ausgeben ist daher in Zeit O(n log n) möglich. Mittlerer Fall:? Þ W 2 ( n )
Analyse natürlicher Suchbäume Zwei alternative Vorgehensweisen zur Bestimmung der internen Pfadlänge: 1. Random-Tree-Analyse, d.h. Mittelwert über alle möglichen Permutationen der (in den anfangs leeren Baum) einzufügenden Schlüssel. 2. Gestaltanalyse, d.h. Mittelwert über alle strukturell möglichen Bäume mit n Schlüsseln. Unterschied: 1. 2. » - + O 1 . 386 n log n 0 . 846 n (log n ) 2 » p + O n * n ( n )
3 3 3 1 2 2 2 1 3 1 3 1 1 2 2 Ursache für den Unterschied Bei der Random-Tree-Analyse werden ausgeglichene Bäume häufigergezählt. 3,2,1 3,1,2 1,3,2 3,2,1 2,1,3 und 2,3,1
Interne Pfadlänge Interne Pfadlänge: Maß zu Beurteilung der Güte eines Suchbaumes. Rekursive Definition: 1. Ist t der leere Baum, so istI(t) = 0. 2. Für einen Baum mit Wurzel t, linkem Teilbaum tl und rechtem Teilbaum tr gilt:I(t) := I(tl) + I(tr)+ Zahl der Knoten von t. Offensichtlich gilt: ( ) å + = Tiefe ( p ) 1 I ( t ) p P innerer Knoten von t
Durchschnittliche Suchpfadlänge • Für einen Baum t ist die durchschnittliche Suchpfadlänge definiert durch: • D(t) = I(t)/n, n = Anzahl innerer Knoten in t • Frage: Wie groß ist D(t) im • besten • schlechtesten • mittleren Fall • für einen Baum t mit n inneren Knoten?
Interne Pfadlänge: Bester Fall Es ensteht ein vollständiger Binärbaum
Zufällige Bäume • Seien oBdA die Schlüssel {1,…,n} einzufügen. • Sei ferner s1,…, sn eine zufällige Permutation dieser Schlüssel. • Somit ist die Wahrscheinlichkeit P(s1 = k), dass s1 gerade denWert k hat, genau 1/n. • Wenn k der erste Schlüssel ist, wird kzur Wurzel. • Dann enthalten der linke Teilbaum k – 1 Elemente (nämlich die Schlüssel 1,…,k - 1) und der rechte Teilbaum n – k Elemente (d.h. dieSchlüssel k + 1,…,n).
Erwartete interne Pfadlänge EI(n) :Erwartungswert für die interne Pfadlänge eines zufälligerzeugten binären Suchbaums mit n Knoten Offensichtlich gilt: Behauptung: EI(n) 1.386n log2n - 0.846n + O(logn). = EI ( 0 ) 0 = EI ( 1 ) 1 n 1 å = - + - + EI ( n ) ( EI ( k 1 ) EI ( n k ) n ) n = k 1 n n 1 å å = + - + - n ( EI ( k 1 ) EI ( n k )) n = = k k 1 1
Beweis (1) n 2 å + = + + und daher Aus den beiden letzten Gleichungen folgt EI ( n 1 ) ( n 1 ) * EI ( k ) + n 1 = k 0 n å + + = + + 2 ( n 1 ) * EI ( n 1 ) ( n 1 ) 2 * EI ( k ) = k 0 - n 1 å = + 2 n * EI n 2 * EI ( k ) = k 0 + + - = + + ( n 1 ) EI ( n 1 ) n * EI ( n ) 2 n 1 2 * EI ( n ) + + = + + + ( n 1 ) EI ( n 1 ) ( n 2 ) EI ( n ) 2 n 1 + + 2 n 1 n 2 + = + EI ( n 1 ) EI ( n ). + + n 1 n 1
Beweis (2) Durch vollständige Induktion über n kann man zeigen, dass für alle n 1 gilt: ist die n -te harmonische Zahl, die wie folgt Abgeschätzt werden kann: Dabei ist die so genannte Eulersche Konstante. = + - EI ( n ) 2 ( n 1 ) H 3 n n 1 1 = + + + H 1 ... n 2 n 1 1 = + g + + O H ln n ( ) n 2 2 n n g = 0 . 5772 ...
Beweis (3) Damit ist Und daher 1 = - - g + + + g + O EI ( n ) 2 n ln n ( 3 2 ) * n 2 ln n 1 2 ( ) n EI ( n ) 2 ln n = - - g + + 2 ln n ( 3 2 ) ... n n 2 2 ln n = - - g + + * log n ( 3 2 ) ... 2 log e n 2 2 log 2 2 ln n = - - g + + 10 * log n ( 3 2 ) ... 2 log e n 10 2 ln n » - - g + + 1 . 386 log n ( 3 2 ) ... 2 n
Beobachtungen • Suchen, Einfügen und Entfernen eines Schlüssels ist bei einemzufällig erzeugten binären Suchbaum mit n Schlüsseln im Mittel inO(log2n) Schritten möglich. • Im schlechtesten Fall kann der Aufwand jedoch Ω(n) betragen. • Man kann nachweisen, dass der mittlere Abstand eines Knotens vonder Wurzel in einem zufällig erzeugten Baum nur etwa 40% überdem Optimum liegt. • Die Einschränkung auf den symmetrischen Nachfolgerverschlechtert jedoch das Verhalten. • Führt man in einem zufällig erzeugten Suchbaum mit n Schlüsseln n2Update-Operationen durch, so ist der Erwartungswert für diedurschnittliche Suchpfadlänge lediglich Q ( n ).
Strukturelle Analyse von Binärbäumen Frage: Wie groß ist die durchschnittliche Suchpfadlänge eines Binärbaumes mit N inneren Knoten, wenn man bei der Durchschnittsbildung jeden strukturell möglichen Binärbaum mit N inneren Knoten genau einmal zählt? Antwort: Sei IN = gesamte interne Pfadlänge aller strukturell verschiedenen Binärbäume mit N inneren Knoten BN = Anzahl aller strukturell verschiedenen Bäume mit N inneren Knoten Dann ist IN/BN =
Gesamte interne Pfadlänge aller Bäume mit N Knoten • Für jeden Baum t mit linkem Teilbaum tl und rechtem Teilbaum tr gilt:
Zusammenfassung Die durchschnittliche Suchpfadlänge in einem Baum mit N inneren Knoten (gemittelt über alle strukturell möglichen Bäume mit N inneren Knoten) ist: 1/N IN/BN