Pollux (./55) :
euh la façon dont tu utilises hach_wkp est loin d'être optimale, puisque tu calcules modulo une puissance de 2 ; le mieux serait soit de calculer modulo 257, soit si la qualité de hachage actuelle te suffit d'optimiser cette fonction en une fonction plus rapide qui renvoie le même résultat :(...)
Est-ce que je peux combiner tes deux propositions ? (algo optimisé en vitesse & modulo 257), ce qui nous donne ça :
int hach_wkp_pollux_257(const char *str)
{
unsigned int hash = 5381; // DJB Hash
unsigned int hash5 = 0;
const char *s;
for (s = str; *s; s++) {
hash5+= hash;
hash+= *s;
}
hash= hash + (hash5<<5);
while (hash % 257 == 256)
hash/= 257;
return (hash % 257);
}
?
(je pose la question car j'avoue que je n'ai pas compris ton optimisation, pour moi la raison qui fait que l'algo de départ et ta version optimisée sont équivalentes reste obscure)