6 Hashverfahren zum Namen Hash : engl für zerhacken gestreute Speicherung 61 Grundbegriffe Wir unterstellen ein direkt adressierbares Speichermedium mit einer Menge von Adressen, dem Adressraum Die Datensätze werden durch Schlüsselwerte repräsentiert Es gibt eine universelle Schlüsselwertmenge Zu jedem Zeitpunkt ist immer eine Teilmenge gespeichert Prof Dr Dietmar Seipel 336
Die Zuordnung eines Schlüsselwertes auf einen Speicherplatz erfolgt mittels einer arithmetischen Funktion genannt Hashfunktion: heißt Hausadresse von Prof Dr Dietmar Seipel 337
Beispiel: 4 1 19 18 10 f 18 4 10 19 Prof Dr Dietmar Seipel 338
Standardannahmen für Hashfunktionen 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 gespeicherten Menge von Schlüsselwerten auf einen Speicherplatz erfolgt unabhägig von der aktuell Ist injektiv, so heißt Hashfunktion Meist gilt, und direkt, anderenfalls heißt auch eigentliche ist eine eigentliche Hashfunktion Prof Dr Dietmar Seipel 339
Beispiel: (i) direkt (ii) eigentlich Prof Dr Dietmar Seipel 340
Synonyme Zwei unterschiedliche Schlüsselwerte dieselbe Hausadresse Die Äquivalenzklassen haben heißen Synonyme, wenn sie für heißen Synonymklassen, und sie bilden eine disjunkte Zerlegung von Prof Dr Dietmar Seipel 341
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
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
Kollisionswahrscheinlichkeit Man sollte die Hashfunktion so wählen, daß die Kollisionswahrscheinlichkeit möglichst gering wird Allerdings ist die Wahrscheinlichkeit für eine Kollision ia recht groß Das Auftreten mehrerer Kollisionen ist unwahrscheinlicher Prof Dr Dietmar Seipel 344
Geburtstags Paradoxon: Auf einer Party treffen sich zufällig Personen: Ihre Geburtstage stochastisch unabhängig: seien gleichverteilt über das Jahr und Prof Dr Dietmar Seipel 345
Frage: Wie groß ist die Wahrscheinlichkeit, dass keine zwei Personen am gleichen Tag Geburtstag haben? (keine Kollision) Zahl der möglichen Fälle: ( Ziehen mit Zurücklegen ) Zahl der günstigen Fälle: Zurücklegen ) ( Ziehen ohne Schon für gilt Für ist der Belegungsfaktor noch sehr niedrig dagegen immer Prof Dr Dietmar Seipel 346
Hashfunktion 62 Gebräuchliche Hashfunktionen 621 Division mit Rest Sei der Adressraum mit mit einer Basisadresse, meist Bemerkung: Prof Dr Dietmar Seipel 347
Beispiel: Sei dh Dann erhalten wir für und, und sei die nicht injektive Funktion, Belegungsfaktor Prof Dr Dietmar Seipel 348
Stellen von Ist Modulo Berechnung dem Abschneiden der letzten Dezimaldarstellung ( Sectioning ) eine Zehnerpotenz, so entspricht die bei Aufgrund der häufig benutzten Dezimalklassifizierung und der Konkatenation von Teilschlüsseln zu Gesamtschlüsseln ist allerdings die Kollisionsgefahr beim Sectioning recht hoch Ist die Zahl der zu speichernden Schlüsselwerte zeitlich relativ konstant, so hat es sich praktisch bewährt für die Größe des Adressraums eine Primzahl zu wählen (Dann gilt ) Prof Dr Dietmar Seipel 349
622 Basistransformation Jeder Schlüsselwert läßt sich schreiben als Dezimaldarstellung: Wir wählen nun eine neue Basis : Prof Dr Dietmar Seipel 350
Beispiel: Die Basistransformation ist für Kollisionen injektiv, dh man erhält keine Man kann die Basistransformation mit der Division mit Rest kombinieren: Prof Dr Dietmar Seipel 351
623 Multiplikationsmethode Für den Adressraum die Hashfunktion mit: und eine reelle Zahl betrachten wir Dabei ist jeweils der gebrochene Anteil von Nach einem Satz von Vera Turán Sós sind diese gebrochenen Anteile gleichmäßig im Intervall verstreut, falls als irrationale Zahl gewählt wird Von allem Zahlen, führt der goldene Schnitt zur gleichmäßigsten Verteilung ( Fibonacci Hashing) Prof Dr Dietmar Seipel 352
Beispiel: Fibonacci Hashing für ist Permutation von Prof Dr Dietmar Seipel 353
63 Kollisionsstrategien 631 Überlaufhash Hier wird ein Überlaufbereich für alle Hausadressen eingerichtet Dieser wird ia durch eine lineare Liste realisiert Hausadressen Überlaufbereich Prof Dr Dietmar Seipel 354
Sei Hausadresse die Menge der gespeicherten Synonyme zur Ist, so ist kein Schlüssel in gespeichert Ansonsten ist genau ein Synonym in gespeichert, und alle anderen Synonyme,, im Überlaufbereich Aufwand für die Wörterbuchoperationen: Im schlechtesten Fall sind alle gespeicherten Schlüsselwerte Synonyme dh sie haben dieselbe Hausadresse Dann liegen Schlüssel im Überlaufbereich Prof Dr Dietmar Seipel 355
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
zuerst in Suchen nach Berechne die Hausadresse Ist, so ist (erfolglose Suche) Ansonsten suche und dann im Überlaufbereich Einfügen von Ist, so speichere auf seiner Hausadresse Ansonsten suche zuerst in Falls gefunden wurde, so speichere nicht im Überlaufbereich (Falls gefunden wurde, so ist nichts zu tun) und dann im Überlaufbereich Prof Dr Dietmar Seipel 357
Löschen von Suche den Schlüssel Falls gefunden wird, dh, so entferne wie folgt: Ist auf seiner Hausadresse gespeichert, dh so ersetze, auf dh mit durch einen synonymen Schlüssel aus dem Überlaufbereich Das Löschen im Überlaufbereich erfordert keine Folgeaktionen Falls nicht gefunden wird, dh, so ist nichts zu tun Prof Dr Dietmar Seipel 358
Average Case für Suche: Wir setzen Gleichverteilung auf voraus, dh jeder Schlüssel Wahrscheinlichkeit die Hausadresse für alle hat mit Sei die Anzahl der Schlüssel aus im Überlaufbereich Dann sind Schlüssel auf ihrer Hausadresse gespeichert Für die erfolgreiche Suche ist der Aufwand Prof Dr Dietmar Seipel 359
und Man kann zeigen: Deshalb gilt: Prof Dr Dietmar Seipel 360
Für die erfolglose Suche ist der Aufwand Hier kann man zeigen Prof Dr Dietmar Seipel 361
632 Überlauf mit Verkettung Hier wird für jede Hausadresse ein spezieller Überlaufbereich eingerichtet, ia als lineare Liste Hausadressen Überlaufbereich Prof Dr Dietmar Seipel 362
Prinzip der Speicherung: Ist, so ist kein Schlüssel in gespeichert Ansonsten ist genau ein Synonym in gespeichert und alle anderen Synonyme, gespeichert, sind im Überlaufbereich zu Aufwand für die Wörterbuchoperationen: Prof Dr Dietmar Seipel 363
Average Case Suchaufwand: Gleichverteilung auf : Jede Adresse wird durch die Hashfunktion gleichen Belegungswahrscheinlichkeit belegt: mit der für alle Entscheidend ist der Erwartungswert für die Länge der Überlaufbereiche, dh die Größe der Synonymklassen Die Anzahlen,, sind identisch verteilte Zufallszahlen mit Prof Dr Dietmar Seipel 364
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
Dann erhalten wir für erfolgreiche Suche: denn es muss die Hausadresse durchsucht werden und im Mittel dann noch der halbe Überlaufbereich Unter der Voraussetzung, dh, folgt: Prof Dr Dietmar Seipel 366
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
633 Offener Hash (Open Adressing) Für jeden Schlüsselwert wird eine Permutation der Menge aller Hausadressen angegeben Ein einzufügender Schlüsselwert abgelegt wird unter der ersten freien Adresse Bezeichnung: ist die Hausadresse von heißen Ausweichadressen Prof Dr Dietmar Seipel 368
AUTO BAUM DOSE B Z OPEN A ALLE Lineares Suchen (Linear Probing) Sei : Beispiel: BALL DAMM HASH Prof Dr Dietmar Seipel 369
A B C D E F G H O ALLE BALL AUTO BAUM DAMM DOSE HASH OPEN Einfügereihenfolge: ALLE, BALL, AUTO, HASH, BAUM, DAMM, DOSE, OPEN nächster einzufügender Schlüsel: ABER Prof Dr Dietmar Seipel 370
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
Average Case Suchaufwand ( geeignet) für für Prof Dr Dietmar Seipel 372
Doppel Hash (Double Hashing) Der Nachteil des primären Clustering kann vermieden werden, wenn man die Inkremente in der Folge Ausweichadressen vom Schlüssel abhängig macht Dazu benutzt man eine zweite Hashfunktion der Folge der welche Inkrementfunktion genannt wird Die Permutation der Ausweichadressen für ist dann mit für Prof Dr Dietmar Seipel 373
Sei ZB der größte gemeinsame Teiler zweier natürlicher Zahlen Lemma: ist eine Permutation von (dh sind teilerfremd) und Es gilt gdw ein Vielfaches von ist Prof Dr Dietmar Seipel 374
Beweis: Seien : Falls, so gilt: Also ist Falls in diesem Fall eine Permutation von, so gilt für :, aber Also ist in diesem Fall keine Permutation von Prof Dr Dietmar Seipel 375
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
Beispiel: 1 Sei eine Primzahl Dann ist dh kann (fast) beliebig gewählt werden, für alle, 2 Sei,, eine Zweierpotenz Dann gilt ungerade, dh kann gewählt werden 3 Seien und Primzahl Zwillinge (zb, ) Dann kann man wählen: Es gilt dann für alle Prof Dr Dietmar Seipel 377