Praktische Informatik I – Algorithmen und Datenstrukturen 6 Wintersemester 2006/07 Hashverfahren zum Namen “Hash”: engl. für “zerhacken” gestreute Speicherung 6.1 Grundbegriffe Wir unterstellen ein direkt adressierbares Speichermedium mit einer Menge von Adressen, dem Adressraum. repräsentiert. Es gibt Die Datensätze werden durch Schlüsselwerte Zu jedem Zeitpunkt ist immer eine universelle Schlüsselwertmenge gespeichert. eine Teilmenge Prof. Dr. Dietmar Seipel 336 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 ........ ................... ...... ............. . . . . .......... ... . . ....... . ............ .. . ... . . . . . . . . .. . . . . .. .. ... .. . ..... . . .. .. .... . .. .. .. . . .. .. ... ... ... ... .... .... .... ...... . ........ .. ........ . ......... . .......... .... . . ............ . . . ............... ...... ........ . . . . . . Die Zuordnung eines Schlüsselwertes auf einen Speicherplatz erfolgt mittels einer arithmetischen Funktion Prof. Dr. Dietmar Seipel heißt Hausadresse von . genannt Hashfunktion: 337 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Beispiel: 18 4 f ........ ................... ...... ............. . . . . .......... ... . . ....... . ............ .. . .. . . . .. . 4 . . . . . . 10 .. . ...... .... .. ... ... .... .. .. ... . . .. . .. .. 1 ... ... ... ... .... .... 19 18 .... ...... . ........ .. ........ . ......... .. .......... .... . ........... . . . . ................ ...... ........ Prof. Dr. Dietmar Seipel 10 19 . . . 338 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Bei B–Bäumen (bzw. B –Bäumen) erfolgte dagegen die Zuordnung der Schlüsselwerte auf die Speicherplätze – in diesem Fall die Datenseiten – durch Traversieren des Baumes gepaart mit Schlüsselwertvergleichen ?“: datenorientierte Strukturierung. „ Die Strukturierung mittels Hashverfahren nennt man dagegen speicherorientiert. Die Zuordnung eines Schlüsselwerts mittels einer Hashfunktion auf einen Speicherplatz erfolgt unabhägig von der aktuell gespeicherten Menge von Schlüsselwerten. Standardannahmen für Hashfunktionen Ist injektiv, so heißt auch direkt, anderenfalls heißt eigentliche , und ist eine eigentliche Hashfunktion. Hashfunktion. Meist gilt Prof. Dr. Dietmar Seipel 339 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Beispiel: direkt (i) eigentlich (ii) Prof. Dr. Dietmar Seipel 340 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Synonyme Zwei unterschiedliche Schlüsselwerte haben. dieselbe Hausadresse heißen Synonyme, wenn sie Die Äquivalenzklassen für heißen Synonymklassen, und sie bilden eine disjunkte Zerlegung von . Prof. Dr. Dietmar Seipel 341 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Warum “eigentliche Hashfunktionen”? Direkte Speicherfunktionen führen häufig zu einer Speicherplatzverschwendung. Denn es gilt dann: , wegen der Injektivität von , und , da meist nur ein kleiner Prozentsatz aller möglichen Schlüsselwerte gespeichert wird. Dies führt zu einem sehr geringen Belegungsfaktor Deshalb wählt man eigentliche Hashfunktionen mit Prof. Dr. Dietmar Seipel 342 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Dabei nimmt man in Kauf, dass zwei Schlüsselwerte zu speichern sind, welche auf dieselbe Hausadresse abgebildet werden (Synonyme). Bei solchen Kollisionen sind dann weitere Maßnahmen erforderlich um die Wörterbuchoperationen (Suchen, Einfügen und Löschen) durchführen zu können. Ein Hashverfahren besteht somit aus zwei Komponenten: einer (eigentlichen) Hashfunktion und [einfach zu berechnen] einer Kollisionsstrategie [aufwändiger] Prof. Dr. Dietmar Seipel 343 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Kollisionswahrscheinlichkeit Man sollte die Hashfunktion so wählen, daß die Kollisionswahrscheinlichkeit möglichst gering wird. Allerdings ist die Wahrscheinlichkeit für eine Kollision i.a. recht groß. Das Auftreten mehrerer Kollisionen ist unwahrscheinlicher. Prof. Dr. Dietmar Seipel 344 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Geburtstags–Paradoxon: Personen: Auf einer Party treffen sich zufällig Ihre Geburtstage stochastisch unabhängig: seien gleichverteilt über das Jahr und Prof. Dr. Dietmar Seipel 345 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Frage: , dass keine zwei Personen am Wie groß ist die Wahrscheinlichkeit gleichen Tag Geburtstag haben? (keine Kollision) („Ziehen ohne Zahl der günstigen Fälle: Zurücklegen“) („Ziehen mit Zurücklegen“) Zahl der möglichen Fälle: Schon für gilt . Für ist der Belegungsfaktor noch sehr niedrig. Prof. Dr. Dietmar Seipel dagegen immer 346 Praktische Informatik I – Algorithmen und Datenstrukturen 6.2 Wintersemester 2006/07 Gebräuchliche Hashfunktionen 6.2.1 Division mit Rest Sei der Adressraum mit Hashfunktion , meist mit einer Basisadresse . Prof. Dr. Dietmar Seipel Bemerkung: 347 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Beispiel: , und sei und , . Sei d.h. die nicht injektive Funktion Dann erhalten wir für Belegungsfaktor Prof. Dr. Dietmar Seipel 348 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Ist eine Zehnerpotenz, so entspricht die Modulo–Berechnung dem Abschneiden der letzten Stellen von bei Dezimaldarstellung (“Sectioning”). Aufgrund der häufig benutzten Dezimalklassifizierung und der Konkatenation von Teilschlüsseln zu Gesamtschlüsseln ist allerdings die Kollisionsgefahr beim Sectioning recht hoch. der zu speichernden Schlüsselwerte zeitlich relativ konstant, Ist die Zahl des Adressraums eine so hat es sich praktisch bewährt für die Größe Primzahl Prof. Dr. Dietmar Seipel zu wählen. (Dann gilt ) 349 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 6.2.2 Basistransformation läßt sich schreiben als Jeder Schlüsselwert Dezimaldarstellung: : Wir wählen nun eine neue Basis Prof. Dr. Dietmar Seipel 350 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Beispiel: Die Basistransformation ist für Kollisionen. injektiv, d.h. man erhält keine Man kann die Basistransformation mit der Division mit Rest kombinieren: Prof. Dr. Dietmar Seipel 351 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 6.2.3 Multiplikationsmethode und eine reelle Zahl betrachten wir mit: Für den Adressraum die Hashfunktion Dabei ist jeweils der “gebrochene Anteil” von . Nach einem Satz von Vera Turán Sós sind diese gebrochenen Anteile verstreut, falls als irrationale Zahl gewählt gleichmäßig im Intervall wird. Von allem Zahlen , führt der goldene Schnitt zur gleichmäßigsten Verteilung ( Prof. Dr. Dietmar Seipel Fibonacci–Hashing). 352 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Beispiel: Fibonacci–Hashing für Prof. Dr. Dietmar Seipel ist Permutation von 353 Praktische Informatik I – Algorithmen und Datenstrukturen 6.3 Wintersemester 2006/07 Kollisionsstrategien 6.3.1 Überlaufhash Hier wird ein Überlaufbereich für alle Hausadressen eingerichtet. Dieser wird i.a. durch eine lineare Liste realisiert. Hausadressen Überlaufbereich . . . . . . Prof. Dr. Dietmar Seipel 354 Praktische Informatik I – Algorithmen und Datenstrukturen die Menge der gespeicherten Synonyme zur Sei Hausadresse . Wintersemester 2006/07 , so ist kein Schlüssel in Ist gespeichert. Ansonsten ist genau ein Synonym in gespeichert, und alle , , im Überlaufbereich. anderen Synonyme Aufwand für die Wörterbuchoperationen: Im schlechtesten Fall sind alle gespeicherten Schlüsselwerte Synonyme – d.h. sie haben dieselbe Hausadresse. Schlüssel im Überlaufbereich. Dann liegen Prof. Dr. Dietmar Seipel 355 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Speicherbelegung: Für alle Schlüssel , welche auf ihrer Hausadresse gespeichert sind, gilt . Für alle Hausadressen , zu denen keine Schlüssel gespeichert sind, gilt . Prof. Dr. Dietmar Seipel 356 Praktische Informatik I – Algorithmen und Datenstrukturen Suchen nach Wintersemester 2006/07 Ansonsten suche zuerst in (erfolglose Suche). , so ist . Ist Berechne die Hausadresse , so speichere auf seiner Hausadresse. Ist Einfügen von und dann im Überlaufbereich. Ansonsten suche zuerst in und dann im Überlaufbereich. Falls nicht gefunden wurde, so speichere im Überlaufbereich. (Falls gefunden wurde, so ist nichts zu tun.) Prof. Dr. Dietmar Seipel 357 Praktische Informatik I – Algorithmen und Datenstrukturen Löschen von Wintersemester 2006/07 Suche den Schlüssel . Falls gefunden wird, d.h. , so entferne wie folgt: , so ersetze Ist auf seiner Hausadresse gespeichert, d.h. auf durch einen synonymen Schlüssel – d.h. mit aus dem Überlaufbereich. Das Löschen im Überlaufbereich erfordert keine Folgeaktionen. Falls nicht gefunden wird, d.h. , so ist nichts zu tun. Prof. Dr. Dietmar Seipel 358 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Average Case für Suche: Wir setzen Gleichverteilung auf voraus, d.h. jeder Schlüssel hat mit die Hausadresse für alle Wahrscheinlichkeit die Anzahl der Schlüssel aus im Überlaufbereich. Dann sind Schlüssel auf ihrer Hausadresse gespeichert. Sei Für die erfolgreiche Suche ist der Aufwand Prof. Dr. Dietmar Seipel 359 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Man kann zeigen: und Deshalb gilt: Prof. Dr. Dietmar Seipel 360 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Für die erfolglose Suche ist der Aufwand Hier kann man zeigen Prof. Dr. Dietmar Seipel 361 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 6.3.2 Überlauf mit Verkettung Hier wird für jede Hausadresse ein spezieller Überlaufbereich eingerichtet, i.a. als lineare Liste. Hausadressen Überlaufbereich . . . . . . Prof. Dr. Dietmar Seipel 362 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Prinzip der Speicherung: , so ist kein Schlüssel in Ist gespeichert. Ansonsten ist genau ein Synonym in gespeichert und alle , , sind im Überlaufbereich zu anderen Synonyme gespeichert. Aufwand für die Wörterbuchoperationen: Prof. Dr. Dietmar Seipel 363 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Average Case Suchaufwand: Gleichverteilung auf : wird durch die Hashfunktion Jede Adresse gleichen Belegungswahrscheinlichkeit belegt: mit der für alle Entscheidend ist der Erwartungswert für die Länge der Überlaufbereiche, d.h. die Größe der Synonymklassen. , Die Anzahlen , sind identisch verteilte Zufallszahlen mit Prof. Dr. Dietmar Seipel 364 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Für der Erwartungswert für die Größe der Synonymklassen gilt dann: Wir unterstellen nun noch gleiche Suchhäufigkeiten für alle für alle : erfolgreiche Suche, : erfolglose Suche Prof. Dr. Dietmar Seipel 365 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Dann erhalten wir für erfolgreiche Suche: denn es muss die Hausadresse durchsucht werden und im Mittel dann noch der halbe Überlaufbereich. , folgt: , d.h. Unter der Voraussetzung Prof. Dr. Dietmar Seipel 366 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Für erfolglose Suche erhalten wir: denn es muss die komplette Synonymklasse (Hausadresse und Überlaufbereich) durchsucht werden. Auch hier gilt für Fazit: Im Durchschnitt ist das Hashing mit “Überlauf mit Verkettung” für die Wörterbuchoperationen recht gut geeignet (“konstanter Aufwand”). Im schlechtesten Fall ist es dagegen viel schlechter als zu logarithmischer Höhe balancierte Bäume (“linearer Aufwand” vs. “logarithmischer Aufwand”). Prof. Dr. Dietmar Seipel 367 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 6.3.3 Offener Hash (Open Adressing) wird eine Permutation Für jeden Schlüsselwert aller Hausadressen angegeben. der Menge wird unter der ersten freien Adresse Ein einzufügender Schlüsselwert abgelegt. Bezeichnung: ist die Hausadresse von . heißen Ausweichadressen. Prof. Dr. Dietmar Seipel 368 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Lineares Suchen (Linear Probing) : Sei Beispiel: ALLE AUTO BALL BAUM DAMM DOSE HASH OPEN Z A B Prof. Dr. Dietmar Seipel 369 Praktische Informatik I – Algorithmen und Datenstrukturen A ALLE B BALL C AUTO D BAUM E DAMM F DOSE G Prof. Dr. Dietmar Seipel H .. . HASH O .. . OPEN Wintersemester 2006/07 Einfügereihenfolge: ALLE, BALL, AUTO, HASH, BAUM, DAMM, DOSE, OPEN nächster einzufügender Schlüsel: ABER 370 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Primäres Clustering Lineares Sondieren ist zwar einfach, es gibt aber auch Nachteile: Lange, schon besetzte Teile, haben durch die lineare Sondierungsfolge eine größere Tendenz zu wachsen als kurz besetzte. Außerdem werden die Lücken zwischen längeren Teilstücken geschlossen, so daß noch größere Teilstücke entstehen (to coalesce). Dieses Ereignis der primären Häufung (primary clustering), verschlechtert die Effizienz sehr stark, wenn der Belegungsfaktor gegen geht. Nach kontinuierlicher Belegung eines Teilraumes des Adressraumes müssen beim Einfügen mit der Ausweichadresse auch die Ausweichadressen , , erfolglos aufgesucht werden. Prof. Dr. Dietmar Seipel 371 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Average Case Suchaufwand geeignet) ( für für Prof. Dr. Dietmar Seipel 372 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Doppel–Hash (Double Hashing) Der Nachteil des primären Clustering kann vermieden werden, wenn man in der Folge der Folge der die Inkremente Ausweichadressen vom Schlüssel abhängig macht. Dazu benutzt man eine zweite Hashfunktion welche Inkrementfunktion genannt wird. Die Permutation der Ausweichadressen für ist dann für mit Prof. Dr. Dietmar Seipel 373 Praktische Informatik I – Algorithmen und Datenstrukturen Sei Wintersemester 2006/07 der größte gemeinsame Teiler zweier natürlicher Zahlen . Z.B. Lemma: ist eine Permutation von . und sind teilerfremd). (d.h. ein Vielfaches von g.d.w. Prof. Dr. Dietmar Seipel Es gilt ist. 374 Praktische Informatik I – Algorithmen und Datenstrukturen : Beweis: Seien Wintersemester 2006/07 Falls , so gilt: . in diesem Fall eine Permutation von Also ist : , aber , so gilt für Falls . Prof. Dr. Dietmar Seipel in diesem Fall keine Permutation von Also ist 375 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Beim Doppel–Hashing fordert man deshalb für alle : Die Doppel–Hash–Verfahren erwiesen sich in der Praxis als ausgezeichnete Verfahren. Bei allen offenen Hashverfahren hängt die Suchzeit von der Reihenfolge des Ladens der Schlüsselwerte ab – genau wie bei Suchbäumen auch. Prof. Dr. Dietmar Seipel 376 Praktische Informatik I – Algorithmen und Datenstrukturen Wintersemester 2006/07 Beispiel: eine Primzahl. 1. Sei Dann ist d.h. , eine Zweierpotenz. ungerade, kann gewählt werden. , 2. Sei Dann gilt d.h. , für alle , kann (fast) beliebig gewählt werden. , 3. Seien und Primzahl–Zwillinge (z.B. Dann kann man wählen: ). für alle Prof. Dr. Dietmar Seipel Es gilt dann . 377