2010-12-12 2 views
4

オープンアドレス指定の場合、どのようにプローブシーケンスが生成されますか。 plsはリンクを与えますC#のHashtable型は、連鎖またはオープンアドレッシングを使用して実装されていますか?

+2

ハッシュテーブルまたはディクショナリ? – SLaks

+3

私は連鎖を使用してそれにお金を置くだろう。効果的なオープンアドレッシングは、通常、2つのハッシュ関数を必要としますが、CLR内のオブジェクトは1つを提供することのみを保証できます(GetHashCode())。さらに、公開アドレス指定を使用してハッシュテーブルから削除することは苦労します。関連するスキームはありますが、チェーン化は実際にはそれほど問題ではありません(確かに私が数年前に実行したベンチマークではありません)。 – Rafe

答えて

4

これは、プローブアドレスシーケンスを生成するためにダブルハッシュでオープンアドレシング(または "閉鎖ハッシュ"と言いました)を使用します。 GetHashCode()は最初のプローブインデックスを決定します。間隔はGHC()の関数でもあります。

例えば、System.Collections.Hashtable.Add()のソースコードを参照すると、これを見ることができます。 [http://referencesource.microsoft.com/]

ハッピーハッキング!

1

.netフレームワークのHashtableは、オープンアドレッシングまたはダブルハッシング技術を使用していますが、ディクショナリは衝突回避技術としてチェイニングを使用しています。

See this link @ MSDN

関連する問題