119Fermer121
ThibautLe 12/10/2007 à 01:12
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)