參考書籍:《大話數據結構》
1. 開放定址法:一旦發生衝突,就去尋找下一個空的散列地址。
只要列表足夠大,空的散列地址總能找到,並將記錄存入。
線性探測法:當使用線性探測法進時,會吹按不是同義詞卻需要爭奪一個地址的情況,這種現象是堆積。
二次探測法:增加平方運算爲了不讓關鍵字都聚集在某一塊區域,解決堆積問題。
隨機探測法:在衝突時,對於位移量di採用隨機函數計算得到。注意這裏的隨機其實是僞隨機,根據隨機種子得到
2. 再散列函數法:在衝突時,換用一個散列函數計算。
這種方法使得關鍵字不產生聚集,但同時增加了計算時間。
3. 鏈地址法:將所有關鍵字爲同義詞的記錄存儲在一個單鏈表中,在三列表中只存儲所有同義詞子表的頭指針。
鏈地址法對於可能會造成很多衝突的散列函數來說,提供了絕不會出現找不到地址的保障,但也帶來了查找時需要遍歷單鏈表的性能損耗。
4. 公共溢出區法:爲所有衝突的關鍵字建立一個公共的溢出區來存放。
在查找時,對給定值通過散列函數計算出散列地址後,鹹魚基本表的相應位置進行對比,如果想等則查找成功;如果不能,則到溢出表進行順序查找。
#################################################
哈希函數的構造方法
1. 直接定址法:取關鍵字的某個線性函數作爲散列地址
需要事先知道關鍵字的分佈情況,適合查找表小且連續的情況
2. 數字分析法
3. 平方取中法
4. 除留餘數法:
最常用的哈希函數構造方法,不僅可以直接mod,也可以平方取中、摺疊後在mod
5. 隨機數法