85 votes

MurmurHash - qu'est-ce que c'est ?

J'ai essayé d'obtenir une compréhension de haut niveau de ce que les MurmureHash ne.

J'ai lu une description de base, mais je n'ai pas encore trouvé une bonne explication sur le moment où il faut l'utiliser et pourquoi. Je sais qu'il est très rapide, mais je voudrais en savoir un peu plus.

J'ai posé une question connexe question sur la façon dont je pourrais intégrer un UUID dans un ensemble de bits Redis, et quelqu'un a suggéré d'utiliser MurmurHash. Cela fonctionne, mais j'aimerais comprendre les risques et les avantages.

121voto

Didier Spezia Points 23333

Murmur est une famille de bonnes fonctions de hachage à usage général, adaptées à un usage non cryptographique. Comme l'indique Austin Appleby, MurmurHash offre les avantages suivants :

  • simple (en termes de nombre d'instructions d'assemblage générées).
  • bonne distribution (tests du chi carré réussis pour pratiquement tous les jeux de clés et toutes les tailles de godets).
  • bon avalanche (biais maximal de 0,5 %).
  • bonne résistance aux collisions (réussit le test de torture frog.c de Bob Jenkin). Aucune collision possible pour des clés de 4 octets, pas de petites différences (de 1 à 7 bits)).
  • excellentes performances sur le matériel Intel/AMD, bon compromis entre la qualité du hachage et la consommation de l'unité centrale.

Vous pouvez certainement l'utiliser pour hacher les UUID (comme toute autre fonction de hachage avancée) : CityHash, Jenkins, Paul Hsieh, etc ...). Or, un jeu de bits Redis est limité à 4 GB bits (512 MB). Vous devez donc réduire 128 bits de données (UUID) à 32 bits (valeur hachée). Quelle que soit la qualité de la fonction de hachage, il y aura des collisions.

L'utilisation d'une fonction de hachage technique comme Murmur maximisera la qualité de la distribution et minimisera le nombre de collisions, mais elle n'offre aucune autre garantie.

Voici quelques liens comparant la qualité des fonctions de hachage à usage général :

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/

-3voto

daemon Points 1

MurmurHash peut renvoyer une valeur négative, valeur originale bit ET contre 0x7fffffff。c'est-à-dire Lorsque l'entrée est positive, la valeur originale est retournée. Lorsque le nombre saisi est négatif, la valeur positive renvoyée est le bit de la valeur originale ET contre 0x7fffffff qui n'est pas sa valeur absolue. note:La valeur de retour de MurmurHash ne peut pas être de longueur fixe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X