54 votes

Quelle est la meilleure fonction de hachage 32 bits pour les chaînes courtes (noms de balises) ?

Quelle est la meilleure fonction de hachage 32 bits pour les chaînes de caractères relativement courtes ?

Les chaînes sont des noms de balises qui se composent de lettres anglaises, de chiffres, d'espaces et de quelques caractères supplémentaires ( # , $ , . , ...). Par exemple : Unit testing , C# 2.0 .

Je recherche le "meilleur", c'est-à-dire le "minimum de collisions". Les performances ne sont pas importantes pour mes objectifs.

1 votes

2 votes

Pas tout à fait, car ma question est plus spécifique en termes de taille de hachage et ignore les performances. En outre, je ne cherche pas seulement à a Je sais qu'il existe des fonctions CRC32 et FNV32, mais laquelle est la meilleure pour mon domaine ?

0 votes

Votre liste de balises est-elle fixée à un ensemble de chaînes ou s'enrichira-t-elle de manière dynamique au fil du temps ?

1voto

Ritsaert Hornstra Points 3751

Vous pourriez vérifier le murmurhash2. Il est rapide, aussi pour les petites cordes, et a une bonne étape finale de mixage, donc il est même bien mixé pour les très petites cordes.

0voto

S'il est rare que les utilisateurs ajoutent de nouveaux tags, vous pouvez alors utiliser un hachage parfait ( http://en.wikipedia.org/wiki/Perfect_hash_function ) qui est recalculé à chaque fois qu'une nouvelle balise est ajoutée. Bien entendu, si l'on ne connaît pas le problème que l'on cherche vraiment à résoudre, on ne peut que deviner ce que l'on pourrait faire.

0voto

Robert Yi Jiang Points 679

Si votre programme doit communiquer avec d'autres systèmes, il est préférable d'utiliser un algorithme bien connu. Le moyen le plus simple et le plus rapide est en utilisant les plusieurs premiers caractères du hachage md5 . Vous n'avez pas besoin de passer des heures ou des jours à inventer des roues dans votre projet.

L'inconvénient est que les risques de collisions sont beaucoup plus élevés. Cependant, si votre hachage est destiné à une session horodatée, ou à une tâche circulaire de courte durée. Il n'y a aucun problème à utiliser cela.

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