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