雜湊表及處理衝突的方法

2022-10-10 22:36:20 字數 2056 閱讀 1062

雜湊法又稱 雜湊法、雜湊法以及關鍵字位址計算法 等,相應的表稱為 雜湊表。 這種方法的基本思想是: 首先在元素的關鍵字

k 和元素的儲存位置

p 之間建立乙個對應關係

f ,使得 p=f(k) , f 稱為雜湊函式 。建立雜湊表時,把關鍵字為 k 的元素 直接存入位址為 f(k) 的單元;以後當查詢關鍵字為 k 的元素時,再利用雜湊函式計算出該元素的儲存位置 p=f(k) ,從而達到按關鍵 字直接訪問元素的目的。

當關鍵字集合很大時,關鍵字值不同的元素可能會映象到雜湊表的同一位址上 ,即 k1 ≠ k2  ,但 h ( k1 ) =h ( k2 ),這種現象稱為衝突,此時稱 k1 和 k2 為同義詞。實際中,衝突是不可避免的,只能通過改進雜湊函式的效能來減少衝突。

綜上所述,雜湊法主要包括以下兩方面的內容:

1 )如何構造雜湊函式

2 )如何處理衝突。

構造雜湊函式的原則是: ① 函式本身便於計算; ② 計算出來的位址分布均勻,即對任一關鍵字 k , f(k)  對應不同位址的概率相等,目的是盡可能減少衝突。

下面介紹構造雜湊函式常用的五種方法。

1 .   數字分析法

如果事先知道關鍵字集合,並且每個關鍵字的位數比雜湊表的位址碼位數多時,可以從關鍵字中選出分布較均勻的若干位,構成雜湊位址。

2 .   平方取中法

當無法確定關鍵字中哪幾位分布較均勻時,可以先求出關鍵字的平方值,然後按需要取平方值的中間幾位作為雜湊位址。這是因為:平方後中間幾位和關鍵字中每一位都相關,故不同關鍵字會以較高的概率產生不同的雜湊位址。

3 .   分段疊加法

這種方法是按雜湊表位址位數將關鍵字分成位數相等的幾部分(最後一部分可以較短),然後將這幾部分相加,捨棄最高進製後的結果就是該關鍵字的雜湊位址。具體方法有摺疊法與移位法。移位法是將分割後的每部分低位對齊相加,摺疊法是從一端向另一端沿分割界來回摺疊(奇數段為正序,偶數段為倒序),然後將各段相加。

4 .   除留餘數法

假設雜湊表長為 m , p 為小於等於 m 的最大素數,則雜湊函式為

h ( k ) =k  %  p  ,其中 % 為模 p 取餘運算。

5 .   偽隨機數法

採用乙個偽隨機函式做雜湊函式,即 h(key)=random(key) 。

在實際應用中,應根據具體情況,靈活採用不同的方法,並用實際資料測試它的效能,以便做出正確判定。通常應考慮以下五個因素   :

l           計算雜湊函式所需時間   (簡單)。

l           關鍵字的長度。

l           雜湊表大小。

l           關鍵字分布情況。

l           記錄查詢頻率

8.4.2   處理衝突的 方法

通過構造效能良好的雜湊函式,可以減少衝突,但一般不可能完全避免衝突,因此解決衝突是雜湊法的另乙個關鍵問題。建立雜湊表和查詢雜湊表都會遇到衝突,兩種情況下解決衝突的方法應該一致。下面以建立雜湊表為例,說明解決衝突的方法。常用的解決衝突方法有以下四種:

1.            開放定址法

這種方法也稱 再雜湊法 , 其基本思想是:當關鍵字 key 的雜湊位址 p=h ( key )出現衝突時,以 p 為基礎,產生另乙個雜湊位址 p1 ,如果 p1 仍然衝突,再以 p 為基礎,產生另乙個雜湊位址 p2 , … ,直到找出乙個不衝突的雜湊位址 pi  , 將相應元素存入其中。

2.            再雜湊法

這種方法是同時構造多個不同的雜湊函式:

h i =rh 1 ( key ) i=1 , 2 , … , k

當雜湊位址 h i =rh 1 ( key )發生衝突時,再計算 h i =rh 2 ( key )……,直到衝突不再產生。這種方法不易產生聚集,但增加了計算時間。

3.            鏈位址法

這種方法的基本思想是將所有雜湊位址為 i 的元素構成乙個稱為同義詞鏈的單鏈表 ,並將單鏈表的頭指標存在雜湊表的第 i 個單元中,因而查詢、插入和刪除主要在同義詞鏈中進行。鏈位址法適用於經常進行插入和刪除的情況。

4.    建立公共溢位區

這種方法的基本思想是:將雜湊表分為基本表和溢位錶兩部分,凡是和基本表發生衝突的元素,一律填入溢位表

雜湊表(雜湊表)及雜湊表處理衝突的方法

前面介紹了靜態查詢表以及動態查詢表中的一些查詢方法,其查詢的過程都無法避免同查詢表中的資料進行比較,查詢演算法的效率很大程度取決於同表中資料的查詢次數。而本節所介紹的雜湊表可以通過關鍵字直接找到資料的儲存位置,不需要進行任何的比較,其查詢的效率相較於前面所介紹的查詢演算法是更高的。在初中的數學課本中...

雜湊表and處理衝突的方法

雜湊法又稱雜湊法 雜湊法以及關鍵字位址計算法等,相應的表稱為雜湊表。這種方法的基本思想是 首先在元素的關鍵字k和元素的儲存位置p之間建立乙個對應關係f,使得p f k f稱為雜湊函式。建立雜湊表時,把關鍵字為k的元素直接存入位址為f k 的單元 以後當查詢關鍵字為k的元素時,再利用雜湊函式計算出該元...

雜湊表處理衝突的方法

fi key f key di mod m di 1,2,3,4,m 1 會出現不是同義詞卻需要爭奪乙個位址的情況,我們稱這種情況為堆積。關鍵字集合 12,67,56,16,25,37,22,29,15,47,48,34 下標0 1234 5678 91011關鍵字 1225 3715 1629 4...