Murmur ist eine Familie guter Allzweck-Hashing-Funktionen, die für die nicht kryptografische Verwendung geeignet sind. Wie von Austin Appleby angegeben, bietet MurmurHash die folgenden Vorteile:
- einfach (in Bezug auf die Anzahl der generierten Montageanweisungen).
- Gute Verteilung (Bestehen von Chi-Quadrat-Tests für praktisch alle Keysets und Bucket-Größen.
- gutes Lawinenverhalten (maximale Vorspannung von 0,5%).
- Gute Kollisionsbeständigkeit (besteht Bob Jenkins frog.c-Foltertest. Keine Kollisionen für 4-Byte-Schlüssel möglich, keine kleinen (1- bis 7-Bit-) Differentiale).
- Hervorragende Leistung auf Intel / AMD-Hardware, guter Kompromiss zwischen Hash-Qualität und CPU-Verbrauch.
Sie können es sicherlich zum Hashing von UUIDs verwenden (wie alle anderen erweiterten Hashing-Funktionen: CityHash, Jenkins, Paul Hsiehs usw.). Jetzt ist ein Redis-Bitset auf 4 GB Bits (512 MB) begrenzt. Sie müssen also 128 Bit Daten (UUID) auf 32 Bit (Hash-Wert) reduzieren. Unabhängig von der Qualität der Hashing-Funktion kommt es zu Kollisionen.
Die Verwendung einer ausgereiften Hash-Funktion wie Murmur maximiert die Qualität der Verteilung und minimiert die Anzahl der Kollisionen, bietet jedoch keine andere Garantie.
Hier sind einige Links, die die Qualität von Allzweck-Hash-Funktionen vergleichen:
http://www.azillionmonkeys.com/qed/hash.html
http://www.strchr.com/hash_functions
http://blog.aggregateknowledge.com/2011/12/05/choosing-a-good-hash-function-part-1/
http://blog.aggregateknowledge.com/2011/12/29/choosing-a-good-hash-function-part-2/
http://blog.aggregateknowledge.com/2012/02/02/choosing-a-good-hash-function-part-3/
MurmurHash kann ein negativer Wert sein , ursprüngliches Wertbit UND gegen 0x7fffffff。das ist der Wert & 0x7fffffff. Wenn die Eingabe positiv ist, wird der ursprüngliche Wert zurückgegeben. Wenn die Eingangsnummer negativ ist, ist der zurückgegebene positive Wert das ursprüngliche Wertbit UND gegen 0x7fffffff, was nicht der absolute Wert ist. Hinweis: Der Rückgabewert von MurmurHash kann nicht auf die Länge festgelegt werden.
quelle