從順序查找窺探平均時間復雜度分析的一般化方法


順序查找是在n 個元素的列表中查找一個給定項(或者說查找鍵)的一個簡單的算法。它會檢查列表中的連續元素,直到發現了匹配查找鍵的元素或者到達了列表的終點。

我們假設對輸入規模為n 的數據做若干次查找,為了分析該算法的平均時間復雜度,還需要對規模為n 的輸入做一些假設。

標准的假設是:

  • 成功查找的概率是P(0 ≤ P ≤ 1)
  • 對於任意的正整數i(1 ≤ i ≤ n),第一次匹配發生在列表第i 個位置的概率是相同的

基於這種假設,容易得出,在成功查找的情況下,對於任意的i,第一次匹配發生在列表的第i 個位置的可能性是p/n,並且在這種情況下該算法所做的比較次數顯然是i。而在不成功查找的情況下,比較的次數是n,發生的概率是1-P。

因此,鍵值比較的平均次數:

Cavg(n) = 1·P(比較次數為1) + 2·P(比較次數為2) + 3·P(比較次數為3) + ... + n·P(比較次數為n) + n·P(查找失敗)

      = 1·P/n + 2·P/n + ... + n·P/n + n(1-P)

    = P(n+1)/2 + n(1-P)

我們可以用一些簡單的例子來驗證這個一般性方程的正確性,例如,如果 P = 1(查找一定會成功的情況),順序查找所做的鍵值比較的平均次數是(n+1)/2,這意味着,平均來說,該算法大約要檢查表中一半的元素。如果P = 0(查找一定不成功的情況下),鍵值比較的平均次數將是n,因為這種情況下,算法會對列表中的n 個元素全部檢查一遍。

從這個簡單的例子中可以發現,平均效率的研究比起最差效率研究(對於本例Cworst(n) = n)和最優效率研究(對於本例Cbest(n)  = 1,同Cworst一樣,它們幾乎都是顯然的)要困難的多。因為我們需要得到或者假設各類輸入的概率分布(雖然這種假設看起來很合理,但是其正確性往往很難驗證),來推導出我們希望得到的基本操作的平均次數。

然而真的有必要研究算法的平均效率嗎?答案是很有必要。因為有很多重要的算法的平均效率比它們過於悲觀的最差效率要好得多。所以,如果沒有平均效率分析的話,計算機科學家可能會錯失很多重要的算法。

最后,從前面的討論中可以了解到,我們不能用最優效率和最差效率求平均數的方法來求得平均效率,雖然這個平均數偶爾會和平均效率一致,但它並不是進行平均效率分析的規范方法。

Reference:Introduction to The Design and Analysis of Algorithms_Anany Levitin

(End_xpjiang)


免責聲明!

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



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