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

   这篇文章主要介绍了PHP Hash算法:Times33算法代码实例,本文直接给出实现代码,需要的朋友可以参考下

  最近看书,里面提到了一些Hash算法。比较有印象的是Times33,当时理解不是很透测,今天写了段程序来验证了一下。

  先上代码:

  复制代码 代码如下:

  

  /**

  * CRC32 Hash function

  * @param $str

  * @return int

  */

  function hash32($str)

  {

  return crc32($str) >> 16 & 0x7FFFFFFF;

  }

  /**

  * Times33 Hash function

  * @param $str

  * @return int

  */

  function hash33($str)

  {

  $hash = 0;

  for($i=0; $i

  $hash += 33 * $hash + ord($str{$i});

  }

  return $hash & 0x7FFFFFFF;

  }

  $n = 10;

  // Test Case 1

  $stat = array();

  for($i=0; $i<10000; $i++){

  $str = substr(md5(microtime(true)), 0, 8);

  $p = hash32($str) % $n;

  if(isset($stat[$p])){

  $stat[$p]++;

  }else{

  $stat[$p] = 1;

  }

  }

  print_r($stat);

  // Test Case 2

  $stat = array();

  for($i=0; $i<10000; $i++){

  $str = substr(md5(microtime(true)), 0, 8);

  $p = hash33($str) % $n;

  if(isset($stat[$p])){

  $stat[$p]++;

  }else{

  $stat[$p] = 1;

  }

  }

  print_r($stat);

  以上有两个测试用例。第一个,用CRC32的方法;第二个是Times33的算法实现。

  效果:

  结果分布,两种算法不相上下(估计是数据源的问题,md5只有0-f)。也有文章说CRC32的分布更均匀(参考链接:)

  但耗费时间,CRC32比Times33快将近一倍。

  为什么是33?

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

时间: 2024-10-03 17:14:45

PHP Hash算法:Times33算法代码实例的相关文章

最小生成树算法C语言代码实例_C 语言

在贪婪算法这一章提到了最小生成树的一些算法,首先是Kruskal算法,实现如下: MST.h 复制代码 代码如下: #ifndef H_MST#define H_MST #define NODE node *#define G graph *#define MST edge ** /* the undirect graph start */typedef struct _node { char data; int flag; struct _node *parent;} node; typede

以Python代码实例展示kNN算法的实际运用_基础知识

邻近算法,或者说K最近邻(kNN,k-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一.所谓K最近邻,就是k个最近的邻居的意思,说的是每个样本都可以用它最接近的k个邻居来代表. kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的特性.该方法在确定分类决策上只依据最邻近的一个或者几个样本的类别来决定待分样本所属的类别. kNN方法在类别决策时,只与极少量的相邻样本有关.由于kNN方法主

【转载】对一致性Hash算法,Java代码实现的深入研究

原文地址:http://www.cnblogs.com/xrq730/p/5186728.html   一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性Hash算法的算法原理做了详细的解读. 算法的具体原理这里再次贴上: 先构造一个长度为232的整数环(这个环被称为一致性Hash环),根据节点名称的Hash值(其分布为[0, 232-1])将服务器节点放置

floyd算法实现思路及实例代码_C 语言

正如我们所知道的,Floyd算法用于求最短路径.Floyd算法可以说是Warshall算法的扩展,三个for循环就可以解决问题,所以它的时间复杂度为O(n^3). Floyd算法的基本思想如下:从任意节点A到任意节点B的最短路径不外乎2种可能,1是直接从A到B,2是从A经过若干个节点X到B.所以,我们假设Dis(AB)为节点A到节点B的最短路径的距离,对于每一个节点X,我们检查Dis(AX) + Dis(XB) < Dis(AB)是否成立,如果成立,证明从A到X再到B的路径比A直接到B的路径短,

retinex-单尺度RETINEX的算法中不同代码的高斯函数的形式问什么不同,MATLAB代码

问题描述 单尺度RETINEX的算法中不同代码的高斯函数的形式问什么不同,MATLAB代码 有没有相关的代码.为什么高斯核的形式不一样 [x y]=meshgrid((-(size(Ir,2)-1)/2):(size(Ir,2)/2),(-(size(Ir,1)-1)/2):(size(Ir,1)/2)); gauss_1=exp(-(x.^2+y.^2)/(2*sigma_1*sigma_1)); %计算高斯函数 Gauss_1=gauss_1/sum(gauss_1(:)); %归一化处理

贪心算法的理解与实例应用

问题描述 贪心算法的理解与实例应用 对贪心算法的深刻理解,以及贪心算法的经典应用,对相应的实例进行分析 解决方案 哈夫曼树-贪心算法的应用实例strtotime 深入理解应用实例---------------------- 解决方案二: 可参考 http://blog.csdn.net/effective_coder/article/details/8736718

关于粒子群优化算法的测试程序代码

问题描述 关于粒子群优化算法的测试程序代码 Griewank.Schaffer.Cosine mixture.Michalewicz.Rosenbrock.多峰函数这几个 函数的测试代码,例如sphere函数的这种格式: function f = fitness(x) a = size(x,2); %[x,y] = meshgrid(-100:1:100); f=0; for i = 1:a f=f+x(i)^2; end

我需要极大似然估计定位算法的matlab代码

问题描述 我需要极大似然估计定位算法的matlab代码 是基于RSSI的室内定位,极大似然估计定位算法,如果有双曲线定位算法的MATLAB代码也行.哪位为好心人发我一份,写论文需要. 解决方案 http://www.baidu.com/link?url=rHXbO6mxsCu_MoH9Ij-06JVpqxyOq3DB3jsOE3BsFgA4sLD9iGWSQd6BCQy632zn-eIqt3JHFJR808e1Iontqi79xVUDJD0U3ig29MjLxW7&ie=utf-8&f=8

寻径 a 空间寻径代...-A_star算法 空间寻径代码

问题描述 A_star算法 空间寻径代码 A_star算法怎么用 求演示代码 空间寻径代码 ....... 解决方案 基于C#的A_star寻径算法的实现A*(A Star)算法A*寻径算法