似乎很多题目里有任务啊什么的代号是字符串,会增加内存开销和用时,把它们全部转化成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。