《算法導論》中關於鏈式哈希命中查找運行時間數學證明,一上來就給出公式沒看明白,在網上搜了一圈沒找到解答心中疑問的文字,於是寫下這篇。
題目是計算在鏈式哈希表中,在均勻散列的情況下,命中查找的運行時間。
分析:命中查找的運行時間,就是一個鍵數目n的函數,按照成本模型便是求命中查找的比較次數隨n增長的增長率,即比較次數爲n的函數T(n)。
設要查找鍵a,a被散列到b鏈表中。命中查找的比較次數爲b鏈表中排在a前面的元素個數+1.於是題目被轉化爲鍵a被插入到b鏈表後,後續插入的所有鍵被散列到b鏈表的個數+1。
設隨機變量X表示鍵a被插入到b鏈表後,後續插入的所有鍵被散列到b鏈表的個數。
設隨機變量Yi表示第i次插入鍵時,鍵被散列到b鏈表中的指示器隨機變量。(指示器隨機變量即當事件發生時爲1,不發生時爲0.這裏表示第i次插入鍵時,鍵被散列到b鏈表中爲1,散列到其他鏈表中爲0)
設隨機變量Zi表示第i次插入鍵時,選中a作爲插入的鍵的指示器隨機變量。
有
X = ∑<i從1到n>(Zi ∑<k從i+1到n>Yk) ①
E[Zi] = 1/n ②
E[Yi] = 1/m ③
由上3式得
E[X] = ............ 此處省略20行 ............ = (n-1)/(2m)
題目所求期望即爲1 + (n-1)/(2m) = 1 + α/2 - α/(2n)
T(n) = θ(1 + α)
■