国产探花免费观看_亚洲丰满少妇自慰呻吟_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,在“鳥哥”的一篇博文中也有提到。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松溪县| 湖南省| 新巴尔虎右旗| 黔江区| 田林县| 清流县| 南和县| 太白县| 哈巴河县| 新安县| 甘德县| 迭部县| 抚顺县| 阿拉善左旗| 邢台县| 武义县| 淳安县| 肥城市| 桃园市| 城固县| 安岳县| 龙门县| 小金县| 阿瓦提县| 云龙县| 福建省| 尚义县| 新乡县| 峨边| 淳安县| 竹山县| 蛟河市| 孝昌县| 乐业县| 景宁| 蚌埠市| 宕昌县| 博兴县| 巴楚县| 黄梅县| 沅陵县|