Может кто-нибудь помочь мне понять этот код алгоритма хеширования? Как мы получаем значение ha sh из этого кода? Почему он умножает h
на 32 и добавляет к нему значение ASCII? Как это помогает получить значение ha sh из строки?
/**
* Find the hash value of a given key
* @param key
* @param size size of hash table
* @return hashed value of key
*/
int hash(char *key, int size) {
unsigned long h = 0; // unsigned long, so that when it wraps it's still positive
int n = strlen(key);
for (int i = 0; i < n; i++) {
// multiply by 32 (<<5) and add ascii value
h = (h << 5) + (int)(key[i]);
}
return (int)h % size;
}