国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

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

2024-05-04 23:35:12
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了PHP Hash算法:Times33算法代碼實例,本文直接給出實現代碼,需要的朋友可以參考下
 

最近看書,里面提到了一些Hash算法。比較有印象的是Times33,當時理解不是很透測,今天寫了段程序來驗證了一下。
先上代碼:

復制代碼代碼如下:

<?php

 

/** 
 * 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<strlen($str); $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,在“鳥哥”的一篇博文中也有提到。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昭平县| 沙坪坝区| 厦门市| 平远县| 阿合奇县| 永修县| 石景山区| 岢岚县| 炎陵县| 曲阜市| 新巴尔虎左旗| 永川市| 常州市| 林甸县| 定陶县| 同心县| 湘乡市| 海安县| 昭平县| 盈江县| 湖口县| 会同县| 江口县| 嘉义县| 长白| 二手房| 朝阳区| 高雄县| 德格县| 永州市| 嘉黎县| 伊金霍洛旗| 松溪县| 密云县| 莲花县| 丽江市| 汤阴县| 平潭县| 喀喇沁旗| 施秉县| 临泉县|