马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 代码农民 于 2016-11-14 17:37 编辑
见 《数据结构与算法分析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[0] + 27*key[1] + 729*key[2]) % tableSize;
}
以下是我看不懂的段落,请大家教教我、、、、
“ 这个hash函数假设key至少有3个字符。值27表示英文字母表的字母个数外加一个空格,而729是27的平方。虽然该函数只考察了前三个字符,但是,假如字符出现的概率是随机的,而表的大小还是1 0007,那么我们就会得到一个合理的均衡分布。”
引号中的话实在搞不明白是什么意思。。。。第二个版本的函数是引号中的含意构造的。。。我一直不理解(key[0] + 27*key[1] + 729*key[2])到底是什么意思。。
|