ることに意味がリサイズ、ハッシュテーブルは、下記のうちどれですか。ますか?

StackOverflow https://stackoverflow.com/questions/2625684

質問

私のハッシュテーブル実行機能のリサイズのテーブルの場合の負荷に達する約70%です。私のハッシュテーブルは別途チェーンのための衝突.

意味はあるんだのサイズを変えるハッシュテーブルの下での任意の点はさせていただきます。そうではない場合、増加しているサイズによるほど、実際に守ります: http://planetmath.org/encyclopedia/GoodHashTablePrimes.html)するため、負荷が70%、私はサイズ変更でき、負荷が30%。

役に立ちましたか?

解決

あなたは、汎用的な使用のためにハッシュテーブルを作成している、またはそのための具体的な目的があるのでしょうか?私は一般的な実装のための小さなリサイズないことをお勧めします。これは、あなたのテーブルをシンプルにし、表が充填され、頻繁に空にされた条件の下でメモリスラッシングからそれを維持します。あなたはハッシュテーブルのサイズを小さくする必要条件に実行してしまう場合は、その時点でそれを拡張します。

他のヒント

ハッシュテーブルがなくて盛り番長いの良質なハッシュ機能を参照 こちらの).きく力は、大幅な速度指数の計算.

なぜ、このような関係に問われているのかには大きな違いがあったと思い収縮力の二つのハッシュテーブル、エディトリアルデザインをグラフの右半分が、単に追加のリンクリストのスロット i (上)へのリンクリストのスロット i - n/2.

メモリが安価であれば、

は、一人でそれを残します。メモリが高価である場合は示唆しているとして、ヒステリシス付きのサイズ変更。完了したら、必ずそれがうまく実行し、愚かな何かを行っていないにするために、結果をプロファイリングます。

最初のアイデア:あまりにも多くの衝突が存在する場合、ハッシュテーブルのパフォーマンスが低下するため、ハッシュテーブルを成長させるための唯一の理由です。その負荷が70%を超えたときに、テーブルを成長させることは起きてからこれを防ぐために、親指の良いルールはなく、親指のそのわずかなルールです。はるかに優れた衝突の数を追跡し、彼らは一定の限界を超えたり、特定の衝突率がヒットしたら場合にのみハッシュテーブルを成長させることです。結局のところ、なぜあなたはまだ単一衝突していない、90%によってロードされたハッシュテーブルを成長させたいですか?それは何の利点を持っていないだろう。

第二のアイデア:ハッシュテーブルを縮小する唯一の理由は、メモリを節約するためにある、まだそれは衝突の数を増やすため、検索パフォーマンスが低下する可能性が縮小します。これは、あなたがそれを自分で解決しなければならないメモリのトレードオフと、なぜ対古典スピードのですか?あなたのコードを使用している誰にそれを残します。ちょうどあなた自身に縮小していないが、シュリンク方法を提供しません。低メモリ使用量が要件であれば、誰でもあなたのコードを使用していることは、定期的に縮小呼び出すことができます。最大のパフォーマンス要件の場合ならば、誰でもあなたのコードを使用していることはシュリンクを呼び出してはなりません。そして時にシュリンクをコールする場合は他のみんなが決定するヒューリスティックのいくつかの種類を使用することができます。

第三のアイデア:成長または縮小するときは、必ず操作の後に一定の負荷率が保証されるように縮小/成長します。例えば。成長したときに、必ずその後負荷率が50%と縮小したときに、必ずその後に負荷率が70%となるように縮小するように成長。もちろん、それはそう/成長させた後、すぐに要素を追加するハッシュテーブルが再び成長する可能性があり、収縮が、それは/縮小は通常、あまりにも高価であるが成長の効果をシミュレートとして避けられない、衝突の数については何も言いません。また、それ以上の変更が予定されていないことが多い一度呼び出されますシュリンクのでべきではなく、将来的に再び成長することを避けるよりもメモリのセーブます。

最後のアイデア:あなたが作るすべての意思決定のために、あなたは他のもののためのいくつかの使用方法の例と悪い方のために、より良いハッシュテーブルを作成します。あなたはハッシュテーブルを使用することが起こっているかわかっている場合、これは問題になることはありません。しかし、そうでない場合は、通常はこれらの決定を自分で作るなぜあなたは、ないですか?ちょうどそれらを委任します。例えば、あなたのコードのユーザーがすべての細部をカスタマイズすることができますどのくらいのあなたのハッシュテーブルを作成する際にこれらすべての要因が設定されるようにするか、あなたのハッシュテーブルは、(不明な点は何するときは、必ず尋ねることができるというコールバック関数)デリゲートの機能を有することを可能にすることによりいずれかで、拡大または縮小します。そうすれば、あなたのコードのすべてのユーザーが、彼らはそれを必要とするものは何でも、使用シナリオのためにも、実行時にコードをカスタマイズすることができます。

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