欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PHP Hash算法:Times33算法代碼實(shí)例

 更新時(shí)間:2015年05月13日 09:09:58   投稿:junjie  
這篇文章主要介紹了PHP Hash算法:Times33算法代碼實(shí)例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下

最近看書,里面提到了一些Hash算法。比較有印象的是Times33,當(dāng)時(shí)理解不是很透測(cè),今天寫了段程序來驗(yàn)證了一下。
先上代碼:

復(fù)制代碼 代碼如下:

<?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);

以上有兩個(gè)測(cè)試用例。第一個(gè),用CRC32的方法;第二個(gè)是Times33的算法實(shí)現(xiàn)。

效果:

結(jié)果分布,兩種算法不相上下(估計(jì)是數(shù)據(jù)源的問題,md5只有0-f)。也有文章說CRC32的分布更均勻(參考鏈接:)
但耗費(fèi)時(shí)間,CRC32比Times33快將近一倍。

為什么是33?

即是素?cái)?shù)(質(zhì)數(shù)),也是奇數(shù)。除了33,還有131, 1313, 5381等。PHP內(nèi)置的Hash函數(shù)用的是5381,在“鳥哥”的一篇博文中也有提到。

相關(guān)文章

最新評(píng)論