Fonction de hachage pour les chaînes de caractères en C

Je suis en train d'essayer de mettre en œuvre une fonction de hachage pour mon programme en C. j'ai trouvé beaucoup de solutions possibles, mais je ne les comprends pas. Ce qui suit est la fonction de hachage:

int hash(const char *word) {
    int hash = 0;
    int n;
    for (int i = 0; word[i] != '
int hash(const char *word) {
int hash = 0;
int n;
for (int i = 0; word[i] != '\0'; i++) {
//alphabet case
if (isalpha(word[i]))
n = word[i] - 'a' + 1;
else  //comma case
n = 27;
hash = ((hash << 3) + n) % SIZE;
}
return hash;
}
'
; i++) { //alphabet case if (isalpha(word[i])) n = word[i] - 'a' + 1; else //comma case n = 27; hash = ((hash << 3) + n) % SIZE; } return hash; }

Pourquoi sommes-nous en soustrayant 'a'+1 de word[i]? Aussi, pourquoi faisons-nous la suite: hash = ((hash << 3) + n) % SIZE?

"Pourquoi sommes-nous en ajoutant 'a'+1 à la chaîne?" - probablement pour n n'est pas 0.

OriginalL'auteur KishB87 | 2013-12-09