オープンハッシングとクローズドハッシングの意味


93

オープンハッシュ(個別チェーン):

オープンハッシュでは、ハッシュテーブルのセルに添付されたリンクリストにキーが格納されます。

クローズドハッシュ(オープンアドレス指定):

クローズドハッシュでは、リンクリストを使用せずに、すべてのキーがハッシュテーブル自体に格納されます。

なぜオープン、クローズ、セパレートと呼ばれているのか理解できません。誰かがそれを説明できますか?


実際には、キーをハッシュテーブルに格納することはありません。タプル(Key、Value)を取得し、キーを使用して値を格納する場所を計算します。したがって、実際には値をハッシュテーブルに格納します
Mr. Suryaa Jha

回答:


117

「クローズ」と「オープン」の使用は、特定の位置またはデータ構造を使用することに縛られているかどうかを反映しています(これは非常にあいまいな説明ですが、残りが役立つことを願っています)。

たとえば、「オープンアドレス指定」の「オープン」は、オブジェクトがハッシュテーブルに格納されるインデックス(別名アドレス)がそのハッシュコードによって完全に決定されていないことを示しています。代わりに、インデックスはハッシュテーブルに既に存在するものに応じて異なる場合があります。

「クローズドハッシュ」の「クローズド」とは、ハッシュテーブルを離れないことを意味します。すべてのオブジェクトは、ハッシュテーブルの内部配列のインデックスに直接格納されます。これは、ある種のオープンアドレッシング戦略を使用することによってのみ可能であることに注意してください。これが、「クローズドハッシュ」と「オープンアドレス」が同義語である理由を説明しています。

これをオープンハッシュと比較してください。この戦略では、ハッシュテーブルの配列に実際に格納されているオブジェクトはありません。代わりに、オブジェクトがハッシュされると、ハッシュテーブルの内部配列とは別のリストに格納されます。「オープン」とは、ハッシュテーブルを離れ、別のリストを使用することで得られる自由を指します。ちなみに、「個別リスト」は、オープンハッシュが「個別チェーン」としても知られている理由を示しています。

つまり、「クローズ」とは、常にオブジェクトが常にハッシュテーブル内に直接格納されることを保証する場合(クローズハッシュ)のような、ある種の厳密な保証を指します。次に、「クローズ」の反対は「オープン」なので、そのような保証がない場合、戦略は「オープン」と見なされます。


17
オープンハッシュ(個別チェーン)はリンクリストに限定されないことを追加する必要があります。これは、キャッシュフレンドリーではなく、O(n / 2)動作への衝突攻撃を緩和します。衝突するバケットにツリーまたはソートされた配列を使用することもできます。
rurban 2014

競合する情報に反対する投票:「オープン」と「クローズは同義語であり、最後に:「クローズ」の反対は「オープン」です
Marwen Trabelsi

1
@MarwenTrabelsi「閉じた」と「開いた」は同義語だと言ったことはありません。
Ken Wayne VanderLinde

「これが、「クローズドハッシュ」と「オープンアドレス」が同義語である理由を説明しています。」
Marwen Trabelsi

1
誰かがこれが正しい歴史的語源であることを証明する情報源を提供できますか?
Santropedro

3

「ハッシュテーブル」である配列があります。

Open Hashingでは、配列の各セルは衝突を含むリストを指します。ハッシュにより、リンクリスト内のすべてのアイテムに同じインデックスが作成されました。

クローズドハッシュでは、すべてに対して1つの配列のみを使用します。衝突は同じ配列に格納します。トリックは、衝突から衝突ユニットにジャンプするためのスマートな方法を使用して、必要なものを見つけることです。そして、これを再現可能/確定的な方法で行います。


2

オープンアドレッシングという名前は、要素の場所(「アドレス」)がそのハッシュ値によって決定されないという事実を指します。(この方法はクローズドハッシュとも呼ばれます)。

別々の連鎖、各バケットは独立しており、同じインデックスを持つエントリのADT(リスト、二分探索木、など)のいくつかの並べ替えを持っています。良いハッシュテーブルでは、挿入や検索などのためにO(1)の順序の操作が必要なため、各バケットには0または1つのエントリがあります。

これは、mod演算子を使用した単純なハッシュ関数(明らかに、悪いハッシュ関数)で C ++を使用した個別の連鎖のです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.