HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Algorithmen und Komplexität Teil 1: Grundlegende Algorithmen WS 08/09 Friedhelm Meyer auf der Heide Vorlesung 13, 25.11.08 Friedhelm Meyer auf der Heide 1 HEINZ NIXDORF INSTITUTE Organisatorisches University of Paderborn Algorithms and Complexity Die letzte Vorlesung über Grundlegende Algorithmen findet am Montag, 1.12. statt. Die Vorlesung Komplexitätstheorie von Johannes Blömer beginnt am Montag, 8.12. Voraussichtliche Prüfungstage für die erste Prüfungsphase: 9.12., 12.12., 15.12. Friedhelm Meyer auf der Heide 2 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Randomisierte Algorithmen Friedhelm Meyer auf der Heide 3 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Perfektes Hashing Friedhelm Meyer auf der Heide 4 HEINZ NIXDORF INSTITUTE Perfektes Hashing University of Paderborn Algorithms and Complexity Zu S⊆U, |S|=n, berechne eine Hashfunktion h:U → [m] mit: • h kann in konstanter Zeit ausgewertet werden. • h benötigt Speicherplatz O(n). Wie können wir ein h konstruieren, • h|S ist injektiv. das perfekt für S ist?? • n m c n für eine (kleine) Konstante c ≥ 1. Ein solches h heisst perfekt für S. Eine perfekte Hashfunktion für S liefert eine Datenstruktur für ein statisches Wörterbuch, d. h. für den Datentyp, der die Suchoperation in S unterstützt. - Lege Hashtableau T an, d.h. ein Array T[0 : m-1] - Speichere x ∈ S in T[h(x)] (Beachte: Hierbei entstehen keine Kollisionen!!) Suche: Für x ∈ U liefert “search(x)” (die assoziierte Information zum) Schlüssel x. Dazu muss nur in T[h(x)] nachgeschaut werden. Suchzeit O(1), Speicherplatz O(n) Friedhelm Meyer auf der Heide 5 HEINZ NIXDORF INSTITUTE Lineare Hashfunktionen University of Paderborn Algorithms and Complexity Sei U= [p], p prim. Für a∈U sei ha: U → [m] definiert durch ha(x)= (ax) mod(p) mod(m) Sei H1(m):= {ha: U → [m], a∈U}. Im folgenden betrachten wir immer das Zufallsexperiment “Wähle ha zufällig, gleichverteilt aus H1(m).” Für m=n : Σ(ba(j))2 < 5n für mindestens die Hälfte der ha ∈ H1(m). Für m=2n2 : mindestens die Hälfte der ha ∈ H1(m) sind injektiv auf S. Friedhelm Meyer auf der Heide 6 HEINZ NIXDORF INSTITUTE Das perfekte Hashing-Schema University of Paderborn Algorithms and Complexity d0 d1 dj h(j)(x) + dj = aj x mod(p)mod(2ba(j)2)+ dj ha(x) = j x aj, dj, 2ba(j)2 2ba(j)2 T[j] S T[0 : n-1] T*[0 : 10n-1] Friedhelm Meyer auf der Heide 7 Eigenschaften des perfekten Hashing-Schemas HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Falls wir die Suche nach den Hashfunktionen ha ∈ H1(m) durch die Prozedur ”Wähle solange zufälliges ha∈ H1(m), bis eins mit der gesuchten Eigenschaft gefunden ist” realisieren, reichen wegen des Satzes über lineare Hashfunktionen erwartet zwei Versuche (vgl. “Pralinen finden”). Ein Versuch benötigt Zeit O(m) (für den Test der Eigenschaft). Satz: Das oben beschriebene Schema hat folgende Eigenschaften: • Es benötigt Platz O(n). • Eine Suchanfrage benötigt konstante Zeit. • Die Zeit um die Datenstruktur aufzubauen beträgt - O(p n) im worst case, - erwartet O(n). Friedhelm Meyer auf der Heide 8 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity A new data structure for dictionaries: Skiplists Friedhelm Meyer auf der Heide 9 HEINZ NIXDORF INSTITUTE Dictionaries (dynamische Wörterbücher) University of Paderborn Algorithms and Complexity Support the operations find, insert, delete. Examples: Search trees like - AVL-trees, red-black- trees, 2-3-trees, … O(log(n)) time per operation Hashing structures like - Hashing with chaining, linear probing, double hashing, … Friedhelm Meyer auf der Heide 10 HEINZ NIXDORF INSTITUTE A new realization of dictionaries: Skiplists University of Paderborn Algorithms and Complexity A skiplist is a linked list with shortcuts Friedhelm Meyer auf der Heide 11 HEINZ NIXDORF INSTITUTE Find in Skiplists University of Paderborn Algorithms and Complexity Friedhelm Meyer auf der Heide 12 HEINZ NIXDORF INSTITUTE Insert in Skiplists University of Paderborn Algorithms and Complexity Insert(x): - Find x, - Flip a coin until, after some number h of trials, head appears - Insert x at the corresponding position on the h lowest levels h is the height of x. How large is h? Friedhelm Meyer auf der Heide 13 The height of a Skiplist is logarithmic, with high probability HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Thus, the expected size (number of nodes) is 2n. Prob(h ≥ 2log(n)) = 1/n² The height of the skiplist is the maxium height of its elements. Lemma: Prob(Height of Skiplist ≥ 2log(n)) 1/n Friedhelm Meyer auf der Heide 14 HEINZ NIXDORF INSTITUTE Delete in Skiplists University of Paderborn Algorithms and Complexity Delete(x) - Find(x) - Remove it on all levels it is present by connecting its predecessor with its successor Friedhelm Meyer auf der Heide 15 HEINZ NIXDORF INSTITUTE Expected time per operation is logarithmic University of Paderborn Algorithms and Complexity Note: We only analyse search; the other operations are dominated by this. Consider the reversed search path: (H:= height of skiplist) - In each step, it goes upwards with probability ½. - Thus, after expected 2H steps, it is on level H, which is expected < 2log(n). Friedhelm Meyer auf der Heide 16 HEINZ NIXDORF INSTITUTE Summing up University of Paderborn Algorithms and Complexity A Skiplist is a randomized datastructure that has the following properties: - its expected size is O(n) - Find, insert, delete need expected time O(log(n)). Thus Skiplists have a performance comparable to balanced search trees, but are much easier to implement. Friedhelm Meyer auf der Heide 17 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Grundlegende Begriffe über randomisierte Algorithmen Friedhelm Meyer auf der Heide 18 Grundlegende Begriffe über randomisierte Algorithmen HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Ein randomisierter Algorithmus A, gestartet mit Eingabe x, darf, zusätzlich zu den üblichen Operationen, Operationen vom Typ “R :=random(M)” ausführen. Dabei ist M eine endliche Menge, “R :=random(M)” weist der Variablen R ein zufällig, uniform gewähltes Element aus M zu. Eine Rechnung R von A gestartet mit x ergibt sich durch sukzessive Festlegung der Ergebnisse ai ∈ Mi, i=1,…s, der Zufallsexperimente “Ri :=random(Mi)”, i=1,…,s, die während der Rechnung R ausgeführt werden. Die Wahrscheinlichkeit für das Auftreten von R bei Eingabe x ist somit Pr(R)= 1/|M1| * 1/|M2| * … * 1/|Ms|. |R|:= Länge von R; C := Menge aller Rechnungen von M gestartet mit x. Friedhelm Meyer auf der Heide 19 Grundlegende Begriffe über randomisierte Algorithmen HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Tail Estimates) ((Sog. Sog. Tail Estimates) Friedhelm Meyer auf der Heide 20 HEINZ NIXDORF INSTITUTE Unsere Beispiel “Praline suchen” University of Paderborn Algorithms and Complexity Wir schreiben k = εn E:= Erwartete Zahl von Versuchen = (n-k)/k +1 =(1- ε)/εε +1 Prob(#Versuche > s) = ((n-k)/n)s = (1 - ε)s Prob(#Versuche > E (1+d)) = (1 - ε)E (1+d) ≈ [e- (1 - ε) (1 - ε)]1+d Da e- (1 - ε) (1- ε) < 1 ist, fällt diese W’keit exponentiell mit d. Beispiel: Für ε = ½ ist E=2, also Prob(#Versuche > E (1+d)) = (1/2)2 + 2d . Das ist < 1/1Mio bereits für d=9, also bei 20 Versuchen Friedhelm Meyer auf der Heide 21 HEINZ NIXDORF INSTITUTE University of Paderborn Algorithms and Complexity Thank you for your attention! Friedhelm Meyer auf der Heide Heinz Nixdorf Institute & Computer Science Department University of Paderborn Fürstenallee 11 33102 Paderborn, Germany Tel.: +49 (0) 52 51/60 64 80 Fax: +49 (0) 52 51/62 64 82 E-Mail: [email protected] http://www.upb.de/cs/ag-madh Friedhelm Meyer auf der Heide 22