Kapitel 4: Ausgewählte Datenstrukturen Gliederung 1. 2. 3. 4. 5. 6. 7. 8. 9. 4/3, Folie 1 Grundlagen Zahlentheoretische Algorithmen Sortierverfahren Ausgewählte Datenstrukturen Dynamisches Programmieren Graphalgorithmen String-Matching Kombinatorische Algorithmen Lineare Programmierung © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Einordnung Zielstellung • in diesem Abschnitt werden wir uns mit so genannten „randomisierten“ Datenstrukturen beschäftigen ... um die zugrunde liegenden Ideen, Ziele und Ansätze vernünftig zu erläutern müssen wir aber ein wenig „ausholen“ 4/3, Folie 2 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Einführendes Beispiel Beispiel zulässige Eingaben: Binärdarstellung einer Zahl x, d.h. bin(x) = x[n]...x[1] zulässige Ausgabe: Binärdarstellung der Zahl x+1 • • Algorithmus A: Falls bin(x) = 1...1, gib 10...0 aus. Sonst suche das kleinste i mit x[i] = 0 und gib x[n]...x[i+1]10..0 aus. Elementar-Operationen sind die üblichen Bitoperationen 4/3, Folie 3 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Einführendes Beispiel Beispiel (cont.) • es sei x eine Zahl mit 0 ≤ x ≤ 2n-1, für ein n ∈ N • offenbar unterscheidet sich die Laufzeit des Algorithmus A für die einzelnen Eingaben x deutlich • • • • time(A,0) = 1 time(A,1) = 2 ... time(A, 2n-1) = n + 1 eine „besseres“ Verständnis für die Laufzeit dieses Algorithmus bekommt man, wenn man die „durchschnittliche“ Laufzeit analysiert 4/3, Folie 4 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Einführendes Beispiel Beispiel (cont.) • es sei x eine Zahl mit 0 ≤ x ≤ 2n-1, für ein n ∈ N • für die durchschnittliche Laufzeit gilt: 1/2n 2n-1 * ∑ time(A,x) = 1/2n n * [ ∑ (2n-i * i) + (n + 1) ] x=0 i=1 = 1/2n * [ (2n+1 - 1 - n - 1) + (n + 1) ] = 2 - 1/2n ≤ 2 4/3, Folie 5 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Wichtige Begriffsbildung Durchschnittliche Laufzeit • es sei A ein Algorithmus und Xn die Menge aller Eingaben der Länge n • dann definieren wir: Laufzeit im „durchschnittlichen“ Fall: av-time(A,n) = 1/|Xn| * ∑ time(A,x) x∈Xn ... diese Kennzahl ist nur dann „aussagekräftig“, wenn die Eingaben der Länge n alle gleichwahrscheinlich sind 4/3, Folie 6 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Verallgemeinerte Begriffsbildung Erwartete Laufzeit • es sei A ein Algorithmus und Xn die Menge aller Eingaben der Länge n • • es sei Wahr: Xn → [0,1] eine Wahrscheinlichkeitsverteilung über Xn es sei Zn : Xn → R+ eine Zufallsvariable, wobei Zn(x) = time(A,x) für alle x ∈ Xn gelte die „erwartete“ Laufzeit: ex-time(A,n) = E[Zn] = ∑ z * Wahr(Zn = z) z∈R+ = ∑ time(A,x) * Wahr(x) x∈Xn 4/3, Folie 7 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Diskussion Vorteile / Nachteile (/* Begriff „erwartete“ Laufzeit */) • diese Kennzahl ist im allgemeinen „aussagekräftiger“ als die bisher betrachtete Kennzahl Laufzeit im „worst case“ • nachteilig ist, daß man die zugrunde liegende Wahrscheinlichlichkeitsverteilung über den Eingabedaten nur selten kennt (/* es ist schon gut, wenn man sinnvolle Annahmen über die Verteilung der Eingabedaten machen kann */) ... gut „wäre“ es, wenn man Algorithmen entwickelt, die eine „erwartete“ Laufzeit haben, die „unabhängig“ von der zugrunde liegenden Wahrscheinlichkeitsverteilung ist ... u.a. aus diesem Grund versucht man, „randomisierte“ Algorithmen / Datenstrukturen zu entwickeln (/* es gibt auch andere Gründe */) 4/3, Folie 8 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Fahrplan ... für den Rest dieses Kapitels • • wir betrachten eine „einfache“ Variante der Dictionary-Datenstruktur wir schauen uns zwei „randomisierte“ Realisierungen dieser Datenstruktur genauer an • • Skip-Listen Hash-Tabellen ... das Ziel besteht darin, die Effekte der „Randomisierung“ besser zu verstehen 4/3, Folie 9 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Interessierende Problemstellung eine „einfache“ Dictionary-Struktur • es geht darum, eine Menge von verschiedenen Schlüssel so zu speichern, daß man „schnell“ Elemente in die Menge einfügen kann (/* Insert-Operation */) und „schnell“ überprüfen kann, ob ein Element in der Menge enthalten ist (/* Lookup-Operation */) ... hierfür gibt es eine Vielzahl unterschiedlicher Varianten, von denen wir einige schon kennen ... wir betrachten nur die folgende Situation (/* weil sie „einfach“ zu analysieren ist; aber den Blick auf das „wesentliche“ erlaubt */): • • 4/3, Folie 10 die n Schlüssel einer gegebenen Menge werden nacheinander „gespeichert“ anschließend wird eine Insert- bzw. eine LookupOperation durchgeführt (/* deren „erwartete“ Kosten für die Bewertung des jeweiligen Ansatzes zentral sind */) © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Lösungsansatz 1 Binäre Suchbäume (/* Beispiel */) • es sei S = { 1,2,3,4,5,6,7 } die zu speichernde Schlüsselmenge Einfügereihenfolge: 4,2,1,3,6,5,7 Einfügereihenfolge: 2,1,4,3,6,5,7 2 4 1 4 3 2 6 1 5 4/3, Folie 11 © 2010 Prof. Steffen Lange - 7 HDa/FbI - Effiziente Algorithmen 6 3 5 7 Kapitel 4: Ausgewählte Datenstrukturen Lösungsansatz 1 Binäre Suchbäume (/* Beispiel, Analyse */) 2 1 3 „erwartete“ Kosten ... • • • 4 einer „erfolgreichen“ Lookup-Operation: 19/7 Vergleiche einer „erfolglosen“ Lookup-Operation: 4 Vergleiche einer Insert-Operation: 4 Vergleiche 6 5 ... allgemeine O(n) viele Vergleiche, falls alle Schlüssel aus der Menge { 1,2, ... } gleichwahrscheinlich „nachgefragt“ werden 4/3, Folie 12 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen 7 Kapitel 4: Ausgewählte Datenstrukturen Lösungsansatz 1 Binäre Suchbäume (/* Beispiel, Analyse */) 4 2 1 „erwartete“ Kosten ... • • • 6 3 5 einer „erfolgreichen“ Lookup-Operation: 15/7 Vergleiche einer „erfolglosen“ Lookup-Operation: 3 Vergleiche einer Insert-Operation: 3 Vergleiche ... allgemeine O(log(n)) viele Vergleiche, falls alle Schlüssel aus der Menge { 1,2, ... } gleichwahrscheinlich „nachgefragt“ werden 4/3, Folie 13 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen 7 Kapitel 4: Ausgewählte Datenstrukturen Lösungsansatz 1 Bewertung / Anmerkungen • • es gibt Eingabedaten, für die „erwarteten“ Kosten der relevanten Operationen nachweislich „schlecht“ sind, d.h. in der Größenordnung O(n) (/* im Gegensatz zu den Kosten O(log(n) im „worst case“ für höhenbalancierte binäre Suchbäume */) es gibt Eingabedaten, für die „erwarteten“ Kosten der relevanten Operationen ausreichend „gut“ sind, d.h. in der Größenordnung O(log(n)) (/* vergleichbar zu den Kosten O(log(n) im „worst case“ für höhenbalancierte binäre Suchbäume */) ... wenn man davon ausgeht, daß alle Eingabereihenfolge der Schlüssel der zu speichernden Menge { 1,...,n } gleichwahrscheinlich sind, kann man zeigen, daß die „erwarteten“ Kosten der relevanten Operationen in der Größenordnung O(log(n)) sind 4/3, Folie 14 © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen Kapitel 4: Ausgewählte Datenstrukturen Ausblick ... • 4/3, Folie 15 in den nächsten beiden Unterabschnitten behandeln wir „randomisierte“ Realisierung der einfachen „Dictionary“ Datenstruktur mit folgenden Eigenschaften : • es gibt mit Blick auf die „erwarteten“ Kosten der relevanten Operationen keine „schlechten“ Eingaben • die „erwarteten“ Kosten der relevanten Operationen sind für SkipListen stets in der Größenordnung O(log(n)) (/* vergleichbar zu den Kosten im „worst case“ für höhen-balancierte binäre Suchbäume */) • die „erwarteten“ Kosten der relevanten Operationen sind für „geeignet“ gewählte Hash-Tabellen stets in der Größenordnung O(1) (/* deutlich besser als die Kosten im „worst case“ für höhenbalancierte binäre Suchbäume */) © 2010 Prof. Steffen Lange - HDa/FbI - Effiziente Algorithmen