您的位置:首页 > 其它

通过BKDRHASH将字符串转化为数值类型

2017-12-04 14:43 661 查看
  似乎很多题目里有任务啊什么的代号是字符串,会增加内存开销和用时,把它们全部转化成int就会好很多,然后研究了一会发现有很多字符串的hash函数,这个BKDRHASH相对还不错,就记录下来。

unsigned int bkdr_hash(const char *str)

{

unsigned int seed = 131; // the magic number, 31, 131, 1313, 13131, etc.. orz..

unsigned int hash = 0;

unsigned char *p = (unsigned char *) str;

while (*p)

hash = hash*seed + (*p++);
//0x7FFFFFFF是long int 最大值
return  hash&0x7FFFFFFF;

}


  seed是一个系数,是为了减少碰撞,也就是重复,因为不加任何处理,光是ASCII码相加肯定很容易出现相同的,那么就无法实现一个字符串对应一个整型,不过这个系数的选取好复杂啊。。。暂时不想去研究,看了一会不看了,emmm。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: