web-dev-qa-db-fra.com

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

J'ai essayé d'obtenir une compréhension de haut niveau de ce que fait MurmurHash .

J'ai lu une description de base mais je n'ai pas encore trouvé de bonne explication sur le moment de l'utiliser et pourquoi. Je sais que c'est très rapide mais je veux en savoir un peu plus.

J'ai demandé à une --- question comment je pouvais adapter un UUID dans un jeu de bits Redis, et quelqu'un a suggéré d'utiliser MurmurHash. Cela fonctionne, mais j'aimerais comprendre les risques/avantages.

58
seedhead

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

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

Vous pouvez certainement l'utiliser pour hacher des UUID (comme toutes les autres fonctions de hachage avancées: CityHash, Jenkins, Paul Hsieh's, etc ...). Désormais, un jeu de bits Redis est limité à 4 Go (512 Mo). 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 conçue 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/

87
Didier Spezia

Je sais que je réponds tard, mais cela peut aider quelqu'un d'autre ...

Murmure haché est une fonction non cryptographique fonction de hachage qui est utilisée pour recherches basées sur le hachage , elle utilise 3 opérations de base dans leur ensemble Multiplier , Rotation et XOR . Il utilise plusieurs constantes qui sont juste là pour en faire une bonne fonction de hachage en passant 2 tests de base.

  1. test d'avalanche
  2. Test du chi carré

Vous pouvez regarder cette vidéo, que j'ai faite, pour l'explication détaillée de Murmur Hashing.

8
Sahib Yar