私はHashtableがC#でどのように動作するかを理解しようとしています。私はMSDNの記事を読んで、C#Hashtablesが衝突に対してrehashingを使うことを理解しています。つまり、ハッシュテーブルにキー/値のペアを挿入しようとするとHashFunction H1の結果が衝突した場合、HashFunction H2、H3衝突が検出されなくなるまで繰り返す。ハッシュテーブルの衝突再ハッシング - 値はどのように読み取られますか?
MSDN引用:
ハッシュテーブルクラスは rehasingと呼ばれる別の技術を使用します。 (いくつかのソースは、二重ハッシュとして再ハッシュを参照。)
を次のように作品を焼き直し:最初に、そこハッシュ異なる 関数、H1 ... Hnのセットであり、 ハッシュテーブルから項目を挿入または取り出すときH1ハッシュ関数が使用されます。これにより、 が衝突した場合は、代わりにH2が試行され、必要に応じてHnまで実行されます。 前のセクションでは、最初のハッシュ関数(H1)が であるハッシュ関数が1つしか示されていませんでした。他のハッシュ関数はこの関数に対して非常によく似ていますが、乗法因子でしか区別できません。
のHk(キー)= [GETHASH(キー)+ K×(1 +(((GETHASH(キー)>> 5)+ 1)% (HASHSIZE: 一般に、ハッシュ関数Hkのは以下のように定義されます - 1)))]%のHASHSIZEしかし
、MSDNサイト1から例を取る:
private static Hashtable employees = new Hashtable();
public static void Main()
{
// Add some values to the Hashtable, indexed by a string key
employees.Add("111-22-3333", "Scott");
employees.Add("222-33-4444", "Sam");
}
はのは、2番目のキーを追加すると、衝突が発生すると仮定しましょう、そうH2がする必要があります中古。しかし、私が従業員に電話をかけたときには( "222-33-4444")、ハッシュテーブルはH2をどのように知っていますか?別のマッピングがありますか?ありがとう。
リンクを参照する場合は、含める必要があります。 –