参考了一些有关于哈希算法的博客,里面都有提到BKDR哈希算法,在博客:各种字符串Hash函数中有对各种hash算法进行测试,测试关于哈希冲突,以及散列的质量,得到的结果可以参考以上博文。
BKDRhash实现:
unsigned int BKDRHash1(char *str)
{
unsigned int seed = 131; // 31 131 1313 13131 131313 etc..
unsigned int hash = 0;
while (*str) {
hash = hash * seed + (*str++);
}
return (hash & 0x7FFFFFFF); // long int 的上限值,这里可以替换为得到的数据与散列表的大小NHASH进行mod运算
}
unsigned int BKDRhash2(char *p) {
unsigned int hash = 0;
unsigned int seed = 131; // 31 131 1313 13131 131313 etc..
while (*p) {
hash = hash * seed + (*p++);
}
return hash % NHASH; // 散列表的大小
}
2016/11/6