ハッシュ衝突を解決するための一般的な方法

オリジナルます。https://blog.csdn.net/xiajingsong/article/details/84491078

 

a)にオープンアドレス法

この方法の基本的な考え方は次のとおりです。アドレスの競合は、いくつかの方法に従って、あなたがこれまでに空の位置を見つけるまで、ハッシュテーブル内の他のストレージユニットを検出し続けた場合。このプロセスは、以下の式によって記述することができる: 
H I(キー)=(H)(キー+ DI)MODのM(I = 1,2、...、K(K≤M - 1)) 
ここで、H(キー)キー直接アドレスハッシュキーワードは、mはジアドレスがたびに再検出をインクリメントし、ハッシュ・テーブルの長さです。 
この方法では、最初の要素に直接計算されたハッシュアドレスH(キー)と、メモリセルは他の要素によって占有されている場合、アドレスH(キー)+メモリセルのD 2を表示し続け、そして見つけるまで繰り返します記憶部は、キーユニットのデータ要素に格納されたキーワード空です。 
デルタdは、エミュレート異なっており、それらに応じて異なる名称有していてもよい 
:エミュレートされたDI = 1、2、。3、...プロービング線形(1)。 
再ハッシュと、(2)DI 2. 1 ^ = - ^ 2 1 、2 ^ 2、 - 2 ^ 2、K ^ 2、-k ^ 2 ...... 検出する二次再ハッシュ; 
(3)DI =擬似ランダム再ハッシュの擬似ランダムシーケンス、 

実施例1は、ハッシュ関数H(キー)=キーMOD 7が設けられており 、 0から6までのハッシュテーブルアドレス空間によって再度プロービングキーストリング(32、13、49、55、22、38、21)線形二次再ハッシュし、ハッシュテーブルのハッシュを検出する方法が構成されています。 
ソリューション:


(1)線形プロービング再ハッシュ: 
32%7 = 4; 7 = 6 13%; 49%7 = 0; 
55%= 6 7競合、次のメモリアドレス(6 + 1)= 0〜7%、さらに競合は、次のメモリアドレス:( + 2 6)1 = 7%無衝突は、保存することができます。 
7 = 22%1つの競合、次のメモリアドレス:( 1 + 1)= 7%2無衝突、 
38%3 = 7; 
21%7 = 0衝突、上記方法に従っては、検出空間5まで続きます:競合の記憶位置に対応する発生しない、結果のハッシュテーブル 
インデックス:0。1 5 4 3 6 2 
49 55 32 22 38であるが21である13であります 


(2)二次再ハッシュ検出: 
インデックス:. 5 4 3 0 1 6 2 
49 32 55 22 21 38 13であるである 
    。注:注意の必要性を除去するための要素を生じるオープンアドレスの競合を用いてハッシュテーブル方式の場合、あなたはそれが同じハッシュアドレスを持つアドレス他の要素を見つける切り捨てられますので、直接、削除されたので、通常の要素が削除されたことを示すために特別なフラグを設定することはできません。

b)の再ハッシュ 

衝突は、第二、第三、無競合までハッシュ関数計算アドレスを使用して、発生した場合。デメリット:計算時間の増加。競合が、次に姓、衝突、及び第三の第二の文字の最初の文字に応じてハッシュすることができれば、例えば、ハッシュに従って姓の最初の文字上初めて、競合は遠くなくなるまで

C)リンクアドレス方法

レコードのすべてのキーワードの類義語は、同じ線形リストに保存されています。次のように:

したがって、この方法は、ほぼスリーブサブチーズ内部にあると考えることができます

D共通オーバーフロー領域の確立

ハッシュ関数は、次いで、基本形態としてベクトルハッシュテーブル[0..m-1]せ、追加の記憶空間ベクトルの確立を[0、M-1]の範囲を想定しているOverTable [0..v]コンフリクトを格納します記録。
問題ハッシュアルゴリズムの競合を取り除くことができ、上記の方法、後。
注:理由は、どのように効率的に、gifファイルが構築される方法を説明するために、単に、より良い研究gifファイル構造にするために、アルゴリズム、LZW学習アルゴリズムを学ぶより良いLZWするためには、ハッシュを導入し、そして最後に、私は詳細ますましたファイル操作のこのタイプ。

おすすめ

転載: www.cnblogs.com/fxtx/p/11588581.html