主定理和遞迴式複雜度分析

來源:互聯網
上載者:User
主定理和遞迴式複雜度分析


幾個約定:文中為了方便,用logn代替log2n.

由於文章公式用LaTeX處理,所以不排除出現漏打,錯打等情況,如您發現,麻煩通知,thx

1.前情提要

眾所周知,遞迴是演算法的一個重要表現形式,不僅作用大,而且其複雜度的分析也比其他方式要繁雜。

但是,如果拋開某些很NB,很強大,很邪惡的遞迴式不談,如果不能有效確定普通遞迴式和一些典型演算法遞迴式的複雜度,那麼這個人顯然不是合格的Coder。

由於遞迴式複雜度的難以確定,所以目前常用的方法有這麼幾種:代換猜測法、遞迴樹法、主定理、直接數學分析法

代換猜測法通常和遞迴樹法合用,利用遞迴樹法得到一個大概正確的結果,然後利用數學歸納法對其驗證。

直接的數學分析法相對很直接,很強大,但是對數學要求很高,尤其是碰到一些BT的運算式

主定理是最常用的方法,也是我們今天的主題~

主定理通常可以解決如下的遞迴運算式:

[latex]T\left(n\right)=aT\left (\frac{n}{b} \right )+f\left(n \right)[/latex]

上面的遞迴式描述的是將規模為n的問題劃分為a個子問題,並且每個子問題的規模是n/b,這裡a和b是正常數。劃分原問題和合并結果的代價有函數f(n)描述。


主定理有三種情況,不同的情況有不同的用法

2.應用

對於應用主定理來說,一定要分清選取定定理中的哪種情況(如果有符合的),我們針對每一種類型,一一嘗試下~

第一種情況:

[latex]\left ( a. \right )~~T\left(n\right)=7T\left (\frac{n}{2} \right )+n^{2}[/latex]

[latex]\because~a=7~b=2,~f\left ( n \right )=n^{2}\\

\indent~~~~ n^{log_{b}^{a}}=n^{log_{2}^{7}}\approx n^{2.81}>f\left ( n \right )\\

\indent~~~~ and~\exists~\varepsilon=0.81,let~f\left ( n \right )=O\left (n^{log_{b}^{a}-\varepsilon} \right )\\

\indent\therefore~T\left ( n \right )=\Theta \left (n^{log_{2}^{7}} \right )[/latex]

第二種情況:

[latex]\left ( b. \right )~~T\left(n\right)=16T\left (\frac{n}{4} \right )+n^{2}[/latex]

[latex]\because~a=16~b=4,~f\left ( n \right )=n^{2}\\

\indent~~~~n^{log_{b}^{a}}=n^{2}=f\left ( n \right )\\

\indent \therefore T\left ( n \right )=\Theta \left ( n^{log_{b}^{a}}logn \right )=\Theta \left ( n^{2}logn \right )[/latex]

第三種情況:

[latex]\left ( c. \right )~~T\left(n\right)=2T\left (\frac{n}{2} \right )+n^{3}[/latex]

3.一些非正常情況

在某些情況下,存在一些特殊情況,比如明顯不滿足主定理形式,或經過乍看之下不滿足,但是經過變形之後可以應用主定理。

甚至在某些情況下,看上去符合主定理的遞迴式是無法應用主定理求解的,因為主定理不覆蓋所有情況,即遞迴式不滿足上面三條中的任意一條

我們逐一來看看這些特殊情況

這種形式的條件顯然不符合主定理的口味,但是我們可以簡單的通過遞迴樹加上一點點的數學分析可知,總共有n層,每層都是n的代價,所以總代價應該是O(n2)

n帶了根號,乍看之下是無法應用主定理的,但是我們可以通過換元等trick將遞迴式轉化成可以用主定理求解的式子

而對於某些式子,如上面所說,看著似乎可以用MM求解,但是實際上不滿足3條中的任何一條,比如下面的:

4.常見遞迴演算法的複雜度

我們經常碰到的演算法中,很多都是基於遞迴的,比如快速排序、歸併排序、二分尋找等等,甚至你也可以把求Fibonaci數列的遞迴演算法也算入

而這些遞迴式都是很容易分析的,分析的過程就留給大家了~

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.