hash表的衝突解決方法

2021-10-01 23:49:54 字數 1142 閱讀 9106

如圖所示,今有若干資料,將其使用鏈位址法儲存起來,其示意圖如下,如果衝突了就把他接在別人的屁股上,真的是相當方便和簡單呢。

這些都是屬於開放位址法

注意對雙重hash要與再hash做好區分

比如依次插入:

比如49時衝突了(9+1)mod=0;

就插入0號位,58衝突時就正負1不行了都衝突了,就輪到2的平方也就是4

(8+4)mod10=2,所以就放入2號位

,同理其他都是這樣。

這個很有它的特點,當正常hash時產生了衝突就使用第二個hash函式,形如

hash1(key) = key % table_size

hash2(key) = prime – (key % prime)

有兩個hash的就可以算

第二個hash算出的結果就是待插入元素要從衝突位置往後移的格數,如果往後移了之後還是衝突就繼續往後移相同格數,就這樣一直移,如果都移過乙個迴圈了,還是沒找到可以插入的位置,那就是不能插入了,只能放棄。

比如要依次插入:

結果如圖所示

當插入6173時發生了衝突,那麼它第一次hash時的答案是3,則接下來double hash時就使用hash2函式,則將x=6173帶入,得出hash2=1,所以往後移一格,剛好沒有衝突,就插入了。

如果是輪到9679則會發現9號位置已經被佔,他的hash2=2,則往後移兩位,發現1號位也被佔了,就往後再移兩位,還不行,再移兩位,發現5號位是空著的,就插入5號位,

對於1989,hash2=6,無論怎麼移都不行,所以就放棄插入。

值得注意的是,移動是可以迴圈的不是說到9就不能移了,可以接著1繼續移。

希望我的註解可以幫到你。

Hash衝突解決方法

當關鍵字值域遠大於雜湊表的長度,而且事先並不知道關鍵字的具體取值時。衝突就難免會發 生。另外,當關鍵字的實際取值大於雜湊表的長度時,而且表中已裝滿了記錄,如果插入乙個新記錄,不僅發生衝突,而且還會發生溢位。因此,處理衝突和溢位是 雜湊技術中的兩個重要問題。1.開放位址法 開放位址法公式 h h ke...

Hash衝突解決方法

假設hash表大小為5 即5個槽位 現在要把2,5,6,7,8這幾個數儲存到hash表中,假設hash函式為hash num num size 簡單計算下,第乙個數2的hash值為2所以放到第三個槽中,第二個數5的hash值為0放到第乙個槽中,第三個數6的hash值為1放到第二個槽中,如下圖所示 1...

Hash衝突的幾種解決方法

1.開放定值法 也叫再雜湊法,當關鍵字key的雜湊位址p h key 出現衝突時,以p為基礎,產生另乙個雜湊位址p1,如果p1仍然衝突,再以p為基礎,產生另乙個雜湊位址p2,直到找出乙個不衝突的雜湊位址pi 將相應元素存入其中。通常都是用以下公式計算 hi h key di m i 1,2,n 其中...