我正在阅读K & R的“The C Programming Language”一书。在“结构”一章,“表查找”(第144页)的子主题下,我发现这个哈希生成函数这个哈希函数是如何工作的?这些数字是随机的吗?
#define HASHSIZE 101
struct nlist {
struct nlist *next;
char *name;
char *defn;
}
static struct nlist *hashtab[HASHSIZE];
unsigned hash(char *s)
{
unsigned hashval;
for (hashval = 0; *s != '\0'; s++)
hashval = *s + 31 * hashval;
return hashval % HASHSIZE;
}
我不明白的是什么这个功能实际上不会。
我认为它为给定的字符串(char * s)生成一个唯一的地址(作为hashtab的索引)。
但我认为两个不同的字符串可以被赋予相同的索引,因为(hashval%HASHSIZE)是给定的地址(203%101 = 405%101 = 1)。
为什么HASHSIZE 101和hashval乘以31?为什么不是100或32?