ホームページ > バックエンド開発 > C++ > boost::hash_combine に「マジック ナンバー」があるのはなぜですか?

boost::hash_combine に「マジック ナンバー」があるのはなぜですか?

Barbara Streisand
リリース: 2024-11-14 17:12:02
オリジナル
315 人が閲覧しました

Why is There a

boost::hash_combine の「マジック ナンバー」は何を意味しますか?

質問:

ブースト:: hash_combine 関数は、ハッシュ演算に「マジックナンバー」(0x9e3779b9) を組み込みます。この数値の目的と重要性は何ですか?

答え:

boost::hash_combine のマジック ナンバーは、黄金比(ファイ)。認識可能なパターンは含まれず、0 と 1 がほぼ均等に分布しています。これを含めることで複数の機能が提供されます:

  • ランダム化: マジック ナンバーはランダム ビット フリッパーとして機能し、シード ハッシュのすべてのビットに影響を与えます。これにより、同様の値が遠く離れてマッピングされる可能性が高まり、ハッシュ テーブルの衝突が減少します。
  • 伝播: 結合される値のハッシュにマジック ナンバーが追加されます (hash_value(v)) ) およびシード自体のシフトされたバージョン ((seed <<6) (seed >> 2))。これにより、hash_value(v) の範囲が限られている場合でも、連続する値の差が時間の経過とともにシード内のすべてのビットに分散されることが保証されます。

ランダム化と伝播を組み合わせることで、マジック ナンバーが役に立ちます。ハッシュ テーブル内で値を均等に分散し、クラスタリングによって引き起こされるパフォーマンス低下の可能性を軽減します。

以上がboost::hash_combine に「マジック ナンバー」があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート