如何計算哈希表查找失敗時的平均查找長度

題目描述:
1.請回答採用線性探測再散列和鏈地址法處理衝突構建的哈希表中,查找失敗時的平均查找長度如何計算?
例:已知一組關鍵字(19,14,23,1,68,20,84,27,55,11,10,79)
哈希函數爲: H(key)=key MOD 13,哈希表長爲m=15,設每個記錄的查找概率相等,採用以上兩種方法處理衝突,查找失敗時的平均查找長度各是多少?

今天數據結構老師講的哈希表,留了一個“如何計算哈希表查找失敗時的平均查找長度”可是把我給難爲住了。(從中午12:00到下午16:00才搞懂,果然還是我太vegetable了

幾個小夥兒伴紛紛查資料,又是計算又是討論,但是始終沒有得到一致的結論。

糾結的點主要就是:分母應該是哈希表長還是哈希函數裏所給的MOD後面的13呢。查了很多資料發現裏面的說法不一,而且查到的每一篇博客所給的題目都是除數(MOD後面的那個數)和哈希表長相等。(啊,可能我找的太少啦吧,找啦兩三篇都是這樣就去問老師啦)

後來同學告訴我慕課上面講的就有...anyway~現在是懂了,下面我就用大白話來描述一下我對這個“查找失敗時的平均查找長度”的理解

查找失敗的次數就是指:根據哈希函數算出來你所要查找的關鍵字的位置,如果這個位置存的不是你的目標關鍵字,那麼就按照你所定的存儲哈希函數的規則,也就是所在位置+1向後尋找,直到找到你所要的關鍵字,如果遇到了表中的空位,那麼就說明這個表中沒有這個關鍵字,那麼查找失敗的次數就是你從“通過哈希函數算出的位置”到“表中的第一個遇到的空位”所經過的位數

也就是說,分母指的是哈希表所給定的長度!!!

就比如說,你的哈希表如下所示(由上面題目“採用線性探測再散列”生成的哈希表;):

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
  14 1 68 27 55 19 20 84 79 23 11 10    

創建過程爲:按照關鍵字序列順序依次向哈希表中填入,發生衝突後按照“線性探測”探測到第一個空位置填入

現在我問你:我想要查找關鍵字“2”,那麼我需要比較多少次才能知道失敗了呢?

答:根據所生成的表可以很容易的看出,關鍵字“2”不存在於表中。通過題目所給的哈希函數H(key)=key MOD 13可以算出關鍵字“2”應該在表中序號爲2的位置,而如果2的位置所存的數與關鍵字“2”不相等,那麼我需要按照“線性探測”直到找到關鍵字“2”。如果我沒有找到關鍵字“2”,反而是遇到了空的位置,那麼就說明關鍵字“2”查找失敗了,那麼我所走的步數就是查找失敗的次數。把所有的位置查找失敗的次數加起來除以表的總長度,就是“查找失敗時的平均查找長度”

ps:如果有錯誤歡迎指正,來自一個卑微的計算機大學僧

答案(以線性探測再散列爲例):第一行:序號;第二行:關鍵字;第三行:查找成功時查找長度;第四行:查找失敗時查找長度

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
  14 1 68 27 55 19 20 84 79 23 11 10    
  1 2 1 4 3 1 1 3 9 1 1 3    
1 13 12 11 10 9 8 7 6 5 4 3 2 1 1

查找失敗時的平均查找長度=(1+13+12+11+10+9+8+7+6+5+4+3+2+1+1)/ 15 = 93 / 15

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章