Bei der Verwendung von adler32() als Hashfunktion sollte man seltene Kollisionen erwarten.
Wir können die genaue Wahrscheinlichkeitsberechnung für Kollisionen durchführen, aber grob gesagt,
da es sich um eine 32-Bit-Hashfunktion handelt, sollten auf einer Stichprobe von einigen tausend Elementen nicht viele Kollisionen auftreten.
Dies ist kaum der Fall.
Hier ist ein Beispiel: Lassen Sie uns Zeichenfolgen nehmen, die ein Datum in der Mitte enthalten, so etwas wie
"Einige Präfixtext " + Datum + " etwas Postfixtext."
wobei das Datum im Format JJJJ-MM-TT ist und wir über das Jahr 2012 iterieren.
In diesem Beispiel gibt es 91 Kollisionen!
Noch schlimmer: Es gibt 7 Fälle, in denen sich 3 Daten kollidiert haben.
Wie kann es sein, dass eine so häufig verwendete Hashfunktion so schlecht abschneidet?
Oder habe ich etwas übersehen?
Hier sind die detaillierten Ergebnisse des obigen Beispiels:
0x592a0f1f: 2012-01-30, 2012-02-02, 2012-10-21
0x592b0f1f: 2012-02-11, 2012-10-30, 2012-11-02
0x593d0f20: 2012-01-31, 2012-02-03, 2012-10-22
0x593e0f20: 2012-02-12, 2012-10-31, 2012-11-03
0x59410f20: 2012-03-11, 2012-11-30, 2012-12-02
0x59560f21: 2012-03-30, 2012-04-02, 2012-12-21
0x59690f22: 2012-03-31, 2012-04-03, 2012-12-22
(und so weiter...)