想了两天还是想不明白。。。
本帖最后由 代码农民 于 2016-11-14 17:38 编辑见 《数据结构与算法分析C语言描述—第二版》 112页:
为 关键字是字符串 构造的几个散列函数:(假设表的大小是1 0007)
第一种版本:
unsigned int
hash(const char *key, unsigned int tableSize)
{
unsigned int hashVal;
while(*key != '\0')
hashVal += *key++;
return (hashVal % tableSize);
}
这个算法比较简单,但是对表的利用率不高。
第二种版本:
unsigned int
hash(const char *key, unsigned int tableSize)
{
return (key + 27*key + 729*key) % tableSize;
}
以下是我看不懂的段落,请大家教教我、、、、
“这个hash函数假设key至少有3个字符。值27表示英文字母表的字母个数外加一个空格,而729是27的平方。虽然该函数只考察了前三个字符,但是,假如字符出现的概率是随机的,而表的大小还是1 0007,那么我们就会得到一个合理的均衡分布。”
引号中的话实在搞不明白是什么意思。。。。第二个版本的函数是引号中的含意构造的。。。我一直不理解(key + 27*key + 729*key)到底是什么意思。。
ex: 整数 375=3*10^2+7*10^1+5*10^0 呆鸭 发表于 2016-11-9 08:50
ex: 整数 375=3*10^2+7*10^1+5*10^0
太谢谢了!!!!!!!!悟了!!!!! 代码农民 发表于 2016-11-9 10:39
太谢谢了!!!!!!!!悟了!!!!!
很高兴能对楼主有帮助!^^
页:
[1]