2016-09-15 5 views
0

ハッシュテーブルについての簡単な質問。 私は現在、 ハッシュテーブルを実装しています。 とオープンアドレッシングの組み合わせを使用し、各バケットのリンクリストの長さを特定の長さに制限しています( )。ハッシュテーブルを分離する - ハングテーブルについての簡単な質問

しかし、私はこのハッシュテーブル構造を使って を効率的に取得/削除する方法を考えるのに苦労しており、盲目的にばかげているかどうか疑問に思っています。

私が衝突解決スキームを使用して継続的にプローブしようとすると、潜在的に永遠になり、キーがテーブルにないかどうかを決して知ることができません。これは、ほとんどのプロービング方法ではすべてのバケットがカバーされないため、線形プロービングを使用したくないからです。

ほとんどのプロービング方法はすべてのバケットをカバーするわけではないので、あなたが見たバケットを追跡するのは高価ですが、バケットが空になってもプロービングパス内の次のバケットはそうではありません空のバケツに遭遇すると停止します。

この問題に関するご意見は大変ありがとうございます。

ありがとうございます!無制限の衝突のようなシナリオでは

+0

バイナリseach。あなたのデータベース(ハッシュマップ)に100万のエントリが含まれている場合、500,000の代わりに平均で〜20の検索操作しか必要ありません。唯一の要件は、マップがソートされていることです – Radinator

+0

私は良い古いバイナリ検索の利点を理解していますが、マップはソートされていません、そして、私はハッシュマップの全体のポイントは、良いパフォーマンスを得るために(単語の正式なアルゴリズムの意味で)ソートされる –

答えて

0

、我々は通常、使用する傾向がある:プロービング

  • リニア:nは、nが素数> = 7、なぜプライムあるたびに、ジャンプ?素数を使ったhastablesの90%は、通常、テーブル内のすべてのセルを繰り返し処理するため、各セルを飛び越すのではなく、テーブル全体を移動します。
  • poly probling:毎回n回ジャンプする.nはf(x)= x^2 + 2x + 1のような多項式関数を使って再計算される。これは各セルで異なる結果をもたらし、セル内の値に完全に基づいていません。
+0

興味深い。おそらく、線形プロービングに変更する必要があります。私は解決された衝突の分布に異なるアプローチを提供するために、フィボナッチシーケンスにしたがってプロービングが進行する「フィボナッチプロービング」を使用していました。 O(n)時間のためにセトリングすることなくget/remove中にテーブルにキーが含まれているかどうかを判断できる間に、この方法を使用することは可能でしょうか? –