質問

私は数日間、この上で困惑してきた...私の仮定のいずれかを撃墜すること自由に感じています。

私たちは、整数キーで辞書を使用しています。私は、この場合、キーの値をハッシュとして直接使用されることを想定しています。キーハッシュの分布(キー自体と同じで、右?)ので、ハッシュテーブルのための悪い選択同様に小さな範囲内である、となると(キーが小さな範囲でのグループ化されている場合)、この平均値をしていますか?

でしょうが、素数と巧妙な何かをした、より良い分散ハッシュを計算するために数学を法されたIEqualityComparerを提供する方が良い?

役に立ちましたか?

解決

これを使用していないの直接の辞書には、まだそのハッシュのキーを要求されますように - しかしInt32のハッシュ値は、の値だけのある、の推力ので、あなたの質問が関連している、はいています。

私は、.NETの辞書が機能する方法は、均一に分布されているハッシュ値に依存しないと信じています。 hash % bucketCountは常に素数であるところそれはbucketCountかかります。 (かかわらず、メモリからのこと - 。私は間違っている可能性が)

彼らはバケット数だけ離間することが起こる場合は、

あなたはまだ、当然の鍵の非効率的なセットで終わることができました。彼らは独自のハッシュ値がとのテーブルがセットを維持していた場合は、すべてのキーのためにの純粋にのO(1)ハッシュテーブルしかだろう - それは常にかかわらず、ケースがされますあらゆる可能なハッシュ用バケット:)現実には、それは問題ではない傾向にあります。あなたはそれが の意志の問題であることを知ってしまった場合、[はい、カスタムIEqualityComparer<T>は助けることができます。

他のヒント

は、標準ライブラリハッシュテーブルの実装を使用していると仮定すると、チャンスはキーは、キーはあなたが指摘することを正確に理由で、整数であっても、のないのハッシュです。

ハッシュディストリビューションについては、あなたのロジックが正しいことながらだから、整数キーは、そのハッシュ=キーを意味するであろうことを、あなたの最初の仮定は、おそらくではありません。

私は間違って再だ場合:まあ、その後.NETを。これは一般の答えの詳細です。 :)

巧妙な何かを行う前に、私は、あるとしてそれの速度をテストし、それはあなたのために適していた場合に参照してくださいね。そうでない場合は、巧妙なものを試してみてください。しかし、私はそれだけではそれを残す方が良いでしょう期待します。それは、ハッシュはない衝突やることがより重要だ、と限り、それが起こっているとして、人生は罰金になります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top