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