Heim > php教程 > php手册 > PHP Hash算法:Times33算法代码实例

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

WBOY
Freigeben: 2016-06-13 09:04:22
Original
1290 Leute haben es durchsucht

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

  $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

  $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,在“鸟哥”的一篇博文中也有提到。

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage