鏈地址法查找成功與不成功的平均查找長度ASL


晚上,好像是深夜了,突然寫到這類題時遇到的疑惑,恰恰這個真題只讓計算成功的ASL,但我想學一下不成功的計算,只能自己來解決了,翻了李春葆和嚴蔚敏的教材沒有找到相關鏈地址法的計算,於是大致翻到兩篇不錯的博客,輾轉了牛客面試題,做個小總結。

題目1

將關鍵字序列{1 13 12 34 38 33 27 22} 散列存儲到散列表中。散列函數為:H(key)=key mod 11,處理沖突采用鏈地址法,求在等概率下查找成功和查找不成功的平均查找長度

1 mod 11=1,所以數據1是屬於地址1
13 mod 11=2,所以數據13是屬於地址2
12 mod 11=1,所以數據12也是屬於地址1(這個數據是數據1指針的另一個新數據)
34 mod 11=1,所以數據34是屬於地址1(這個數據是數據12指針的另一個新數據)
38 mod 11=5,所以數據38是屬於地址5
33 mod 11=0,所以數據33是屬於地址0
27 mod 11=5,所以數據27是屬於地址5,(這個數據是數據38指針的另一個新數據)
22 mod 11=0,所以數據22是屬於地址0,(這個數據是數據33指針的另一個新數據)

鏈地址法處理沖突構造所得的哈希表如下(采用頭插法):
鏈地址法

查找成功時: ASL=(3×1+2×3+1×4)/8=13/8, 其中紅色標記為查找次數。也就是說,需查找1次找到的有4個,其它以此類推… 牛客中京東的一道面試題就是這個,成功的解法絕對唯一。

我就通俗解釋了,計算時貌似是豎着看,查找次數×個數,然后除以關鍵字個數,記為n=8

查找不成功時:ASL=(3+4+2+1+1+3+1+1+1+1+1)/11=19/11

這里注意:

鏈接法關於這個失敗長度有兩種觀點,一種算空結點,一種不算。據說王道408數據結構例題是算的,我沒入手暫不曉得。

該篇博客選擇計算,通俗解釋:計算時就橫着看,數所有查找次數,然后除以哈希表表長,記為m=11

題目2

假設散列表的長度是13,三列函數為H(K) = k % 13,給定的關鍵字序列為{32, 14, 23, 01, 42, 20, 45, 27, 55, 24, 10, 53}。畫出用拉鏈法解決沖突時構造的哈希表,並求出在等概率情況下,該方法的查找成功和查找不成功的平均查找長度。

img

查找成功時的平均查找長度:

ASL = (1×6+2×4+3×1+4×1)/12 = 7/4

結合上個題,這里的成功算法很容易就理解了

查找不成功時的平均查找長度:

ASL = (4+2+2+1+2+1)/13

這里就不算空指針。。。了

注意:查找成功時,分母為哈希表元素個數,查找不成功時,分母為哈希表長度

友情提示:別糾結不成功的計算了,深夜了,該睡了

參考:

鏈地址法和線性探測法求查找成功與不成功的平均查找長度ASL

哈希表——線性探測法、鏈地址法、查找成功、查找不成功的平均長度

計算用鏈地址法作為解決沖突方法的平均查找長度是


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM