以下只是我的理解,还望批评指正。
目的:字符串转化成一个无符号整型的数字。
time33算法就是其中的一种算法。
1:首先一个字符串可能会很长,可能包含着各种语言的字符,例如:中英文字符。那么怎么才能最快,效率最高得到对应的一个数字。并且这个数字是唯一的?
2:在php中,一个字符串太长不好计算,可以使用md5函数,将字符串转化成32个长度的字符串。这样只计算这个字符串就可以了。
3:生成的字符串含有英文字母和数字,英文字母通过ascii码找到对应的整数值。然后把他们都加起来,但是这样重复的概率就大了,比如 1a 和 a1 是相同的值。
4:这样的冲突时不适用的,因此可以在相加的时候乘33,这样重复的概率就小了。
一、PHP内核就采用了time33算法来实现HashTable,来看下time33的定义:
hash(i) = hash(i-1) * 33 + str[i]
二、time33算法实现代码如下
function time33($str) {
$hash = 0;
$s = md5($str);
$len = 32;
for ($i = 0; $i < $len; $i++) {
$hash = ($hash * 33 + ord($s{$i})) & 0x7FFFFFFF;
}
return $hash;
}
291

被折叠的 条评论
为什么被折叠?



