亚洲国产日韩欧美在线a乱码,国产精品路线1路线2路线,亚洲视频一区,精品国产自,www狠狠,国产情侣激情在线视频免费看,亚洲成年网站在线观看

介紹PHP Hash算法

時(shí)間:2020-11-18 20:56:41 PHP 我要投稿

介紹PHP Hash算法

  這篇文章主要介紹了PHP Hash算法:Times33算法代碼實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下

  最近看書,里面提到了一些Hash算法。比較有印象的是Times33,當(dāng)時(shí)理解不是很透測,今天寫了段程序來驗(yàn)證了一下。

  先上代碼:

  復(fù)制代碼 代碼如下:

  /**

  * 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);

  以上有兩個(gè)測試用例。第一個(gè),用CRC32的方法;第二個(gè)是Times33的算法實(shí)現(xiàn)。

  效果:

  結(jié)果分布,兩種算法不相上下(估計(jì)是數(shù)據(jù)源的問題,md5只有0-f)。也有文章說CRC32的`分布更均勻(參考鏈接:)

  但耗費(fèi)時(shí)間,CRC32比Times33快將近一倍。

  為什么是33?

  即是素?cái)?shù)(質(zhì)數(shù)),也是奇數(shù)。除了33,還有131, 1313, 5381等。PHP內(nèi)置的Hash函數(shù)用的是5381,在“鳥哥”的一篇博文中也有提到。