辞書の記憶/検索のメカニズムを理解しようとしているItem[TKey]
の出典を調べています。辞書はどのように高速検索を行うのですか
私が混乱するところは、buckets
フィールドの素数のユーザーと、Entry<TKey,TValue>.next
の相互作用です。
誰かが私にその論理を説明することができますか、または私がそれを理解できる参照先を指すことができます。
ありがとうございました。ハッシュコードに
辞書の記憶/検索のメカニズムを理解しようとしているItem[TKey]
の出典を調べています。辞書はどのように高速検索を行うのですか
私が混乱するところは、buckets
フィールドの素数のユーザーと、Entry<TKey,TValue>.next
の相互作用です。
誰かが私にその論理を説明することができますか、または私がそれを理解できる参照先を指すことができます。
ありがとうございました。ハッシュコードに
は、このWikipediaの記事でHash Tablesおそらくthis article about using prime numbers in hash table implementations.
うわー、私は分かりませんでした。ハッシュテーブルはCSのメジャーから数え切れないほど多くのPhD論文の産物であるように思えます。 – ja72
ルックを参照してください。 Hashtable
辞書は単なる強タイプですハッシュテーブルの実装それは、キーで項目を置くいくつかの "バケツ"を持っています。
ハッシュテーブルに項目を追加すると、キーのハッシュコードを使用して、それを置くバケットを決定します(通常は非常に高速ですが、GetHashCode
を呼び出してモジュロを適用します)。バケット(ある種のリスト)があれば、バケットにすでに同じキーを持つアイテムが含まれているかどうかを確認し、そうでない場合は追加します。各バケットには、ハッシュテーブル内のすべてのアイテムの小さなサブセットしか含まれていないので、これも非常に高速です。
キーに基づいてアイテムを取得する場合は、キーのハッシュコードに基づいてバケットを決定し、バケット内のこのキーを持つアイテムを探します。
もちろん、これは非常に単純な説明です...詳細については、Wikipediaの記事をご覧ください。
ハッシュテーブル+別個のチェーンhttp://en.wikipedia.org/wiki/Hash_table#Separate_chaining – Ani
ちょうど「素数」の部分を無視してください(これは数論に基づく最適化です)。 /ハッシュテーブル/ウィキペディアのページのグラフ。 –