1. 程式人生 > >資料結構之查詢-雜湊查詢

資料結構之查詢-雜湊查詢

目錄

雜湊法(計算式查詢)

雜湊法又稱雜湊法、雜湊發、關鍵字地址計演算法,相應的表成為雜湊表、散列表等。

雜湊法的基本思想:首先在元素的關鍵字k和元素的儲存位置p之間建立一個對應關係H,是的p=H(k),H成為雜湊函式。

五個因素:①計算雜湊函式所需的時間。②關鍵字長度。③雜湊表的大小。④關鍵字分佈情況。⑤記錄查詢的頻率。

雜湊函式的構造方法

構造雜湊函式原則:一是函式本身便於計算;二是計算出來的地址分佈均勻。

1、數字分析法:事先要知道關鍵字集合,並且每個關鍵字的位數比雜湊表的地址為數多時,可以從關鍵字中選出分佈均勻的若干位構成雜湊地址。

2、平方取中法:當無法確定關鍵字中那幾位分佈較均勻時,可以先求出關鍵字的平方值,然後取平方值中間的幾位作為雜湊地址。

3、分段疊加法:按雜湊表地址為數將關鍵字分成位數相等的幾部分,然後將這幾部分相加,捨棄最高進位後的結果就是該關鍵字的雜湊地址。

4、除留餘數法:假設雜湊表的長度為m,p為小於等於m的最大素數,則雜湊函式為其中,%的模p為取餘運算。

5、偽隨機數法:採用一個為隨機函式作為雜湊函式,即H(key)=random(key)

處理衝突的方法

通過構造效能良好的雜湊函式,可以減少衝突,但一般不節能完全避免衝突,因此解決衝突時雜湊法的另一個關鍵技術。

1、開放定址法:這種方法也成再雜湊法,其基本思想是當關鍵字key的初始雜湊地址出現衝突時,以$h_0$
為基礎產生另一個地址$h_1$如果仍然衝突,再以
$h_0$為基礎,產生地址,直到不衝突地址
$h_i$將相應元素存入。

2、在雜湊法:這種方法的基本思想是同時構造多個不同的雜湊函式:
$H_i = RH_i(key) i=1,2,3...,k$
當雜湊地址$H_1 = RH_1(key)$衝突時,在計算$H_2 = RH_2(key)$直到衝突不在產生。這種方法不易產生聚集,但增加了計算時間。

3、鏈地址法:這種方法的基本思想是將所有的雜湊地址為i的元素構成一個稱為同義詞鏈的單鏈表,並將單鏈表的頭指標存在雜湊表的第i個單元中,因而查詢、插入、刪除、主要在同義詞鏈中進行。

4、建立公共溢位區:這種方法的基本思想是將雜湊表分為基本表和溢位表兩部分,凡是和基本表發生衝突的元素一律填入溢位表。

雜湊表的查詢過程

①首先計算 $h_0 = hash(K)$;

②如果單元$h_0$為空,則所查元素不存在;

③如果單元$h_0$中元素的關鍵字為K,則查詢到所查元素。

④否則重複下述解決衝突的過程:

a、按解決衝突的方法,找出下一個雜湊地址$h_i$;

b、如果單元$h_i$為空,則所查元素不存在;

c、如果單元$h_i$中元素的關鍵字為K,則查詢到所查元素。