1. 程式人生 > >雜湊表——線性探測法、鏈地址法、查詢成功、查詢不成功的平均長度

雜湊表——線性探測法、鏈地址法、查詢成功、查詢不成功的平均長度

四、雜湊表的裝填因子

裝填因子 = (雜湊表中的記錄數) /  (雜湊表的長度)

裝填因子是雜湊表裝滿程度的標記因子。值越大,填入表中的資料元素越多,產生衝突的可能性越大。

五、不同處理衝突的平均查詢長度

技術分享

例:

假設散列表的長度是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

注意:查詢成功時,分母為雜湊表元素個數,查詢不成功時,分母為雜湊表長度。