Wörterbücher (Dictionaries) ADT: Objekte: Search (x,S): Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Menge S von Elementen aus TxW, T, W Typen, T sind die Schlüssel, W die Daten. Operationen: Create (S): Insert ((x,D),S): Delete (x,S): Universität Paderborn Erzeuge eine leere Menge. Falls (x, D‘) für ein D‘∈ W in S ist, ersetze es durch (x, D), sonst füge (x, D) in S ein. Falls (x, D) für ein D∈ W in S ist, streiche es. Falls (x, D) für ein D∈ W in S ist, gib es aus; sonst gib nil aus. Im folgenden: Wir betrachten nur die Schlüssel Wörterbücher (Dictionaries) / 2 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Implementierung durch doppelt verkettete Listen Create: Insert: Delete: Search: O (1) O (1) (Wir benutzen einfach Insert (x, 0, S), d.h. fügen x vorne in der Liste ein.) O (n) (Für Search und Delete müssen wir im schlimmsten O (n) Fall die Liste vollständig durchlaufen.) Hashing / 1 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien S ⊆ U = {0, ..., p -1} - Benutzte Array (Hashtableau) T [0: m-1], und Hashfunktion h : U → {0, ..., m-1}. - Speichere x in T [h (x)] Problem Kollisionen: Bsp: m = 3, h (x) = x mod 3, S = {2, 7, 4, 5} T[0] : T[1] : 4,7 T[2] : 2,5 Hashing / 2 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Methoden der Kollisions-Verwaltung: 1. Hashing mit Verkettung T[i] ist lineare Liste, T[i] enthält alle x ∈ S mit h(x) = i Zeit für Insert: O(1) Zeit für Search/Delete: O(1 + bi) mit bi = # (S ∩ h-1 (i)) (Bucketgröße) Wie groß sind die bi ? Hashing / 3 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Wie groß sind die bi ? Im besten Fall haben alle bi Größe ≈ n/m (n/m = durchschnittliche Bucket-Größe =: Load Faktor α) → Zeit für Search/Delete O(1+ α) Im schlechtesten Fall ist (z.B.) b0 = n, alle anderen bi = 0 → Zeit für Search/Delete: O(n) Hashing / 4 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Average Case: b0, ..., bm-1 beliebig, Σ bi = n Voraussetzung: h ist uniform, d.h. h-1 (i) ≈ p/m →Durchschnittliche Zeit für Search/Delete : O (1 + α) Hashing / 5 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Methoden der Kollisions-Verwaltung 2. Open Addressing Benutze h : U x {0, ..., m-1} → {0, ..., m-1} Insert: Füge x in der ersten freien Position aus h (x,0), h (x, 1), ..., h (x, m-1) ein. Permutation Delete / Search Hashing / 6 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Open Addressing: Wie wählen wir h ? (i) Linear Probing: h‘ = U → {0, ..., m-1} h (x, i): = (h‘ (x) + i) mod m Vorteil: Nachteil: einfach Tendenz, in T lange besetzte Intervalle zu erzeugen → häufig lange Laufzeiten (das „richtige“ i ist häufig groß) Hashing / 7 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Open Addressing: Wahl von h (ii) Quadratic Probing h‘: U → {0, ..., m-1}, c1, c2 ∈ {0, ..., m-1} h (x,i) = (h‘ (x) + c1 i + c2 i2) mod m Nachteil: Vorteil: aufwendig, Auswertung teuer etwas gleichmäßigere Verteilung, → im Schnitt etwas bessere Laufzeiten. Hashing / 8 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Open Addressing: Wahl von h (iii) Double Hashing h1, h2: U → {0, ..., m-1} h (x,i) = (h1 (x) + i h2 (x)) mod m Nachteil: Vorteil: Teurere Auswertung Sehr gute Verteilung der Schlüssel in T Erwartete Laufzeit: O (1/(1-α)) Hashing / 9 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Wahl von Hashfunktionen Ideal: Wähle h zufällig aus allen h: U → {0, ..., m-1} aus → Für jedes S, |S| = n gilt: Delete/Search benötigen für jedes x∈U erwartete Zeit O(1+α) bei Hashing mit Verkettung. Hashing / 10 Problem: Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Wie speichert man eine zufällig gewählte Funktion? Man muß die Wertetabelle speichern → Platz Θ(p) ! Ausweg: Universelles Hashing H ⊆ {h: U →{0, ..., m-1}} heißt universell, falls für alle x, y∈U, x≠y, gilt: Die Wahrscheinlichkeit, bei zufälliger Wahl von h∈H, für “h(x) = h(y)“ ist höchstens 2/m. Hashing / 11 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Beispiel: H1 = {ha,b , ha,b (x) = ((ax +b) mod p) mod m} ist universell. (p = |U| ist Primzahl) Beachte: h∈H1 benötigt Platz O(1) und Auswert-Zeit O(1). Satz: S ⊆ U beliebig, |S| = n. S sei bzgl. zufälligem h∈H (H universell) in T[0:m-1] abgespeichert. Für jedes x∈U gilt dann: Delete (x), Search (x) benötigen erwartete Zeit O(1 + α). Universität Paderborn Suchbäume / 1 Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Idee: Nutze die Idee für binäre Suche (Suchzeit O(log(n)), modifiziere sie so, dass auch Insert, Delete effizient wird. Beispiel: 1 A= 2 Binäre Suche bei 15 Elementen 3 4 5 [2, 3, 5, 7, 8, 6 7 8 9 10 11 12 13 14 15 9, 12, 16, 19, 22, 23, 25, 27, 29, 30] Universität Paderborn Suchbäume / 2 Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Darstellung der Binären Suche als Baum 16 7 25 3 2 nil nil 9 5 8 nil nil nil nil 22 12 nil nil 19 nil nil 29 23 nil nil 27 36 nil nil nil nil Suchbäume / 3 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Definition Ein Suchbaum für eine Menge S, |S| = n, ist ein binärer Wurzelbaum mit n Knoten. Jedem Knoten v ist ein Element key(v)∈S zugeordnet, so dass für jeden Knoten v gilt: Alle Knoten w im linken (rechten) Subbaum unter v erfüllen key (w) < key(v) (key(w) > key(v)). Lemma In einem Suchbaum der Tiefe t sind beim Suchen im worst case O(t) Schritte nötig. (Das tritt auf, wenn eine erfolglose Suche einen längsten Weg im Baum durchläuft.) Universität Paderborn Suchbäume / 4 Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Darstellung binärer Bäume: Knoten: left: key left right Zeigt auf linkes Kind right: Zeigt auf rechtes Kind bzw. auf nil, falls Kind nicht existiert Suchbäume / 5 Insert (x): Zeit: Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Search (x); Falls x gefunden wird, überschreibe die zugehörigen Daten. Sonst wird ein Nil-Zeiger erreicht. Dort erzeuge neues Blatt x. O (Tiefe des Suchbaumes) Suchbäume / 6 Delete (x): Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Search (x) ; Fall 1: x ist Blatt Fall 2: x hat einen Nachfolger Fall 3: x hat zwei Nachfolger Zeit: O (Tiefe des Suchbaums) Universität Paderborn Suchbäume / 7 Delete(7) Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien (Fall 3) 16 7 25 3 2 nil nil 9 5 nil nil 8 nil nil 22 12 nil nil 19 nil nil 29 23 nil nil 27 nil nil 36 nil nil Universität Paderborn Suchbäume / 7 Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Delete(7) 16 8 25 3 2 nil nil 9 5 nil nil 7 nil nil 22 12 nil nil 19 nil nil 29 23 nil nil 27 nil nil 36 nil nil Universität Paderborn Suchbäume / 7 Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Delete(7) 16 8 3 25 9 2 5 nil nil nil nil NIL 22 29 12 19 23 27 36 nil nil nil nil nil nil nil nil nil nil Suchbäume / 7 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Satz: Search, Insert, Delete, in einem Suchbaum der Tiefe t benötigt Zeit O (t). Wie tief ist ein Suchbaum T mit n Knoten? Best Case: T ist balanciert, vollständig → Tiefe log (n) + 1 Worst Case: T entsteht durch Insert (1), Insert (2), ..., Insert(n) → Tiefe n Suchbäume / 8 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Average Case: (Bilde Durchschnitt über die Tiefen der Bäume, die bei Einfügen von Π(1), ..., Π(n) entstehen, Durchschnitt über alle Permutationen Π) Durchschnittliche Tiefe: ≈ c ·log (n)(c > 0 ist Lösung von c · ln (2e/c) = 1) → 4.31107... ·log (n) Suchbäume / 9 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Zeit für Einfügen von Π (1), ..., Π(n) in leeren Baum - Kosten für Insert (x):= Tiefe von x im Baum Best Case: Balancierter Baum (n = Σ0≤i≤k 2i = 2k+1 -1) → Zeit: Σ i·2i = (k-1) · 2k+1 + 2 ≤ n log (n) Worst Case: Füge 1,2, ..., n ein → Zeit Σ i = n(n+1)/2 = Θ (n2) Suchbäume / 10 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Average Case: T(0) = 0 , T (1) =1. n >1: Falls zuerst i eingeführt wird (Π (1) = i) werden im linken bzw. rechten Teilbaum i-1 bzw. n-i Elemente eingefügt. Kosten: (T(i-1) + i-1) + (T(n-1) + n-i) + 1 = T (i-1) + T(n-i) + n Jedes i taucht gleich oft als Wurzel auf. → T (n) = 1/n (Σ1≤ i≤ n [T(i-1) + T(n-i) + n]) → T(n) ≈ 1.386 n log (n) - Θ (n) Suchbäume / 11 Universität Paderborn Theoretische Informatik Prof. Dr. rer. nat. Burkhard Monien Satz Beim Einfügen von 1, ..., n in beliebiger Reihenfolge entstehen folgende Kosten: Einfügen insgesamt Maximale Suchzeit (=Tiefe des Baumes) best case n log (n) log (n) + 1 worst case n(n+1)/2 n average case 1.386n log(n) -Θ(n) ≈ 4.31107 log(n)