處理散列沖突的方法


1. 開放定址法

開放定址法就是一旦發生沖突,就去尋找下一個空的散列地址,只要散列表足夠大,空的散列地址總能找到,並將記錄存入。

Hi = (H(key) + di) MOD m, i=1,2,…, k(k<=m-1),其中H(key)為散列函數,m為散列表長,di為增量序列。di可有下列三種取法:

(1)di=1,2,3,…, m-1,稱為線性探測再散列;

(2)di=1^2, -(1^2), 2^2, -(2^2), 3^2, …, ±(k^2),(k<=m/2),稱二為次探測再散列;

(3)di=偽隨機數序列,稱為偽隨機探測再散列。

所謂偽隨機數,用同樣的隨機種子,將得到相同的數列。

2. 再散列函數法

Hi=RHi(key), i=1,2,…,k RHi均是不同的散列函數(比如除留余數、折疊、平方取中),在同義詞產生地址沖突時就換用另一個散列函數計算散列地址,直到碰撞不再發生,這種方法不易產生“聚集”,但增加了計算時間。

3. 鏈地址法

將所有關鍵字為同義詞的記錄存儲在一個單鏈表中,稱這種表為同義詞子表,在散列表中只存儲所有同義詞子表的頭指針。

 

鏈地址法對於可能會造成很多沖突散列函數來說,提供了絕不會出現找不到地址的保障。但也就帶來了查找時需要遍歷單鏈表的性能損耗。

4. 公共溢出區法

為所有沖突的關鍵字記錄建立一個公共的溢出區來存放。在查找時,對給定關鍵字通過散列函數計算出散列地址后,先與基本表的相應位置進行比對,如果相等,則查找成功;如果不相等,則到溢出表進行順序查找。如果相對於基本表而言,在有沖突的數據很少的情況下,公共溢出區的結構對查找性能來說還是非常高的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM