Hashing: Idee und Buckets
Hashing bildet Schlüssel auf Bucketindizes ab. Erwartete Zugriffszeit ist $O(1)$, wenn die Hashfunktion streut und die Tabelle nicht überfüllt ist.
Schlechte Hashfunktionen oder extreme Lastfaktoren führen zu Ketten und $O(n)$-Verhalten.
$$i = h(k) \bmod m$$
Index statt Doppelsschleife: Two Sum [1].
Wo gebraucht
Dictionaries, Caches, Datenbank-Hash-Joins, Deduplizierung, Streuen von Shards. Hashing ist der Standardweg von Key zu Slot.
Vertiefung
Eine Hashtabelle bildet einen Schlüssel zunächst auf einen ganzzahligen Hashwert und daraus auf einen Tabellenplatz ab. Ein Bucket ist der Bereich, in dem Einträge mit demselben berechneten Index verwaltet werden. Gute Verteilung reduziert die durchschnittliche Zahl der dort zu prüfenden Schlüssel.
Der Hashwert ersetzt den Gleichheitsvergleich nicht. Er grenzt nur die Kandidaten ein; innerhalb des Buckets muss weiterhin die definierte Schlüsselgleichheit geprüft werden. Die erwartete konstante Zugriffszeit setzt eine geeignete Hashfunktion und eine kontrollierte Belegung voraus.
Schwierigkeitsstufen
- Aus Hashwert und Tabellenlänge einen gültigen Index berechnen.
- Erklären, warum Kollisionen trotz guter Verteilung unvermeidbar sind.
- Eingabemuster beurteilen, die viele Schlüssel auf wenige Buckets konzentrieren.
Fallstricke
Der Restoperator kann bei negativen Hashwerten einen negativen Wert liefern. Ausserdem ist ein identischer Hash kein Beweis für identische Schlüssel, sondern nur ein Anlass für den eigentlichen Vergleich.
Sources
Tasks
Card Info
- Topic: Algorithmen und Datenstrukturen
- Difficulty: Beginner
- Completed: 0 users