<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>

            介紹PHP Hash算法

            時間:2024-10-21 22:26:03 PHP 我要投稿
            • 相關推薦

            介紹PHP Hash算法

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

            【介紹PHP Hash算法】相關文章:

            簡單介紹php構造函數用法08-31

            精選php面試自我介紹范文14篇08-29

            Smarty (PHP模板引擎)知識點介紹06-12

            關于php面試寶典及PHP面試技巧08-16

            簡單分析PHP中序列化用法介紹08-15

            PHP的壓縮函數06-21

            php高級教程01-23

            如何學好PHP知識09-20

             PHP的基礎編程與應用10-16

            淺析php函數的實例06-08

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院