PDF_4

Werbung
Datenstrukturen &
Algorithmen
Achtung: VO am 8.Jan 2008
entfällt!
VO 708.031
10. Vorlesung, am 12.Dez. 2008
12.04.2008
helmut.hauser@IGI
Wörterbuchproblem
Definition der Wörterbuchproblems durch 3 Funktionen:
1.
2.
3.
EINFÜGEN
SUCHEN
LÖSCHEN
12.04.2008
helmut.hauser@IGI
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
j = 0 Hashtabelle
T
j=1
:
h (w) = h (w´)
Anwendungsbeispiele: Telefonbuch, Wörterbuch,
Symboltabelle beim Kompilieren, …
Aktuelle
Schlüssel w
:
j = m-2
j = m-1
12.04.2008
helmut.hauser@IGI
12.04.2008
helmut.hauser@IGI
Behandlung von Kollisionen
Überläuferlisten (Chaining)
Bei einer Kollision h(w) = h(w´) werden die Daten in einer
verketteten Liste angelegt:
Kollision: h(w) = h(w´)
Achtung: Kollisionen können immer auftreten.
zu erwartende Laufzeit:
1.) Linderung des Problems:
• Durch geschickte Wahl der Hashfunktion
EINFÜGEN =
O(1)
LÖSCHEN =
O(1+α)
SUCHEN =
O(1+α)
2.) Behandlung von Kollisionen
a) Überläuferlisten (Chaining)
b) Offene Adressierung
12.04.2008
helmut.hauser@IGI
12.04.2008
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.
i…0,1,2,…m-1 Versuchzahl (Probing)
i=1
Θ( 1/(1+α) )
Ohne Vorsortierung
Mit Vorsortierung
• Sequentielle Suche
• Binärsuche (Binary Bisection Search)
• Speicherung nach
Zugriffswahrscheinlichkeiten
• Interpolationssuche
• Fastsearch
• Selbstanordnende Felder
noch frei
besetzt
12.04.2008
Suchen in linearen Feldern
α≤1 Æ T kann voll werden.
h(w,i) = j
i=2
helmut.hauser@IGI
helmut.hauser@IGI
Θ( 1/α[ln(1/(1+α))+1] )
12.04.2008
helmut.hauser@IGI
Ungeordnet - Speicher nach
Wahrscheinlichkeiten
Ungeordnet - Sequentielle Suche
Idee: Einfach von Anfang bis Ende alle Werte durchgehen.
Idee: Die Elemente nach ihren Zugriffswahrscheinlichkeiten ordnen.
worst case:
O(n)
best case:
O(1)
average case: O(n)
Æ O(n)
Gleichverteilung:
pi = 1/(n+1)
Exponentielle Verteilung:
pi = 1/(2i) für 1≤i≤n Æ O(1)
Nachteil: Zugriffswahrscheinlichkeit muss bekannt sein.
12.04.2008
helmut.hauser@IGI
12.04.2008
Ungeordnet - Selbstanordnende Felder
Idee: Die Elemente, welche gesucht und gefunden wurden, werden
nach vorne verschoben.
helmut.hauser@IGI
Suchen in linearen Feldern
Ohne Vorsortierung
Mit Vorsortierung
Verschieben
um eine Position
Verschieben
an die Position 1
• Sequentielle Suche
• Binärsuche (Binary Bisection Search)
• Speicherung nach
Zugriffswahrscheinlichkeiten
• Interpolationssuche
• Fastsearch
• Selbstanordnende Felder
Annahmen:
• aufsteigend sortiert
• falls nicht gefunden return (-1)
Im Mittel beide Methoden halb so gut wie bei bekannten pi‘s.
12.04.2008
helmut.hauser@IGI
12.04.2008
helmut.hauser@IGI
Binärsuche
Binärsuche
(Binary Bisection Search)
(Binary Bisection Search)
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.
rekursive Version
T(n) = T(n/2) + O(1)
T(n) =O(log n)
12.04.2008
helmut.hauser@IGI
12.04.2008
Binärsuche
helmut.hauser@IGI
Interpolationssuche
(Binary Bisection Search)
Idee: Man sucht nicht jeweils in der Mitte, sondern dort, wo das
Element sein sollte, mit der Annahme, dass die Werte linear ansteigen.
iterative Version
A[bis]
x
A[von]
von
12.04.2008
helmut.hauser@IGI
12.04.2008
t
helmut.hauser@IGI
bis
Interpolationssuche
FastSearch
rekursive Version
Idee:
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
T(n) =O( log log(n) )
12.04.2008
helmut.hauser@IGI
12.04.2008
bis
Interpolationssuche
helmut.hauser@IGI
rekursive Version
helmut.hauser@IGI
mI
Laufzeitverhalten der
Suchverfahren
FastSearch
12.04.2008
C
mB
Binärsuche
Zu erwartende
Laufzeit
B
Mittlerer Fall
Schlechtester Fall
Binärsuche
O(log n)
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)
12.04.2008
helmut.hauser@IGI
Anzahl der Vergleiche für 109
Elemente
Mittlerer Fall
Laufzeitverhalten der
Suchverfahren
Schlechtester
Fall
Mittlerer Fall
Schlechtester Fall
Binärsuche
30
30
Binärsuche
O(log n)
O(log n)
Interpolationssuche
5
1.000.000.000
Interpolationssuche
O(log log n)
O(n)
„FastSearch“
5
30
O(n)
O(n)
Unsortiert
Sequentielles Suchen
500.000.000
1.000.000.000
Unsortiert
Sequentielles Suchen
Alles circa Wert !!
12.04.2008
helmut.hauser@IGI
12.04.2008
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.
Binärsuche
12.04.2008
helmut.hauser@IGI
*
Interpolationssuche
helmut.hauser@IGI
12.04.2008
helmut.hauser@IGI
Laufzeitverhalten der
Suchverfahren
Anzahl der Vergleiche für 109
Elemente
Mittlerer Fall
Mittlerer Fall
Schlechtester Fall
Schlechtester
Fall
Binärsuche
O(log n)
O(log n)
Binärsuche
30
30
Interpolationssuche
O(log log n)
O(n)
Interpolationssuche
5
1.000.000.000
„FastSearch“
O(log log n)
O(log n)
„FastSearch“
5
30
Unsortiert
Sequentielles Suchen
O(n)
O(n)
Unsortiert
Sequentielles Suchen
500.000.000
1.000.000.000
Alles circa Wert !!
12.04.2008
helmut.hauser@IGI
12.04.2008
helmut.hauser@IGI
Zugehörige Unterlagen
Herunterladen