遞迴演算法的時間複雜度分析 轉載

來源:互聯網
上載者:User

標籤:blog   http   tar   get   art   類   

在演算法分析中,當一個演算法中包含遞迴調用時,其時間複雜度的分析會轉化為一個遞迴方程求解。實際上,這個問題是數學上求解漸近階的問題,而遞迴方程的形式多種多樣,其求解方法也是不一而足,比較常用的有以下四種方法:

    (1)代入法(Substitution Method)
    
    代入法的基本步驟是先推測遞迴方程的顯式解,然後用數學歸納法來驗證該解是否合理。
    
    (2)迭代法(Iteration Method)
    
    迭代法的基本步驟是迭代地展開遞迴方程的右端,使之成為一個非遞迴的和式,然後通過對和式的估計來達到對方程左端即方程的解的估計。
    
    (3)套用公式法(Master Method)
    
    這個方法針對形如“T(n) = aT(n/b) + f(n)”的遞迴方程。這種遞迴方程是分治法的時間複雜性所滿足的遞迴關係,即一個規模為n的問題被分成規模均為n/b的a個子問題,遞迴地求解這a個子 問題,然後通過對這a個子間題的解的綜合,得到原問題的解。
    
    (4)差分方程法(Difference Formula Method)

    可以將某些遞迴方程看成差分方程,通過解差分方程的方法來解遞迴方程,然後對解作出漸近階估計。
    
    下面就以上方法給出一些例子說明。
        
    一、代入法
    
    大整數乘法計算時間的遞迴方程為:T(n) = 4T(n/2) + O(n),其中T(1) = O(1),我們猜測一個解T(n) = O(n2 ),根據符號O的定義,對n>n0,有T(n) < cn2 - eO(2n)(注意,這裡減去O(2n),因其是低階項,不會影響到n足夠大時的漸近性),把這個解代入遞迴方程,得到:
    
    T(n) =  4T(n/2) + O(n)
           ≤ 4c(n/2)2 - eO(2n/2)) + O(n)
           =  cn2 - eO(n) + O(n)
           ≤ cn2 
    
    其中,c為正常數,e取1,上式符合 T(n)≤cn2 的定義,則可認為O(n2 )是T(n)的一個解,再用數學歸納法加以證明。
    
    二、迭代法

    某演算法的計算時間為:T(n) = 3T(n/4) + O(n),其中T(1) = O(1),迭代兩次可將右端展開為:
    
    T(n) = 3T(n/4) + O(n)
         = O(n) + 3( O(n/4) + 3T(n/42 ) )
         = O(n) + 3( O(n/4) + 3( O(n/42 ) + 3T(n/43 ) ) )
         
    從上式可以看出,這是一個遞迴方程,我們可以寫出迭代i次後的方程:
    
    T(n) = O(n) + 3( O(n/4) + 3( O(n/42 ) + ... + 3( n/4i + 3T(n/4i+1 ) ) ) )
    
    當n/4i+1 =1時,T(n/4i+1 )=1,則
    
    T(n) = n + (3/4) + (32 /42 )n + ... + (3i /4i )n + (3i+1 )T(1)
         < 4n + 3i+1 
         
    而由n/4i+1 =1可知,i<log4 n,從而
    
    3i+1 ≤ 3log4 n+1 = 3log3 n*log4 3 +1 = 3nlog4 3
    
    代入得:
    
    T(n) < 4n + 3nlog4 3,即T(n) = O(n)。
    
    三、套用公式法
    
    這個方法為估計形如:

  T(n) = aT(n/b) + f(n)

  其中,a≥1和b≥1,均為常數,f(n)是一個確定的正函數。在f(n)的三類情況下,我們有T(n)的漸近估計式:

    1.若對於某常數ε>0,有f(n) = O(nlogb a-ε ),則T(n) = O(nlogb a )
    
    2.若f(n) = O(nlogb a ),則T(n) = O(nlogb a *logn)
    
    3.若f(n) = O(nlogb a+ε ),且對於某常數c>1和所有充分大的正整數n,有af(n/b)≤cf(n),則T(n)=O(f(n))。
    
    設T(n) = 4T(n/2) + n,則a = 4,b = 2,f(n) = n,計算得出nlogb a = nlog2 4 = n2 ,而f(n) = n = O(n2-ε ),此時ε= 1,根據第1種情況,我們得到T(n) = O(n2 )。
    
    這裡涉及的三類情況,都是拿f(n)與nlogb a 作比較,而遞迴方程解的漸近階由這兩個函數中的較大者決定。在第一類情況下,函數nlogb a 較大,則T(n)=O(nlogb a );在第三類情況下,函數f(n)較大,則T(n)=O(f (n));在第二類情況下,兩個函數一樣大,則T(n)=O(nlogb a *logn),即以n的對數作為因子乘上f(n)與T(n)的同階。
    
    但上述三類情況並沒有覆蓋所有可能的f(n)。在第一類情況和第二類情況之間有一個間隙:f(n)小於但不是多項式地小於nlogb a ,第二類與第三類之間也存在這種情況,此時公式法不適用。

 

轉載於:http://blog.csdn.net/metasearch/article/details/4428865

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.