Divisionsrestmethode

Die Divisionsrestmethode (siehe auch Modulo) liefert eine Hashfunktion.

Die Funktion lautet: h ( k ) = k mod m {\displaystyle h(k)=k{\bmod {m}}}

m {\displaystyle m} ist die Größe der Hashtabelle.

Eigenschaften

  1. Die Hash-Funktion kann sehr schnell berechnet werden
  2. Die Wahl der Tabellengröße m {\displaystyle m} beeinflusst die Kollisionswahrscheinlichkeit der Funktionswerte von h {\displaystyle h} .

Für die meisten Eingabedaten ist zum Beispiel die Wahl einer Zweierpotenz für m {\displaystyle m} , also m = 2 i {\displaystyle m=2^{i}} , ungeeignet, da dies der Extraktion der i {\displaystyle i} -niedrigstwertigen Bits von k {\displaystyle k} entspricht, so dass alle höherwertigen Bits bei der Hash-Berechnung ignoriert werden.

Für praxisrelevante Anwendungen liefert die Wahl einer Primzahl für m {\displaystyle m} , welche keine Mersenne-Primzahl ist, eine geringe Anzahl von zu erwartenden Kollisionen bei vielen Eingabedatenverteilungen.[1]

Hashing von Zeichenketten

Zeichenketten können mit der Divisionsmethode gehasht werden, indem sie in ganze Zahlen zur Basis b {\displaystyle b} umgewandelt werden, wobei b {\displaystyle b} die Zeichensatzgröße bezeichnet.

Um Integer-Überläufe zu vermeiden, kann für die Berechnung des Hashwertes bei Schlüsseln das Horner-Schema angewendet werden. Das folgende Beispiel zeigt eine Berechnung eines Hashwertes für eine 7-Bit-ASCII-Zeichenkette s {\displaystyle s} .

k mod m = ( ( s 1 128 + s 2 ) mod m ) 128 + s 3 ) mod m ) 128 + + s l 1 ) mod m ) 128 + s l ) mod m {\displaystyle k{\bmod {m}}=(\ldots (s_{1}\cdot 128+s_{2}){\bmod {m}})\cdot 128+s_{3}){\bmod {m}})\cdot 128+\ldots +s_{l-1}){\bmod {m}})\cdot 128+s_{l}){\bmod {m}}}

Somit kann als Zwischenergebnis maximal ( m 1 ) 128 + 127 {\displaystyle \left(m-1\right)\cdot 128+127} auftreten.

Dargestellt in Pseudocode:

Parameter: natürliche Zahlen i, h=0; Feld s
 for i = 0 to i < länge_von(s)
	h = (h * 128 + s[i]) mod m;
Ergebnis: h.

Die Multiplikation mit 128 = 2^7 entspricht der Links-Bit-Shift-Operation << 7.

Literatur

  • Donald E. Knuth: The Art of Computer Programming. Band 3: Sorting and Searching. 2nd edition. Addison-Wesley, Upper Saddle River NJ unter anderem 1998, ISBN 0-201-89685-0, S. 515.

Einzelnachweise

  1. Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, Clifford Stein: Introduction to Algorithms. 2. Auflage. MIT Press unter anderem, Cambridge MA unter anderem 2001, ISBN 0-262-03293-7, S. 231.