参考了一些有关于哈希算法的博客,里面都有提到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

相关文章:

  • 2022-12-23
  • 2021-11-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-01-08
  • 2021-09-21
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-03-03
  • 2022-12-23
  • 2021-08-18
  • 2022-12-23
相关资源
相似解决方案