通過雜湊表進行查詢的特點是:不需要比較關鍵字,而是通過雜湊函式計算出關鍵字的位置。一般來講,為了進行高效率的查詢,要求雜湊函式簡單均勻、空間利用率高、關鍵字之間的衝突少。
關於雜湊查詢的實現需要著重考慮兩個問題:1,雜湊函式的設計 2,解決衝突問題函式構造方法
常用的方法有:
1,直接定址法:h(key)=axkey+b,特點:簡單、無衝突,但造成儲存空間浪費
2,數字分析法 3,平方取中法 4,摺疊法 5,隨機數法
6,除留餘數法:h(key)=key%p,p一般取小於等於表長的質數,表長用m來表示,儲存元素的個數用n來表示
因為除留餘數法最為常用,下面以除留餘數法來介紹解決衝突的方法
衝突的解決
衝突:如果有多個關鍵字通過雜湊函式所計算出的結果相同,則稱這些關鍵字互相衝突,並將這些關鍵字稱為同義詞
1,開放定址法: hi=(h(key)+di)%n,i=1,2,3…n-1 di表示第i次衝突的增量,hi為第i次衝突後應探測的位址
a,線性探測再雜湊:增量為,d1=1,d2=2,d3=3,… 特點,空間利用率高,但容易發生聚集現象
b,二次探測再雜湊:增量為,d1=1,d2=-1,d3=4,d4=-4,d5=9,d6=-9,…分別為正負1,2,3,4…的平方
c,偽隨機數探測再雜湊:增量di為偽隨機數
2,鏈位址法(拉鍊法):
假設對n個數的雜湊函式為h(key)=key%p。建立陣列array[p],陣列下標分別對應所計算出的雜湊值,將每個數儲存在它對應的位置上。若發生衝突的話,將該衝突的數掛在它的同義詞後面(類似於圖的鄰接表儲存)
3,再雜湊法:再設計乙個雜湊函式來解決衝突
平均查詢長度(asl)
雜湊查詢理論上平均查詢長度為常數1,即asl=1,但由於衝突,所以asl總是大於1的。引入裝填因子α,α=元素個數/表長=n/m。
1,開放定址法
其中以線性探測在雜湊為例:
它的平均查詢長度,asl(平均)=(1+1/(1-α))/2
asl(成功)=(每個元素查詢成功的比較次數相加)/元素個數
asl(失敗)=(每個元素查詢失敗的比較次數相加)/p
對於表長m=14,元素個數n=11,雜湊函式為h(key)=key%13,其中p=13的雜湊表:下標0
1234
5678
9101112
13元素\1
2345
6789
1011
\asl(成功)=(1+1+…+1)/11=1
asl(失敗)=(1+12+11+…+3+2)/13=6
2,鏈位址法
asl(平均)=1+α/2
asl(成功)=(每個元素查詢成功的比較次數相加)/元素個數
asl(失敗)=(每個元素查詢失敗的比較次數相加)/p
對於下圖:
元素個數n=12,雜湊函式為h(key)=key%11,其中p=11。
asl(成功)=(6x1+4x2+3+4)/12=7/4
asl(失敗)=(4+2x3+1+1)/11=12/11(其中和空結點比較的次數計為0)
查詢 雜湊表查詢(雜湊表)
1 雜湊表查詢定義 雜湊技術是在記錄的儲存位置和它的關鍵字之間建立乙個確定的對應關係f,使得每個關鍵字key對應乙個儲存位置f key 查詢時,根據這個確定的對應關係找到給定值key的對映f key 若查詢集合中存在這個記錄,則必定在f key 的位置上。採用雜湊技術將記錄儲存在一塊連續的儲存空間中...
雜湊表(雜湊表)查詢
雜湊技術是在記錄的儲存位置和它的關鍵字之間建立起乙個確定的對應關係f,使每個關鍵字key對應乙個儲存位置f key f為雜湊函式,又稱雜湊函式。採用雜湊技術將記錄儲存在一塊連續的儲存空間中,這塊連續的儲存空間成為雜湊表 雜湊表。直接用key值的某個線性函式當位址。f key a key b 簡單,不...
雜湊表 雜湊表 查詢
直接定址法 數字分析法 平方取中法 平方取中法是將關鍵字平方之後取中間若干位數字作為雜湊位址。摺疊法摺疊法是將關鍵字從左到右分割成位數相等的幾部分,然後將這幾部分疊加求和,並按雜湊表表長取後幾體作為雜湊位址。除留餘數法 隨機數法 選擇乙個隨機數,取關鍵字的隨機函式值為它的雜湊位址。即 f key r...