哈希表衝突解決方法方法總結

參考書籍:《大話數據結構》

1. 開放定址法:一旦發生衝突,就去尋找下一個空的散列地址。

只要列表足夠大,空的散列地址總能找到,並將記錄存入。

        線性探測法:當使用線性探測法進時,會吹按不是同義詞卻需要爭奪一個地址的情況,這種現象是堆積。

        二次探測法:增加平方運算爲了不讓關鍵字都聚集在某一塊區域,解決堆積問題。

        隨機探測法:在衝突時,對於位移量di採用隨機函數計算得到。注意這裏的隨機其實是僞隨機,根據隨機種子得到

2. 再散列函數法:在衝突時,換用一個散列函數計算。

這種方法使得關鍵字不產生聚集,但同時增加了計算時間。

3. 鏈地址法:將所有關鍵字爲同義詞的記錄存儲在一個單鏈表中,在三列表中只存儲所有同義詞子表的頭指針。

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

4. 公共溢出區法:爲所有衝突的關鍵字建立一個公共的溢出區來存放。

 

在查找時,對給定值通過散列函數計算出散列地址後,鹹魚基本表的相應位置進行對比,如果想等則查找成功;如果不能,則到溢出表進行順序查找。

#################################################

哈希函數的構造方法

1. 直接定址法:取關鍵字的某個線性函數作爲散列地址

需要事先知道關鍵字的分佈情況,適合查找表小且連續的情況

2. 數字分析法

3. 平方取中法

4. 除留餘數法:

最常用的哈希函數構造方法,不僅可以直接mod,也可以平方取中、摺疊後在mod

5. 隨機數法

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章