1. 程式人生 > 實用技巧 >雜湊查詢(重點講解查詢失敗的ASL)

雜湊查詢(重點講解查詢失敗的ASL)

本文以例題形式講解雜湊查詢中,散列表的構建,以及查詢成功的ASL和失敗的ASL。重點講解求解失敗的ASL的過程,巨詳細

【2010年全國試題41(10分)】將關鍵字序列(7、8、30、11、18、9、14)雜湊儲存到散列表中。散列表的儲存空間是一個下標從0開始的一維陣列,雜湊函式為: H(key) = (keyx3) MOD 7,處理衝突採用線性探測再雜湊法,要求裝填(載)因子為0.7。

(1) 請畫出所構造的散列表。

(2) 分別計算等概率情況下查詢成功和查詢不成功的平均查詢長度。

表1-1
key78301118914
H(key)0365560
實際雜湊位置0365781
查詢成功需要探測次數1111332

(1)裝填因子\alpha =count(key)/n=0.7, 所以 n = 10

表 1-2
0123456789
71481130189

(2)根據表1-1中 查詢查詢成功需要探測次數,ASL_{success} = (1+1+1+1+3+3+2)/7=\frac{12}{7}

接下來重點講解查詢失敗的ASL

求解查詢失敗的ASL需要計算出每個雜湊位置(即每個模對應的值)查詢失敗所需要的的次數,本題雜湊函式模的是7,所以只需要計算模為0,1,2,3,4,5,6的關鍵字查詢失敗所需要的次數。查詢到空說明查詢失敗,查詢示意圖如下

  • 查詢模為0的關鍵字,失敗時比較的次數為3


  • 查詢模為1的關鍵字,失敗時比較次數為2


  • 查詢模為2的關鍵字,失敗時比較次數為1


  • 查詢模為3的關鍵字,失敗時比較次數為2


  • 查詢模為4的關鍵字,失敗時比較次數為1


  • 查詢模為5的關鍵字,失敗時比較次數為5


  • 查詢模為6的關鍵字,失敗時比較次數為4


將上述過程整理成表格如下

表1-3
0123456789
71781130189
各個模查詢失敗需要比較的次數321215

查詢失敗的平均比較次數為:ASL_{failer} = (3+2+1+2+1+5+4)/7=\frac{18}{7}