雜湊(hash)表以及解決衝突的方式

2021-08-20 08:47:41 字數 892 閱讀 6368

把查詢表中的關鍵字對映成該關鍵字對應位址的函式,雜湊函式可能會把兩個或兩個以上的不同關鍵字對映到同一位址,稱這種情況為衝突,這些發生碰撞的不同關鍵字成為同義詞。

1)直接定址法

直接取關鍵字的摸個現行函式值為雜湊位址,雜湊函式為h(key)=a*key+b,其中a和b是常數,這種方法最簡單,並且不會產生衝突,適合關鍵字分布基本連續的情況。

2)除留餘數法

最簡單,最常用,常用方法假設雜湊表長度為m,取乙個不大於m但最接近或等於m的質數p,使用公式h(key)=key%p,除留餘數法關鍵是選好p,是每乙個關鍵字通過該函式轉換後等概率地對映到雜湊空間上的任意位址,從而盡可能減少衝突的可能性

以上兩種方法最常用,但還有數字分析法,平方取中法,摺疊法

數學遞推公式:h=(h(key)+d)%m  其中m表示雜湊表表長,d為增量序列,即步長。

缺點:可以使第i個雜湊位址的同義詞存入到第i+1個雜湊位址,這樣本應該存入到第i+1個雜湊位址的元素就爭奪第i+2個雜湊位址,從未造成大量的元素在相鄰的雜湊位址堆積起來,大大降低了查詢效率。

②平方探測法

d=1^2,-1^2,........,k^2,-k^2,其中k<=m/2,m必須是乙個可以表示成4k+3的質數,又稱二次探測法。

優缺點:可以避免堆積的產生,但是不能探測到雜湊表上所有的單元,但是至少能探測到一半單元。

③再雜湊法

使用兩個雜湊函式,當第乙個雜湊函式得到的位址發生衝突之後,利用第二個雜湊函式計算該關鍵字的位址增量。再雜湊法中,最多經過m-1次探測會表裡表中所有位置

④偽隨機序列法

當d=偽隨機數序列,成為偽隨機序列法

如圖所示,同樣很簡單...

hash構造和解決雜湊衝突

對於構造雜湊來說,主要包括直接位址法 平方取中法 除留餘數 法等。對於處理雜湊衝突來說,最常用的處理衝突的方法有開放定址法 再雜湊法 鏈位址法 建立公共溢位區等方法。sgl版本使用鏈位址法,使用乙個鍊錶保持相同雜湊值的元素。雖然鏈位址法並不要求雜湊桶長度必須為質數,但sgi stl仍然以質數來設計雜...

解決雜湊(HASH)衝突的主要方法

雖然我們不希望發生衝突,但實際上發生衝突的可能性仍是存在的。當關鍵字值域遠大於雜湊表的長度,而且事先並不知道關鍵字的具體取值時 衝突就難免會發 生。另外,當關鍵字的實際取值大於雜湊表的長度時,而且表中已裝滿了記錄,如果插入乙個新記錄,不僅發生衝突,而且還會發生溢位 因此,處理衝突和溢位是 雜湊技術中...

解決雜湊(HASH)衝突的主要方法

雖然我們不希望發生衝突,但實際上發生衝突的可能性仍是存在的。當關鍵字值域遠大於雜湊表的長度,而且事先並不知道關鍵字的具體取值時。衝突就難免會發 生。另外,當關鍵字的實際取值大於雜湊表的長度時,而且表中已裝滿了記錄,如果插入乙個新記錄,不僅發生衝突,而且還會發生溢位。因此,處理衝突和溢位是 雜湊技術中...