Hash表處理衝突的方法

2021-10-02 22:59:59 字數 868 閱讀 8087

1.開放定址

線性探測

hi=(hash(key)+di) mod m ( 1≤i < m )

其中:hash(key)為雜湊函式

m 為雜湊表長度

di 為增量序列1,2,……,m-1,且di=i

二次探測

hi=(hash(key)±di) mod m

其中:hash(key)為雜湊函式

m 為雜湊表長度,m 要求是某個4k+3 的質數(k 是整數)

di 為增量序列12,-12,22,-22,……,q2,-q2 且q≤1/2 (m-1)

雙雜湊函式

hi=(hash(key)+i*rehash(key)) mod m (i=1,2,……,m-1)

其中:hash(key),rehash(key)是兩個雜湊函式,

m 為雜湊表長度

2.拉鍊法

設雜湊函式得到的雜湊位址域在區間[0,m-1]上,以每個雜湊位址作為乙個指標,指向乙個鏈,即分配指標陣列elemtype eptr[m];建立m 個空鍊錶,由雜湊函式對關鍵碼轉換後,對映到同一雜湊位址i 的同義詞均加入到eptr[i]指向的鍊錶中。

3.建立乙個公共溢位區

設雜湊函式產生的雜湊位址集為[0,m-1],則分配兩個表:

乙個基本表elemtype base_tbl[m];每個單元只能存放乙個元素;

乙個溢位表elemtype over_tbl[k];只要關鍵碼對應的雜湊位址在基本表上產生衝突,則所有這樣的元素一律存入該表中。查詢時,對給定值kx 通過雜湊函式計算出雜湊位址i,先與基本表的base_tbl[i]單元比較,若相等,查詢成功;否則,再到溢位表中進行查詢。

處理Hash衝突的方法

1 開發定址發 h i h key di mod m 其中i 1,2,3 m 1 m hash表的長度 h key 為hash函式 di為增量序列,序列的意思是如果得到的h i 上已經有元素,取di 1。根據di的取值方式不同可以分為3中情況 1 線性探測再雜湊 這是di取值為1,2,3 m 1,缺...

hash衝突處理

1 衝突是如何產生的?上文中談到,雜湊函式是指如何對關鍵字進行編址的規則,這裡的關鍵字的範圍很廣,可視為無限集,如何保證無限集的原資料在編址的時候不會出現重複呢?規則本身無法實現這個目的。舉乙個例子,仍然用班級同學做比喻,現有如下同學資料 張三,李四,王五,趙剛,吳露.假如我們編址規則為取姓氏中姓的...

Hash表和Hash衝突

hash表中的元素儲存位址是通過hash函式計算出來的,當要取出指定元素的時候,直接通過hash函式計算出元素的儲存位址。有時候會出現key不同,但是通過hash函式計算出來的值相同,這個值相同意味著這兩個key要存在同一位置,這顯然不對,這就是hash衝突。hash函式有多種構造方法,常見的有直接...