Raison pour 5381 nombre de DJB fonction de hachage?
Quelqu'un peut me dire pourquoi le nombre 5381 est utilisé dans DJB fonction de hachage ?
DJB fonction de Hachage est
h(0) = 5381
h(i) = 33 * h(i-1) ^ str[i]
Un programme c:
unsigned int DJBHash(char* str, unsigned int len)
{
unsigned int hash = 5381;
unsigned int i = 0;
for(i = 0; i < len; str++, i++)
{
hash = ((hash << 5) + hash) + (*str);
}
return hash;
}
Vous devez vous connecter pour publier un commentaire.
5381 est juste un nombre qui, dans les essais, entraîné dans moins de collisions et mieux shoda des avalanches. Vous trouverez "les constantes magiques" dans à peu près tous les algo de hachage.
Je suis tombé sur une commentaire qui jette une certaine lumière sur ce qui DJB est jusqu'à:
C'est un peu différent en fonction de hachage que celui que vous êtes en train de regarder, si elle n'utiliser le 5831 nombre magique. Le code ci-dessous que ce commentaire sur le lien de la cible a été déroulé.
Puis j'ai trouvé cette:
Il est également cette réponse à Quelqu'un peut-il expliquer la logique derrière djb2 fonction de hachage? Il fait référence à un post par DJB lui-même à une liste de diffusion qui mentionne 5381 (extrait de la réponse extrait ici):
(x << 5) + x
est au niveau du bit de multiplication. C'est l'équivalent dex * 33
! Sur certains systèmes à l'aide de la bit-à-bit méthode est plus rapide, ou le seul moyen de faire la multiplication.J'ai trouvé une propriété très intéressante de ce nombre peut être que peut être une raison à cela.
5381 est 709th premier.
709 est 127e premier.
127 31 premier.
31 est la 11e le premier.
11 est 5ème prime.
5 est la 3e premier.
3 est la 2e premier.
2 est le 1er premier.
5381 est le premier numéro de ce qui se passe pour 8 fois. 5381st premier peut dépasser la limite de signé int tellement c'est un bon point pour arrêter la chaîne.