K&R一書中提出的BKDR Hash算法,這裡給出C函數實現,實際用的時候分布比較好而且實現簡單。唯一不明白的就是為什麼選擇131這種模式的數字作為種子,隱隱有沃爾夫勒姆31號自動機的似曾相識的感覺。
//BKDR Hash 函數
unsigned int bkdr_hash(const char * str) {
unsigned int seed = 131;
unsigned int hash = 0;
while (*str) {
hash = hash * seed + (*str++);
}
//65536為Hash值范圍可以根據需要修改
return hash % 65536;
}