Chaining

Werbung
Wiederholung
Wörterbuchproblem (Suchen, Einfügen, Löschen)
Datenstrukturen &
Algorithmen
Eine gute Lösung: Hashtabellen (Gestreute Speicherung)
VO 708.031
9. Vorlesung, am 10.Jan. 2008
Wichtig: Eine „gute“ Hashfunktion zu haben, um
die Anzahl der Kollisionen zu minimieren.
Kollisionen treten trotzdem auf Æ Kollisionsbehandlung
Überlauferlisten
(Chaining)
10.01.2008
helmut.hauser@IGI
10.01.2008
Gestreute Speicherung - Hashtabellen
Idee: Direkt aus dem Schlüssel durch eine so genannte Hashfunktion
die Adresse zur Speicherung errechnen.
U = Universum aller
möglichen Schlüssel
h(w) = j
Kollision
helmut.hauser@IGI
Überläuferlisten (Chaining)
Bei einer Kollision h(w) = h(w´) werden die Daten in einer
verketteten Liste angelegt:
j = 0 Hashtabelle
T
j=1
EINFÜGEN =
:
LÖSCHEN =
?
?
SUCHEN =
?
h (w) = h (w´)
Aktuelle
Schlüssel w
Offene Adressierung
:
j = m-2
j = m-1
10.01.2008
helmut.hauser@IGI
10.01.2008
helmut.hauser@IGI
Überläuferlisten (Chaining)
Bei einer Kollision h(w) = h(w´) werden die Daten in einer
verketteten Liste angelegt:
Offene Adressierung
Bei einer Kollision wird erneut eine Adresse berechnet, indem die
Versuchzahl i um eins erhöht wird, und zwar so lange bis ein freier
Platz gefunden wird, oder i=m ist.
zu erwartende Laufzeit:
EINFÜGEN =
O(1)
LÖSCHEN =
O(1+α)
SUCHEN =
O(1+α)
α≤1 Æ T kann voll werden.
h(w,i) = j
i…0,1,2,…m-1 Versuchzahl (Probing)
i=1
EINFÜGEN =
i=2
noch frei
besetzt
10.01.2008
helmut.hauser@IGI
10.01.2008
Suchen in linearen Feldern
LÖSCHEN =
SUCHEN =
helmut.hauser@IGI
Ungeordnet - Sequentielle Suche
Idee: Einfach von Anfang bis Ende alle Werte durchgehen.
Ohne Vorsortierung
Mit Vorsortierung
• Sequentielle Suche
• Binärsuche (Binary Bisection Search)
• Speicherung nach
Zugriffswahrscheinlichkeiten
• Interpolationssuche
helmut.hauser@IGI
O(n)
best case:
O(1)
average case: O(n)
• Fastsearch
• Selbstanordnende Felder
10.01.2008
worst case:
10.01.2008
helmut.hauser@IGI
?
?
?
Ungeordnet - Speicher nach
Wahrscheinlichkeiten
Idee: Die Elemente nach ihren Zugriffswahrscheinlichkeiten ordnen.
Ungeordnet - Selbstanordnende Felder
Idee: Die Elemente, welche gesucht und gefunden wurden, werden
nach vorne verschoben.
Verschieben
um eine Position
Æ O(n)
Gleichverteilung:
pi = 1/(n+1)
Exponentielle Verteilung:
pi = 1/(2i) für 1≤i≤n Æ O(1)
Verschieben
an die Position 1
Nachteil: Zugriffswahrscheinlichkeit muss bekannt sein.
Im Mittel beide Methoden halb so gut wie bei bekannten pi‘s.
10.01.2008
helmut.hauser@IGI
10.01.2008
Suchen in linearen Feldern
helmut.hauser@IGI
Binärsuche
(Binary Bisection Search)
Ohne Vorsortierung
Mit Vorsortierung
• Sequentielle Suche
• Binärsuche (Binary Bisection Search)
• Speicherung nach
Zugriffswahrscheinlichkeiten
• Interpolationssuche
Idee: Teile das Feld in zwei gleich große Hälften. Vergleiche den
gesuchten Wert mit dem mittleren Element. Falls sie gleich sind, dann
ist man fertig. Wenn der gesuchte Wert kleiner ist, dann suche in der
unteren Hälfte, sonst in der oberen Hälfte.
• Fastsearch
• Selbstanordnende Felder
Annahmen:
• aufsteigend sortiert
• falls nicht gefunden return (-1)
10.01.2008
helmut.hauser@IGI
10.01.2008
helmut.hauser@IGI
Binärsuche
Binärsuche
(Binary Bisection Search)
(Binary Bisection Search)
rekursive Version
iterative Version
T(n) = T(n/2) + O(1)
T(n) =O(log n)
10.01.2008
helmut.hauser@IGI
10.01.2008
Interpolationssuche
helmut.hauser@IGI
Interpolationssuche
rekursive Version
Idee: Man sucht nicht jeweils in der Mitte, sondern dort, wo das
Element sein sollte, mit der Annahme, dass die Werte linear ansteigen.
A[bis]
x
A[von]
von
10.01.2008
t
helmut.hauser@IGI
T(n) =O( log log(n) )
bis
10.01.2008
helmut.hauser@IGI
Zu erwartende
Laufzeit
FastSearch
Idee:
FastSearch
rekursive Version
Kombination von Binärsuche und Interpolationssuche. Das
Ergebnis ist O(log log n) im mittleren Fall und O(log n) im
schlechtesten Fall.
A
von
B
C
mB
Binärsuche
10.01.2008
mI
bis
Interpolationssuche
helmut.hauser@IGI
10.01.2008
Anzahl der Vergleiche für 109
Elemente
Laufzeitverhalten der
Suchverfahren
Mittlerer Fall
Binärsuche
O(log n)
helmut.hauser@IGI
Mittlerer Fall
Schlechtester Fall
Schlechtester
Fall
O(log n)
Interpolationssuche
O(log log n)
O(n)
„FastSearch“
O(log log n)
O(log n)
Unsortiert
Sequentielles Suchen
O(n)
O(n)
Binärsuche
30
30
Interpolationssuche
5
1.000.000.000
„FastSearch“
5
30
Unsortiert
Sequentielles Suchen
500.000.000
1.000.000.000
Alles circa Wert !!
10.01.2008
helmut.hauser@IGI
10.01.2008
helmut.hauser@IGI
Danke für Ihre Aufmerksamkeit!
Bis zum nächsten Mal.
( Donnerstag, 17.Jan.2008, i13 )
10.01.2008
helmut.hauser@IGI
10.01.2008
helmut.hauser@IGI
10.01.2008
helmut.hauser@IGI
10.01.2008
helmut.hauser@IGI
10.01.2008
helmut.hauser@IGI
Herunterladen