Hash衝突的幾種解決方法

2022-08-24 14:09:10 字數 599 閱讀 5825

1.  開放定值法:

也叫再雜湊法,當關鍵字key的雜湊位址p=h(key)出現衝突時,以p為基礎,產生另乙個雜湊位址p1,如果p1仍然衝突,再以p為基礎,產生另乙個雜湊位址p2,…,直到找出乙個不衝突的雜湊位址pi ,將相應元素存入其中。

通常都是用以下公式計算:hi=(h(key)+di)% m   i=1,2,…,n

其中h(key)為雜湊函式,m 為表長,di稱為增量序列。增量序列的取值方式不同,相應的再雜湊方式也不同。主要有三種:

線性探測再雜湊(衝突發生時,順序檢視表中下一單元,直到找出乙個空單元或查遍全表),二次探測再雜湊(衝突發生時,在表的左右進行跳躍式探測,直到找到空單元),偽隨機探測再雜湊。

這種方法的基本思想是將所有雜湊位址為i的元素構成乙個稱為同義詞鏈的單鏈表,並將單鏈表的頭指標存在雜湊表的第i個單元中,因而查詢、插入和刪除主要在同義詞鏈中進行。鏈位址法適用於經常進行插入和刪除的情況。像之前看到的hashmap 就是利用這種方法解決hash衝突的。

3.  再雜湊法:

多寫幾個雜湊函式,算出來乙個hashcode 重複的就用另乙個雜湊函式算,直到算出來不一樣。

4.  建立乙個公共溢位區域,就是把衝突的都放在另乙個地方,不在表裡面。

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表的衝突解決方法

如圖所示,今有若干資料,將其使用鏈位址法儲存起來,其示意圖如下,如果衝突了就把他接在別人的屁股上,真的是相當方便和簡單呢。這些都是屬於開放位址法 注意對雙重hash要與再hash做好區分 比如依次插入 比如49時衝突了 9 1 mod 0 就插入0號位,58衝突時就正負1不行了都衝突了,就輪到2的平...