程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP Hash算法:Times33算法代碼實例

PHP Hash算法:Times33算法代碼實例

編輯:關於PHP編程

       這篇文章主要介紹了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,在“鳥哥”的一篇博文中也有提到。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved