谁能告诉我为什么DJB哈希函数中使用数字5381?
DJB哈希函数是
h(0)= 5381
h(i)= 33 * h(i-1)^ str [i]
一个c程序:
unsigned int DJBHash(char* str, unsigned int len) { unsigned int hash = 5381; unsigned int i = 0; for(i = 0; i < len; str++, i++) { hash = ((hash << 5) + hash) + (*str); } return hash; }
5381只是在测试中导致更少的碰撞和更好的雪崩数量。您几乎可以在每个哈希算法中找到“魔术常数”。