2012-05-29 14 views
11

Ich suche nach einer Hochgeschwindigkeits-Hashfunktion mit guter (d. H. Nahezu gleichförmiger) Verteilung zur Verwendung in einer Hashtabellenimplementierung.Hashing-Algorithmus für Hashtabellenimplementierung

Die Hash-Tabelle wird ausschließlich zum Speichern von Werten mit einem Ganzzahlschlüssel verwendet.

Kann ich nur die unteren paar Bits der ganzen Zahl als Hash verwenden?

z.B. int key = n & 15; und erstellen Sie ein Array mit 16 Plätzen, um sie zu speichern.

Irgendwelche Empfehlungen?

+12

Es gibt keine perfekte Hash-Funktion. Wenn Sie jedoch einige Algorithmen mit entsprechendem Quellcode möchten, sehen Sie hier: http://partow.net/programming/hashfunctions/index.html –

+0

Die niedrigsten Bits zu nehmen ist wahrscheinlich das Schlimmste, was zu tun ist. (Aber: es hängt alles von dem Wertebereich ab, den Sie in Ihrer int-Taste erwarten) Versuchen Sie, auch die oberen Bits zu mischen, oder multiplizieren Sie mit einer ausreichend großen (ungerade, Primzahl) Zahl. Wissen was zu erwarten ist und messen Sie es. – wildplasser

+0

Geben Sie Ihren Kommentar als Antwort und ich werde es akzeptieren. –

Antwort

3

können Sie hier sehen xxhash

Ihre genannte Hash-Funktion ist sehr schnell, aber es ist auch sehr schlecht. Wenn Sie eine "dumme" Hash-Funktion möchten, können Sie vielleicht den Modul betrachten.

Beispiel:

int key = item % size_of_hash_table 
+2

Warum ist "es" schlecht? –

Verwandte Themen