雜湊表——線性探測法、鏈地址法、查詢成功、查詢不成功的平均長度
四、雜湊表的裝填因子
裝填因子 = (雜湊表中的記錄數) / (雜湊表的長度)
裝填因子是雜湊表裝滿程度的標記因子。值越大,填入表中的資料元素越多,產生衝突的可能性越大。
五、不同處理衝突的平均查詢長度
例:
假設散列表的長度是13,三列函式為H(K) = k % 13,給定的關鍵字序列為{32, 14, 23, 01, 42, 20, 45, 27, 55, 24, 10, 53}。分別畫出用線性探測法和拉鍊法解決衝突時構造的雜湊表,並求出在等概率情況下,這兩種方法的查詢成功和查詢不成功的平均查詢長度。
(1)線性探測法:
查詢成功時的查詢次數等於插入元素時的比較次數,查詢成功的平均查詢長度為:
ASL = (1+2+1+4+3+1+1+3+9+1+1+3)/12 = 2.5
查詢成功時的查詢次數:第n個位置不成功時的比較次數為:第n個位置到第1個沒有資料位置的距離:如第0個位置取值為1,第11個位置取值為3,第12個位置取值2
查詢不成功的平均查詢次數為:
ASL = (1+13+12+11+10+9+8+7+6+5+4+3 + 2)/ 13 = 91/13
雜湊表查詢不成功怎麼計算?
解答:先建好表,然後可以算出每個位置不成功時的比較次數之和,再除以表空間個數!
例如:雜湊函式為hash(x)=x MOD 11,用線性探測,建立了雜湊表之後,如何求查詢不成功時的平均查詢長度!?
地址:0 1 2 3 4 5 6 7 8 9 10
資料:33 1 13 12 34 38 27 22 - - -
成功次數:1 1 1 3 4 1 2 8
不成功次數:9 8 7 6 5 4 3 2 1 1 1
查詢成功時的平均查詢長度:ASL=(1+1+1+3+4+1+2+8)/8 =47/8
查詢不成功時的平均查詢長度:ASL=(9+8+7+6+5+4+3+2+1+1+1)/11
說明:
第n個位置不成功時的比較次數為,第n個位置到第1個沒有資料位置的距離。
如:第0個位置到第1個沒有資料位置(8)的距離為9!
(1) 開放定址法 地址: 0 1 2 3 4 5 6 7 8 9 10 11 12 資料: 39 12 28 15 42 44 6 25 - - 36 - 38 成功次數: 1 3 1 2 2 1 1 9 1 1 不成功次數: 9 8 7 6 5 4 3 2 1 1 2 1 10 查詢成功時的平均查詢長度:ASL=(1+3+1+2+2+1+1+9+1+1)/10 =2.2 查詢不成功時的平均查詢長度:ASL=(9+8+7+6+5+4+3+2+1+1+2+1+10)/13=4.54(2)鏈地址法
查詢成功時的平均查詢長度:
ASL = (1*6+2*4+3*1+4*1)/12 = 7/4
查詢不成功時的平均查詢長度:
ASL = (4+2+2+1+2+1)/13
注意:查詢成功時,分母為雜湊表元素個數,查詢不成功時,分母為雜湊表長度。