問三:解決hash衝突的方法有哪些?

 

開放地址法

再hash的方法

拉鍊法

建立公共溢出區法

 

開放地址法:

1. 基本思想:當發生地址衝突的時候,按照某種方法繼續探測哈希表中的其他存儲單元,直到找到空位置爲止;  

2. 所用公式 Hi(key) = [H(key) + di]mod m;其中i = 1、2、3.....k(k<m-1)

H(key)爲關鍵字key的直接hash地址

m爲hash表的長度

di爲再次探測時的地址增量

 

再hash的方法:

當發生衝突時,使用第二個、第三個、哈希函數計算地址,直到無衝突。缺點:計算時間增加

 

拉鍊法:

在HashMap中就是使用拉鍊法來解決hash衝突的問題的;

將hash衝突的記錄存儲在統一鏈表中

 

建立公共溢出區:

建立公共溢出區的基本思想是:假設哈希函數的值域是[1,m-1],則設向量HashTable[0...m-1]爲基本表,每個分量存放一個記錄,另外設向量OverTable[0...v]爲溢出表所有關鍵字和基本表中關鍵字爲同義詞的記錄,不管它們由哈希函數得到的哈希地址是什麼,一旦發生衝突,都填入溢出表。

 

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