加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP Hash算法:Times33算法代码实例

发布时间:2020-12-13 02:37:20 所属栏目:PHP教程 来源:网络整理
导读:《PHP实例:PHP Hash算法:Times33算法代码实例》要点: 本文介绍了PHP实例:PHP Hash算法:Times33算法代码实例,希望对您有用。如果有疑问,可以联系我们。 PHP编程 最近看书,里面提到了一些Hash算法.比较有印象的是Times33,当时理解不是很透测,本日写了段

《PHP实例:PHP Hash算法:Times33算法代码实例》要点:
本文介绍了PHP实例:PHP Hash算法:Times33算法代码实例,希望对您有用。如果有疑问,可以联系我们。

PHP编程最近看书,里面提到了一些Hash算法.比较有印象的是Times33,当时理解不是很透测,本日写了段程序来验证了一下.
先上代码:

代码如下:

<?php

PHP编程/**
?* CRC32 Hash function
?* @param $str
?* @return int
?*/
function hash32($str)
{
??? return crc32($str) >> 16 & 0x7FFFFFFF;
}

PHP编程/**
?* Times33 Hash function
?* @param $str
?* @return int
?*/
function hash33($str)
{
??? $hash = 0;
??? for($i=0; $i<strlen($str); $i++) {
??????? $hash += 33 * $hash + ord($str{$i});
??? }
??? return $hash & 0x7FFFFFFF;
}

PHP编程
$n = 10;

PHP编程// Test Case 1
$stat = array();
for($i=0; $i<10000; $i++){
??? $str = substr(md5(microtime(true)),8);
??? $p = hash32($str) % $n;
??? if(isset($stat[$p])){
??????? $stat[$p]++;
??? }else{
??????? $stat[$p] = 1;
??? }
}
print_r($stat);

PHP编程// Test Case 2
$stat = array();
for($i=0; $i<10000; $i++){
??? $str = substr(md5(microtime(true)),8);
??? $p = hash33($str) % $n;
??? if(isset($stat[$p])){
??????? $stat[$p]++;
??? }else{
??????? $stat[$p] = 1;
??? }
}
print_r($stat);

PHP编程以上有两个测试用例.第一个,用CRC32的办法;第二个是Times33的算法实现.

PHP编程后果:

PHP编程结果分布,两种算法平起平坐(估计是数据源的问题,md5只有0-f).也有文章说CRC32的分布更均匀(参考链接:)
但耗费时间,CRC32比Times33快将近一倍.

PHP编程为什么是33?

PHP编程等于素数(质数),也是奇数.除了33,还有131,1313,5381等.PHP内置的Hash函数用的是5381,在“鸟哥”的一篇博文中也有提到.

欢迎参与《PHP实例:PHP Hash算法:Times33算法代码实例》讨论,分享您的想法,编程之家 52php.cn为您提供专业教程。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读