ホームページ  >  記事  >  バックエンド開発  >  PHP ハッシュ アルゴリズム: Times33 アルゴリズムのコード例、hashtimes33_PHP チュートリアル

PHP ハッシュ アルゴリズム: Times33 アルゴリズムのコード例、hashtimes33_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 09:53:541101ブラウズ

PHP ハッシュ アルゴリズム: Times33 アルゴリズム コード例、hashtimes33

最近、いくつかのハッシュ アルゴリズムについて言及した本を読みました。一番印象に残ったのはTimes33で、当時はよく理解していなかったので、今日プログラムを書いて検証してみました。
まずコード:
コードをコピーします コードは次のとおりです:

/**
 * CRC32ハッシュ関数
 * @param $str
 * @return int
 */
関数 hash32($str)
{
crc32($str) >> 16 & 0x7FFFFFFF; を返します }

/**

 * Times33 ハッシュ関数
 * @param $str
 * @return int
 */
関数 hash33($str)
{
$ハッシュ = 0; for($i=0; $i $hash += 33 * $hash + ord($str{$i}); }
$ハッシュ & 0x7FFFFFFF を返します
}


$n = 10;

//テストケース 1
$stat = 配列(); for($i=0; $i $str = substr(md5(microtime(true)), 0, 8); $p = ハッシュ32($str) % $n; If(isset($stat[$p])){

$stat[$p]++
}その他{
$stat[$p] = 1; }
}
print_r($stat);

//テストケース 2
$stat = 配列(); for($i=0; $i $str = substr(md5(microtime(true)), 0, 8); $p = ハッシュ33($str) % $n; If(isset($stat[$p])){
$stat[$p]++
}その他{
$stat[$p] = 1; }

}

print_r($stat);


上記には 2 つのテストケースがあります。 1 つ目は CRC32 メソッドを使用し、2 つ目は Times33 アルゴリズムの実装です。


効果:


結果の分布、2 つのアルゴリズムは同等です (おそらくデータ ソースに問題があり、md5 には 0-f しかありません)。 CRC32の方が均等に分布しているという記事もあります(参考リンク:)
ただし、時間がかかります。CRC32 は Times33 のほぼ 2 倍高速です。

なぜ 33 なのか?

素数(素数)と奇数です。 33以外にも131、1313、5381などがあります。 PHP の組み込みハッシュ関数は 5381 を使用します。これは、「Brother Bird」のブログ投稿でも言及されています。


http://www.bkjia.com/PHPjc/998814.html

www.bkjia.comtru​​e

http://www.bkjia.com/PHPjc/998814.html

技術記事

PHP ハッシュ アルゴリズム: Times33 アルゴリズムのコード例、hashtimes33 は最近、いくつかのハッシュ アルゴリズムについて言及した本を読みました。もっと印象に残ったのは、当時はよく理解できなかったのですが…
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。