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

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

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

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

この記事では主に PHP ハッシュ アルゴリズム: Times33 アルゴリズムのコード例を紹介しますので、必要な方は実装コードを直接参照してください。

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

まずコードを入力してください:

コードをコピーします。コードは次のとおりです:

/**

* CRC32ハッシュ関数

* @param $str

* @return int

  */

関数 hash32($str)

{

crc32($str) を返します >> 16 & 0x7FFFFFFF;

}

/**

* Times33ハッシュ関数

* @param $str

* @return int

  */

関数 hash33($str)

{

$hash = 0;

for($i=0; $i

$hash += 33 * $hash + ord($str{$i});

}

$hash & 0x7FFFFFFF; を返します

}

$n = 10;

// テストケース 1

$stat = array();

for($i=0; $i $str = substr(md5(microtime(true)), 0, 8);

$p = hash32($str) % $n;

if(isset($stat[$p])){

$stat[$p]++;

}その他{

$stat[$p] = 1;

}

}

print_r($stat);

// テストケース 2

$stat = array();

for($i=0; $i $str = substr(md5(microtime(true)), 0, 8);

$p = hash33($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/1000082.htmlwww.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1000082.html技術記事 PHP ハッシュ アルゴリズム: Times33 アルゴリズムのコード例 この記事では、主に PHP ハッシュ アルゴリズム: Times33 アルゴリズムのコード例を紹介します。必要な場合は、最新の実装コードを参照してください。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。