Times33哈希算法

一个好的散列函数通常倾向于“为不相等的对象产生不相等的散列码”。理想情况下,散列函数应该把集合中不相等的实例均匀地分布到所有可能的散列值上。要想完全达到这种理想的情形是非常困难的。幸运的是,相对接近这种理想情形则并不太困难。

由Daniel J. Bernstein教授多年前在comp.lang.c发表的Times 33算法。 它是有史以来发布的最有效的哈希函数之一。

核心逻辑是这段代码:

hash(i) = hash(i-1) * 33 + str[i]

PHP实现代码如下:

1
2
3
4
5
6
7
8
9
function times33($str) {
$hash = 0;
$s = md5($str);
$len = 32;
for ($i = 0; $i < $len; $i++) {
$hash = ($hash * 33 + ord($s[$i])) & 0x7FFFFFFF;
}
return $hash;
}
有用就打赏一下作者吧!