time33算法

以下只是我的理解,还望批评指正。

目的:字符串转化成一个无符号整型的数字。
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值