Wiederholung • Suchen in linearen Feldern: Datenstrukturen und Algorithmen Ohne Vorsortierung: • Sequentielle Suche • Speicherung nach Zugriffswahrscheinlichkeit • Selbstanordnende Felder VO 708.031 Mit Vorsortierung: • Binärsuche • Interpolationssuche • Quadratische Binärsuche • FastSearch worst-case: T(n)=Θ(n) 15.12.2011 [email protected] 1 15.12.2011 Wiederholung Mittlerer Fall Schlechtester Fall O(log n) O(log n) Interpolationssuche O(log log n) O(n) Quadratische Binärsuche O(log log n) O( n ) „FastSearch“ O(log log n) O(log n) 15.12.2011 [email protected] 2 Wörterbuchproblem • Laufzeitverhalten der Suchverfahren für vorsortierte Felder Binärsuche [email protected] • Wir suchen eine Datenstruktur, die das Wörterbuchproblem effizient löst • Wörterbuchoperationen: – Einfügen – Suchen – Entfernen • Lineares Feld: Einfügen O(1) Zeit, Suchen und Entfernen O(n) Zeit • Auswege: Gestreute Speicherung (Hashtabellen), Suchbäume 3 24.11.2011 [email protected] 4 Bäume Bäume • Ordnung eines Knotens: Anzahl seiner Söhne • Ordnung eines Baumes: maximale Ordnung aller Knoten • Die Knoten eines Baumes sind entweder Blätter (Knoten ohne Söhne, Ordnung 0) oder innere Knoten (Ordnung >0) • Jeder Knoten ist Wurzel eines Teilbaumes • Höhe eines Baumes: Länge des längsten Pfades von der Wurzel bis zu einem Blatt • Voller Baum der Ordnung k: Jeder Knoten hat genau k Söhne oder ist ein Blatt • Ein vollständiger Baum ist ein voller Baum, bei dem jedes Blatt gleiche Tiefe hat • Definition: Ein Baum ist eine Menge, die durch eine sog. Nachfolgerrelation strukturiert ist. Elemente: Knoten • In einem Baum gilt: 1 – ∃ Knoten w ohne Vater(w) (w=Wurzel) 1 – ∀ Knoten k≠w ∃ Knotenfolge k0, k1, …, kt mit k0=k, kt=w und ki=Vater(ki-1) für i=1, 2, …, t. (Ast zwischen k und w, Länge t, t … Tiefe des Knotens k) 15.12.2011 [email protected] 5 15.12.2011 [email protected] Bäume Bäume • Anwendungen: – Hierarchische Strukturen: • Anwendungen in der Informatik: – – – – – – Inklusionsstrukturen: Rekursionsbäume Entscheidungsbäume Suchbäume Haldenbäume Codebäume u.v.a. / Beispiel (Syntaxbäume): Arithmetische Ausdrücke Blätter (= Knoten ohne Söhne) enthalten Zahlen, innere Knoten speichern Operatoren (+, -, *, /). * + 2 15.12.2011 [email protected] 6 7 15.12.2011 [email protected] + 3 4 3 5 8 Binärbäume Binärbäume • Jeder Knoten hat maximal zwei Nachfolger • Reihenfolge der Knoten: – Symmetrische Reihenfolge (SR, inorder): linker Teilbaum in SR, Wurzel, rechter Teilbaum in SR Aufruf: SR(w) w … Wurzel T(n) = Θ(n) Beispiel: / * Existiert ein Sohn- oder ein Vaterknoten nicht, wird nil zurückgeliefert + 2 15.12.2011 [email protected] 9 15.12.2011 Binärbäume + 3 4 3 Infix-Notation 5 [email protected] 10 Sortierte Binärbäume • Binäre Suchbäume sind in symmetrischer Reihenfolge sortiert • Reihenfolge der Knoten: – Hauptreihenfolge (HR, preorder): Wurzel, linker Teilbaum in HR, rechter Teilbaum in HR – Nebenreihenfolge (NR, postorder): linker Teilbaum in NR, rechter Teilbaum in NR, Wurzel Knoten im linken Teilbaum ≤ Wurzel ≤ Knoten im rechten Teilbaum / * + (HR) + 3 4 3 (NR) 2 15.12.2011 5 Postfix-Notation [email protected] 11 15.12.2011 [email protected] 12 Sortierte Binärbäume Sortierte Binärbäume • Suchen (binäre Suche): • Minimum und Maximum: b … gesuchter Wert k … Wurzel des Teilbaums k … Wurzel des Teilbaums Aufruf: SUCHE(b, w) Laufzeit: jeweils O(h) Suchzeit: O(h) h … Höhe des Baumes (= Länge des längsten Astes) 15.12.2011 [email protected] 13 15.12.2011 Sortierte Binärbäume 14 Sortierte Binärbäume • Vorgänger und Nachfolger: • Vorgänger und Nachfolger: Vorgänger von k: was ist der größte Wert kleiner als k? Nachfolger von k: was ist der kleinste Wert größer als k? Wenn ein linker Sohn existiert, suche das Maximum in diesem Teilbaum, … Wenn ein rechter Sohn existiert, suche das Minimum in diesem Teilbaum, … … sonst suche den niedrigsten Knoten, bei dem sich k unter dem rechten Sohn befindet … sonst suche den niedrigsten Knoten, bei dem sich k unter dem linken Sohn befindet Laufzeit: O(h) 15.12.2011 [email protected] Laufzeit: O(h) [email protected] 15 15.12.2011 [email protected] 16 Sortierte Binärbäume Sortierte Binärbäume • Einfügen: • Entfernen: Suchen ⇒ Knoten k a) k ist Blatt: abhängen Fügt den Wert w in den Binärbaum B ein Simuliere eine Suche nach w, bis zu einer freien Stelle (x=nil) Dort fügen wir das Element ein (als Sohn von y) b) k hat nur einen Sohn: Teilbaum von diesem Sohn an VATER(k) anhängen c) Baum B war leer Laufzeit: O(h) 15.12.2011 [email protected] k hat 2 Söhne: Finde den Nachfolger k‚ (k' hat keinen linken Sohn!) Setze WERT(k) = WERT(k' ) Entferne k'‚ Fall a) oder b) Laufzeit: O(h) 17 15.12.2011 [email protected] 18 Sortierte Binärbäume Sortierte Binärbäume • Aufbau eines sortierten Binärbaumes: • Zusammenfassung: – durch wiederholtes Einfügen (⇒ natürliche Bäume) – Binärbaum hängt von der Reihenfolge der Elemente ab T(n) = O(n*h) = Θ(n2), wenn h = Θ(n) Einige wenige Reihenfolgen liefern entartete Bäume (= Listen) – – – – – – – Minimum Maximum Vorgänger Nachfolger Einfügen Löschen Suchen Alle Operationen in O(h) Zeit h … Baumhöhe • Vorteil: dynamische Lösung des Wörterbuchproblems • Nachteil: Zeiten bis zu Θ(n) Fügt man randomisiert ein, ist E[h] klein 15.12.2011 [email protected] 19 15.12.2011 [email protected] 20 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 12. Jan. 2012, 11:15, i13) 15.12.2011 [email protected] 21