47 votes

Une fonction de hachage minimale pour C?

Je ne peux pas utiliser boost:hash parce que j'ai coller avec des C et ne peut pas utiliser le C++.

Mais, j'ai besoin de hachage d'un grand nombre (10K à 100k) de jetons de chaînes (de 5 à 40 octets de longueur), de sorte que la recherche au sein de ceux qui sont les plus rapides.

MD5, SHA1 ou tout long de la fonction de hachage semble trop lourd pour une tâche simple, je ne fais pas de la cryptographie. Il y a en Plus du stockage et de calcul des coûts.

Donc, ma question:

  1. Ce qui pourrait être le plus simple algorithme de hachage qui va assurer la prévention des collisions dans la plupart des cas pratiques.

  2. Combien de bits à utiliser pour la valeur de hachage? Je suis en train d'élaborer pour les systèmes 32 bit. Ne algorithme de hachage en Perl/Python utiliser 32 bits hachages de trop? Ou dois-je sauter à 64 ans?

  3. Concernant la mise en place de tables de hachage en commun, les langages de script: le contrôle de mise en œuvre pour les collisions, ou puis-je éviter que la partie purement et simplement?

24voto

gnud Points 26854

Vous pouvez trouver une bonne fonction de hachage (et rapide) et une lecture intéressante sur http://www.azillionmonkeys.com/qed/hash.html

La seule fois où vous ne devriez pas vérifier les collisions, c'est si vous utilisez un hachage parfait - une bonne table de recherche à l'ancienne, comme gperf .

13voto

arul Points 10719

1 / Voici un bel aperçu des fonctions de hachage connues les plus notables.

2 / 32bits devrait fonctionner très bien.

3 / Vous devez toujours vérifier les collisions, sauf si vous voulez écrire une table de hachage drôle :)

8voto

TStamper Points 17163

Une fonction de hachage générale pour la recherche de table de hachage . Il spécifie NE PAS utiliser à des fins cryptographiques , mais puisque vous avez spécifié que vous n'avez aucune intention pour cela, alors vous devriez être d'accord.

Il comprend un aperçu des fonctions de hachage à essayer

5voto

amo-ej1 Points 1142

Si vous utilisez un système posix et que vous vous en tenez au C simple, j'utiliserais simplement ce que le système a déjà à offrir. man 3 hcreate vous offre tous les détails ou vous pouvez trouver une version en ligne ici http://linux.die.net/man/3/hcreate

3voto

Bastien Léonard Points 18404

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