HashCode メソッドで素数を使用する理由
素数は、ハッシュ値の分散を最適化するために hashCode() メソッドで広く使用されています。ハッシュバケット。この選択は、潜在的なパターンやバイアスを持つデータを処理する場合に特に有利です。
入力データがランダムで均一に分散されたパターンを示す場合、ハッシュ コード係数の選択はそれほど重要ではなくなります。ただし、実際のデータには、アライメント制約や予測可能なアドレス範囲などの固有のバイアスが存在することがよくあります。
通常、4 で割り切れるアドレスにアライメントされる 32 ビット整数の例を考えてみましょう。素数係数を使用すると、 7 などの非素数係数と比較して、より良い分布が得られます。 8:
Input | Modulo 8 | Modulo 7 |
---|---|---|
0 | 0 | 0 |
4 | 4 | 4 |
8 | 0 | 1 |
12 | 4 | 5 |
16 | 0 | 2 |
20 | 4 | 6 |
24 | 0 | 3 |
28 | 4 | 0 |
明らかなように、素数係数を使用した分布はより均一であり、衝突や不均一な分布が防止されます。
したがって、パターンやバイアスを持つ可能性のあるデータを扱うときは、ハッシュ コードの係数として素数を使用すると、ハッシュ値の分散が大幅に向上し、ハッシュの衝突の可能性が減り、ハッシュの全体的なパフォーマンスが向上します。メカニズム。
以上がハッシュ コードの配布を改善するために素数を使用する理由の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。