- 相關(guān)推薦
介紹PHP Hash算法
這篇文章主要介紹了PHP Hash算法:Times33算法代碼實例,本文直接給出實現(xiàn)代碼,需要的朋友可以參考下
最近看書,里面提到了一些Hash算法。比較有印象的是Times33,當(dāng)時理解不是很透測,今天寫了段程序來驗證了一下。
先上代碼:
復(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);
以上有兩個測試用例。第一個,用CRC32的方法;第二個是Times33的算法實現(xiàn)。
效果:
結(jié)果分布,兩種算法不相上下(估計是數(shù)據(jù)源的問題,md5只有0-f)。也有文章說CRC32的分布更均勻(參考鏈接:)
但耗費時間,CRC32比Times33快將近一倍。
為什么是33?
即是素數(shù)(質(zhì)數(shù)),也是奇數(shù)。除了33,還有131, 1313, 5381等。PHP內(nèi)置的Hash函數(shù)用的是5381,在“鳥哥”的一篇博文中也有提到。
【介紹PHP Hash算法】相關(guān)文章:
精選php面試自我介紹范文14篇08-29
簡單分析PHP中序列化用法介紹08-15
PHP的壓縮函數(shù)06-21
php高級教程01-23
如何學(xué)好PHP知識09-20
淺析php函數(shù)的實例06-08