Delete/Search - Universität Paderborn

Werbung
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)
Herunterladen