Download - Hashing
![Page 1: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/1.jpg)
HashingStreuwertfunktionen
Referat von Kim Schröer – Intelligente Dateisysteme WS13/14
![Page 2: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/2.jpg)
- Übersicht -
• Hashingfunktionen• Ein einfaches Hashing-Schema• Kollisionen• Ein einfacher Hashing-Algorithmus• Progressiver Overflow• Buckets• Löschen von Datensätzen
![Page 3: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/3.jpg)
Hashfunktionen
produzieren immer dann eine Adresse, wenn ein Schlüssel gegeben wird
![Page 4: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/4.jpg)
Ein einfaches Hashing-Schema
• h(k) = a• Bsp: LOWELL
• Name ASCII (2 B.) Product addressLOWELL 76 79 76 x 79 = 6004 004
• h(LOWELL) = 4• home address = 4
![Page 5: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/5.jpg)
Ein einfaches Hashing-Schema
![Page 6: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/6.jpg)
Kollisionen
LOWELL Adresse = 4
OLIVER Adresse = 4
Synonyme
![Page 7: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/7.jpg)
Kollisionen
![Page 8: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/8.jpg)
Kollisionen (Vermeidung)
Eine perfekte Hash-Funktion
Kollisionen reduzieren:1. Verteilen der Datensätze2. Extra Speicher verwenden3. mehr als einen Datensatz einer einzelnen
Adresse zuweisen
![Page 9: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/9.jpg)
Ein einfacher Hash-Algorithmus
• Schritt 1:
LOWELL = 76 79 87 69 76 76 32 32 32 32 32 32
L O W E L L |<- Blanks ->|
![Page 10: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/10.jpg)
Ein einfacher Hashing-Algorithmus
• Schritt 2:76 79 | 87 69 | 76 76 | 32 32 | 32 32 | 32 327679 + 8769 + 7676 + 3232 + 3232 + 3232 = 33820
Bsp: Grenze von 19937:7679 + 8769 -> 16448 -> 16448 mod 19937 -> 1644816448 + 7676 -> 24124 -> 24124 mod 19937 -> 41874187 + 3232 -> 7419 -> 7419 mod 19937 -> 74197419 + 3232 -> 10651 -> 10651 mod 19937 -> 10651
10651 + 3232 -> 13883 -> 13883 mod 19937 -> 13883
![Page 11: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/11.jpg)
Ein einfacher Hashing-Algorithmus
• Schritt 3:
Bsp: 100 Adressen (0-99)
a = s mod n a = 13883 mod 100
a = 83
![Page 12: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/12.jpg)
Progressiver Overflow
![Page 13: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/13.jpg)
Progressiver Overflow
![Page 14: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/14.jpg)
Buckets
Adresse mit mehr als einem Datensatz
Überlauf von Datensätzen viel seltener
![Page 15: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/15.jpg)
Aufbau eines Buckets
![Page 16: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/16.jpg)
Löschen von Datensätzen
![Page 17: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/17.jpg)
Löschen von Datensätzen
• Irgendwann sehr viele Tombstones• Idee:
Algorithmus überprüft, ob die DS, die nach einem Tombstone kommen, nicht doch in ihre Home-Addresse passen.
Auch die Suchlänge verkürzt sich
![Page 18: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/18.jpg)
Andere Techniken zur Vermeidung von Kollisionen
Double Hashing
![Page 19: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/19.jpg)
Noch Fragen?!
![Page 20: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/20.jpg)
Vielen Dank für die Aufmerksamkeit!
![Page 21: Hashing](https://reader034.vdokument.com/reader034/viewer/2022051821/56815a5e550346895dc79429/html5/thumbnails/21.jpg)
Bsp: einfacher Hash-Algorithmus
int Hash (char key[12], int maxAddress){
int sum = 0;for (int j = 0; j < 12; j += 2)
sum = (sum * 100 * key[j] * key[j+1]) % 19937;return sum % maxAddress;
}
Die Funktion hash verwendet die folding and prime number division, um eine hash Adresse für einen 12 char string.