参考:
http://www.partow.net/programming/hashfunctions/#RSHashFunction
http://www.xuebuyuan.com/2149542.html
BKDR代码:
//万一在这里碰撞了怎么破?
unsigned int BKDRHash(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);
}
void add(char *s){
int t,k;
while (*s=='0') s++;
k=BKDRHash(s);
t=k%MAX;
while (c[t]!=k && hash[t]!=0)
t=(t+1)%MAX;
hash[t]++; c[t]=k;
max=max<hash[t]?hash[t]:max;
}