Bonjour,

je souhaite actuellement développer ma propre fonction de hachage. Après des recherches sur internet pour en comprendre le fonctionnement, je me suis aperçu que chaque caractère pouvait etre affecté à un int et que cela donnais une valeur différente pour chaque caractère

Par conséquent, je me demande si une fonction de hachage ne pourrait pas simplement être écrite comme ci-dessous

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
int fonctionHash(String s){
 
    int h = 0;
 
    for(int i = 0; i<s.length();i++){
 
         h += s.charAt(i);
 
    }
 
    return h;
 
}
Sur les quelques tests que j'ai effectué cela me donne bien une valeur différente pour chaque String que j'ai testée mais j'ai l'impression que la fonction est trop simple...

Pourriez vous donc me dire si cela est une fonction de hachage correcte ou non? Si non je voudrais également savoir pourquoi elle n'est pas correcte?

Par ailleurs j'ai trouvé sur le net une fonction faite a peu près de la même manière sauf dans la boucle (voir ci-dessous) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
 
int fonctionHash(String s){
 
    int B = 256; (en reference a une puissance de 2?)
    int N = 311; (en reference à un nombre premier?);
    int h = 0;
 
    for(int i = 0; i<s.length();i++){
 
         h = (h*B + s.charAt(i)) % N;
 
    }
 
    return h;
 
}
Pourquoi dans cet exemple les developpeurs n'ont ils pas simplement pris la valeur de s.charAt(i) comme je l'ai fait?


merci