Datenstrukturen und Algorithmen VO 708.031 13.12.2012 [email protected] 1 Wiederholung • Suchen in linearen Feldern: Ohne Vorsor*erung: • SequenDelle Suche • Speicherung nach Zugriffswahrscheinlichkeit • Selbstanordnende Felder Mit Vorsor*erung: • Binärsuche • InterpolaDonssuche • QuadraDsche Binärsuche • FastSearch worst‐case: T(n)=Θ(n) 13.12.2012 [email protected] 2 SequenDelle Suche • Durchsuche das Feld von Anfang bis Ende T(n) = Θ(n) im schlechtesten Fall, bzw. im mi;leren Fall, wenn jedes Element gleich oY gesucht wird 13.12.2012 [email protected] 3 SequenDelle Suche • Verbesserung der erwarteten Laufzeit: – Speichere die Elemente A[i] nach ihrer Zugriffswahrscheinlichkeit pi: p1 ≥ p2 ≥ p3 … • Gleichverteilung: pi = 1 ! T (n) = O(n) n • ExponenDelle Verteilung: pi = 1 ⇒ T (n) = O(1) i 2 – Zugriffswahrscheinlichkeiten pi müssen bekannt sein 13.12.2012 [email protected] 4 Selbstanordnende Felder • Wenn pi unbekannt: verschiebe Elemente, die häufiger gesucht werden, nach vorne • Bsp. 2er Heuris*ken: Wird auf A[i] zugegriffen, – vertausche A[i] mit A[1]: – vertausche A[i] mit A[i‐1]: Im Mieel sind beide Methoden zumindest halb so gut wie die Anordnung nach fallender Zugriffswahrscheinlichkeit bei bekannten pi 13.12.2012 [email protected] 5 2. Suchen mit VorsorDerung • Suchen in vorsor*erten Feldern: Input: Feld A[1..n] mit A[1] ≤ A[2] ≤ … ≤ A[n] Output: Index t für das gesuchte Element x (A[1] ≤ x ≤ A[n]) Falls x ∉ A, wird als Ergebnis ‐1 ausgegeben • Suchverfahren: – Binärsuche (Binary BisecDon Search) – InterpolaDonssuche – QuadraDsche Binärsuche – FastSearch 13.12.2012 [email protected] 6 Binärsuche (Binary Bisec*on Search) Teile das Feld in zwei gleich große HälYen und vergleiche mit dem mieleren Element; falls ident → gefunden, sonst suche entweder in der linken (kleiner) oder rechten HälYe (größer) weiter rekursive Version Aufruf: BINSUCH(1,n,x) T(n) = T(n/2) + O(1) ⇒ T(n) = O(log n) 13.12.2012 [email protected] 7 InterpolaDonssuche Suche nicht in der Miee, sondern dort, wo das Element „sein sollte“, unter der Annahme, dass die Werte linear steigen A[bis] x A[von] von 13.12.2012 t [email protected] bis 8 InterpolaDonssuche Suche nicht in der Miee, sondern dort, wo das Element „sein sollte“, unter der Annahme, dass die Werte linear steigen rekursive Version Aufruf: INTSUCH(1,n,x) Erwartete Laufzeit: T(n) = O(log log n) Worst‐case: T(n) = O(n) 13.12.2012 [email protected] 9 QuadraDsche Binärsuche Idee: Verhindere den worst‐case der InterpolaDonssuche durch Anwendung der InterpolaDonssuche auf Teilfelder der Länge n n • Berechne Index t durch InterpolaDonssuche: • Suche von t aus das korrekte Teilfeld (in Sprüngen von ) und suche von n dort aus weiter: IdenDfizieren des korrekten Teilfeldes in O(1) erwarteter Zeit 13.12.2012 [email protected] 10 QuadraDsche Binärsuche Idee: Verhindere den worst‐case der InterpolaDonssuche durch Anwendung der InterpolaDonssuche auf Teilfelder der Länge n n rekursive Version Aufruf: QUADSUCH(1,n,x) Erwartete Laufzeit: (Teilfeld in O(1) Zeit) T(n) = O(log log n) Worst‐case: (alle Teilfelder probiert) T(n) = O( ) n 13.12.2012 [email protected] 11 FastSearch KombinaDon von Binärsuche und InterpolaDonssuche mit O(log log n) im mi;leren Fall und O(log n) im schlechtesten Fall (zumindest immer so gut wie das bessere der beiden Verfahren) A von mB Binärsuche 13.12.2012 B C mI bis Interpolationssuche [email protected] 12 FastSearch KombinaDon von Binärsuche und InterpolaDonssuche mit O(log log n) im mi;leren Fall und O(log n) im schlechtesten Fall (zumindest immer so gut wie das bessere der beiden Verfahren) rekursive Version; Aufruf: FASTSEARCH(1,n,x) 13.12.2012 [email protected] 13 Laufzeitverhalten der Suchverfahren Mi#lerer Fall Schlechtester Fall O(log n) O(log n) InterpolaDonssuche O(log log n) O(n) QuadraDsche Binärsuche O(log log n) O( ) n „FastSearch“ O(log log n) O(log n) Binärsuche Speicherbedarf: • Rekursive Algorithmen: proporDonal zur Laufzeit (RekursionsDefe) • Itera8ve Algorithmen: O(1) 13.12.2012 [email protected] 14 Laufzeitverhalten der Suchverfahren Beispiel: Anzahl der Vergleiche für 109 Elemente Mi#lerer Fall Schlechtester Fall Binärsuche 30 30 InterpolaDonssuche 5 1.000.000.000 QuadraDsche Binärsuche 5 32.000 „FastSearch“ 10 60 13.12.2012 [email protected] 15 Bäume • Defini*on: Ein Baum ist eine Menge, die durch eine sog. Nachfolgerrela*on strukturiert ist. Elemente: Knoten • In einem Baum gilt: 1 – ∃ Knoten w ohne Vater(w) (w=Wurzel) 1 – ∀ Knoten k≠w Knotenfolge k ∃ 0, 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) 13.12.2012 [email protected] 16 Bäume • Ordnung eines Knotens: Anzahl seiner Söhne • Ordnung eines Baumes: maximale Ordnung aller Knoten • Die Knoten eines Baumes sind entweder Blä;er (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 Blae • Voller Baum der Ordnung k: Jeder Knoten hat genau k Söhne oder ist ein Blae • Ein vollständiger Baum ist ein voller Baum, bei dem jedes Blae gleiche Tiefe hat 13.12.2012 [email protected] 17 Bäume • Anwendungen: – Hierarchische Strukturen: – Inklusionsstrukturen: 13.12.2012 [email protected] 18 Bäume • Anwendungen in der Informa*k: – – – – – Rekursionsbäume Entscheidungsbäume Suchbäume Haldenbäume Codebäume u.v.a. / Beispiel (Syntaxbäume): ArithmeDsche Ausdrücke Blä#er (= Knoten ohne Söhne) enthalten Zahlen, innere Knoten speichern Operatoren (+, ‐, *, /). 13.12.2012 * + 2 [email protected] + 3 4 3 5 19 Binärbäume • Jeder Knoten hat maximal zwei Nachfolger ExisDert ein Sohn‐ oder ein Vaterknoten nicht, wird nil zurückgeliefert 13.12.2012 [email protected] 20 Binärbäume • Auslesereihenfolge der Knoten: – Symmetrische Reihenfolge (SR, inorder): linker Teilbaum in SR, Wurzel, rechter Teilbaum in SR Aufruf: SR(w) w … Wurzel T(n) = Θ(n) Beispiel: / * + 2 13.12.2012 + 3 4 3 Infix‐Nota8on 5 [email protected] 21 Binärbäume • 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 / * + (HR) + 3 4 3 (NR) 2 13.12.2012 5 PosDix‐Nota8on [email protected] 22 SorDerte Binärbäume • Binäre Suchbäume sind in symmetrischer Reihenfolge sorDert Knoten im linken Teilbaum ≤ Wurzel ≤ Knoten im rechten Teilbaum 13.12.2012 [email protected] 23 SorDerte Binärbäume • Suchen (binäre Suche): b … gesuchter Wert k … Wurzel des Teilbaums Aufruf: SUCHE(b, w) Suchzeit: O(h) h … Höhe des Baumes (= Länge des längsten Astes) 13.12.2012 [email protected] 24 SorDerte Binärbäume • Minimum und Maximum: k … Wurzel des Teilbaums Laufzeit: jeweils O(h) 13.12.2012 [email protected] 25 SorDerte Binärbäume • Einfügen: 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) Baum B war leer Laufzeit: O(h) 13.12.2012 [email protected] 26 SorDerte Binärbäume • Au\au eines sorDerten Binärbaumes: – 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) Fügt man randomisiert ein, ist E[h] klein 13.12.2012 [email protected] 27 SorDerte Binärbäume • En]ernen: Suchen ⇒ Knoten k a) k ist Blae: abhängen b) k hat nur einen Sohn: Teilbaum von diesem Sohn an VATER(k) anhängen c) k hat 2 Söhne: Finde den Nachfolger k‚ (k' hat keinen linken Sohn!) Setze WERT(k) = WERT(k' ) En•erne k'‚ Fall a) oder b) Laufzeit: O(h) 13.12.2012 [email protected] 28 SorDerte Binärbäume • Vorgänger und Nachfolger: Nachfolger von k: was ist der kleinste Wert größer als k? Wenn ein rechter Sohn exisDert, suche das Minimum in diesem Teilbaum, … … sonst suche den niedrigsten Knoten, bei dem sich k unter dem linken Sohn befindet Laufzeit: O(h) 13.12.2012 [email protected] 29 SorDerte Binärbäume • Vorgänger und Nachfolger: Vorgänger von k: was ist der größte Wert kleiner als k? Wenn ein linker Sohn exisDert, suche das Maximum in diesem Teilbaum, … … sonst suche den niedrigsten Knoten, bei dem sich k unter dem rechten Sohn befindet Laufzeit: O(h) 13.12.2012 [email protected] 30 SorDerte Binärbäume • Zusammenfassung: – – – – – – – Minimum Maximum Vorgänger Nachfolger Einfügen Löschen Suchen Alle OperaDonen in O(h) Zeit h … Baumhöhe • Vorteil: dynamische Lösung des Wörterbuchproblems • Nachteil: Zeiten bis zu Θ(n) 13.12.2012 [email protected] 31 Danke für Ihre Aufmerksamkeit! Bis zum nächsten Mal. (Donnerstag, 10. Jan. 2013, 11:15, i13) 13.12.2012 [email protected] 32