要素を、例えば順序付けられていない集合に入れるには、そのハッシュを計算し、それを対応するバケットに入れます。しかし、私たちは通常、ハッシュ関数の値の範囲より多くのバケットを持っています。バケットとハッシュ値の対応はどのように計算されますか?いくつかの関数が(0 ... size_t) - >(0 ... size_of_buckets - 1)を反映して使用されているようです。しかし、このような関数を使用すると、良いハッシュ関数であっても、多数の衝突が発生する可能性があります。順序付けられていないコンテナのバケットのサイズを計算するハッシュ関数?
答えて
より多くを学ぶために、以下の機能で遊んでなければならない私はstd::unordered_map
正確な動作が定義されているかどうかわからないんだけど標準ではしかし、基本的な原則は、常にバケツの数をコンテナのサイズよりも小さい数(この小さな数は1.0/load_factor)より大きく保ちます。この方法では、衝突は稀です。ハッシュテーブルについて
- 数が2のべき乗であるように選択される:ハッシュが計算され、その後で抽出し、その下位/上位ビットのいくつかをビット操作。このメソッドは、すべてのビットがランダムである「良い」ハッシュ関数を必要とします。
- バケット数を素数として選択します。ハッシュが計算され、次にモジュロ演算でbucket_indexが計算されます。このメソッドは、ハッシュ関数の品質が悪い場合、あなたは衝突の多くを得ることができ、方法1について「あまりにも良い」ハッシュ関数
を必要としません。方法2の場合、あまりにも良い品質のハッシュ関数を使用しても、通常は衝突はまれです。しかし、ビット操作がmodよりはるかに速いので(通常はfasterになるテクニックがあります)、通常、メソッド1は高速です。十分な品質のハッシュ関数は通常安いです。
多くのハッシュテーブルは、ハッシュ関数の範囲とバケット数の対応を「計算」しないため、多くの異なるハッシュ関数をサポートするのに十分一般的に構築されています。
しかし、バケットの数は、ハッシュテーブル(衝突解決技術など)の内部、特にload factorと呼ばれる値に依存します。ロード・ファクタの制限に達すると、通常、バケットの数が増えます予め定められた一定の係数だけ減少させる。
あなたはstd::unordered_mapインターフェースに多くを見て、
http://en.cppreference.com/w/cpp/container/unordered_map/max_bucket_count http://en.cppreference.com/w/cpp/container/unordered_map/bucket_count http://en.cppreference.com/w/cpp/container/unordered_map/bucket_size http://en.cppreference.com/w/cpp/container/unordered_map/load_factor
@downvoterなぜdownvote?あなたのdownvoteを説明するコメントを残すことを検討してください – Curious
私は質問に答えが与えられなかったと思います。どのような応答も計算されていないことを意味します。コレスポンスがない場合、指定されたハッシュで要素を配置するバケットはわかりません。 –
- 1. 順序付けされた順序付けられていないSTLコンテナ
- 2. ハッシュの順序付けられていないマップ
- 3. 複数のキー/値を持つ順序付けられていないコンテナ
- 4. 順序付きリストと順序付けられていないリンクリストの検索
- 5. 順序付けされたリストから順序付けられていないリスト項目を除外する
- 6. 順序付けられて順序付けられていないものLLVM CmpInst比較命令?
- 7. 複数の順序付けられていないリストにハッシュを分割する
- 8. Pythonの順序付けられていないポイントクラウドのサーフェスリコンストラクション
- 9. 順序付けされたコレクションと順序付けられていないコレクションの利点は?
- 10. jqueryの複数レベルのXMLから順序付けられていないリスト
- 11. Primefaces LazyScheduleModel - 順序付けられていないイベントのリスト
- 12. ルビーの順序付けられていないカップル
- 13. 順序付けられていないリストの浮動ボタン
- 14. 順序付けられていないリストの等価性
- 15. Javaの順序付けられていないペア
- 16. 順序付けられていない型のJaxbシーケンス
- 17. Java - ArrayListの順序付けられていないリストメソッド?
- 18. PHP配列から順序付けられていないリスト
- 19. 親の順序付きリスト内のネストされた順序付けられていないリスト
- 20. 番号を数値順に並べ替える順序付けされていない配列の関数?
- 21. 関数PHPからの順序付けられていないリストの内容を返す
- 22. Scalaパーサーコンビネータでは、順序付けられていないパーサー
- 23. 順序付けられていないツリーパターンマッチングアルゴリズム
- 24. フォーム検証 - 順序付けられていないリスト
- 25. メンバ関数から順序付けられていないマップを初期化する
- 26. 順序付けられていないキーの配列をナビゲートする方法
- 27. 縦方向データの線形混合モデル:連続的な時間と順序付けられていない係数vs順序付けされた係数
- 28. C++の順序付けられていない構造体ハッシュの設定問題
- 29. 集計関数と順序付けに関するSQLの問題
- 30. ブートストラップ内のコンテナ流体内の順序付けられていないリストの整列
独自のハッシュコンテナを作成する理由は何ですか?それは学校かそれに類する仕事ですか?それ以外の場合は、['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)を使用する必要があります。 –
私は自分自身を作成したくありません。私はstd :: unordered_mapがどのように動作するかを知りたい。私が疑問に書いたように、これは理論的にはパフォーマンスに大きな影響を与える可能性があります。 –