算法時間復雜度分析方法


算法時間效率分析方法主要由非遞歸分析法和遞歸式分析法兩種。以下分別說明:

一、分析非遞歸算法時間效率的通用方案

  1. 確定算法中作為輸入規模的參數;
  2. 找出算法的基本操作(通常位於算法的最內層循環中的操作);
  3. 檢查對於相同規模的不同輸入實例,基本操作的執行次數是否可能不同,如果有,則需對最差效率、平均效率以及最優效率分別進行討論;
  4. 建立算法基本操作的執行頻度的計算表達式;
  5. 利用計算表達式的計算法則確定問題求解時間與問題規模的增長關系。

二、分析遞歸算法時間效率的通用方案

  1. 確定算法中作為輸入規模的參數;
  2. 找出算法的基本操作;
  3. 檢查對於相同規模的不同輸入實例,基本操作的執行次數是否可能不同,如果有,則需對最差效率、平均效率以及最優效率分別進行討論;
  4. 針對算法基本操作的執行次數,建立與輸入規模有關的遞推關系式及其初始條件;
  5. 求解遞推式以確定問題求解時間與問題規模的增長關系。

三、包含遞歸調用算法的時間復雜度分析技術總結

  當一個算法中包含遞歸調用時,其時間復雜度分析會轉化成為一個遞歸方程所對應的遞推關系式求解。由於遞歸方程的多樣性,包含遞歸調用的算法時間復雜度分析方法多種多樣。以下介紹兩種常見形式:

1.形如:

 

的遞推式時間復雜度分析方法。其中,a>=1; b>1; f(n)是不參與遞歸部分的時間復雜度。

這種遞歸方程通常是分治算法策略時間復雜性所滿足的遞推關系,即一個規模為n的問題被分成規模均為n/b的a個子問題,遞歸地求解這a個子問題,然后通過對這a個子問題的解的綜合,得到原問題的解。

1)  代入法

【分析思路】:首先要對問題的時間復雜度做出預測,然后將預測帶入原來的遞歸方程,如果沒有出現矛盾,則是可能的解,最后用數學歸納法證明。

【舉   例】有如下的遞歸問題:T(n)=4T(n/2)+O(n),首先預測時間復雜度為O(n2),不妨設T(n)=kn2(其中k為常數),將該結果帶入方程中可得:方程左邊=kn2,方程右邊=4k(n/2)2+O(n)=kn2+O(n),由於n2的階高於n的階,因而左右兩邊是相等的,接下來用數學歸納法進行驗證即可。

2)  迭代法

【分析思路】:迭代的展開遞歸關系式右邊,直到沒有可以迭代的項為止,這時通過對關系式右邊的和進行估算來估計方程的解。

【舉   例】一個簡單的例子:T(n)=2T(n/2)+n2,迭代過程如下:

容易知道,直到時,遞歸過程結束,這時計算如下:

上面的計算中,直接使用無窮等比數列的公式,不用考慮項數i的約束,可確定該算法的時間復雜度為O(n2)。

【思  考】 嘗試分析遞推式T(n)=2T(n/2)+n的時間復雜度。

2. 遞推式是一個無窮序列冪級數的遞歸算法時間復雜度分析方法

形如:

T(n)=c1T(n-1)+c2T(n-2)+c3T(n-3)+...+ckT(n-k)+f(n)。其中c1,c2,...ck為常數且不等於0.

1)     母函數法(原理參見文獻:陳朝斌,石建梅.運用母函數求解遞推數列通項公式[J]數學教學通訊)

【分析思路】選擇斐波那契數列的遞歸算法時間復雜度作為例子進行討論。

對於斐波那契數列遞歸公式:T(n)=T(n-1)+T(n-2)。

假設F(n)為第n項的運算量。則容易得到:F(n)=F(n-1)+F(n-2),其中F(1)=F(2)=1.

構造如下的母函數:G(x)=F(1)x+F(2)x2+F(3)x3+......,推導如下:

 

 根據上式,不難推導出下式:

                   G(x)-F(1)x-F(2)x2=x(G(x)-F(1)x)+x2G(x)

 

2)差分方程法

【分析思路】可通過差分方程的求解方法來解遞歸方程,然后對解進行漸近階估計。(了解:差分方程的求解原理)

對於形如:T(n)=c1T(n-1)+c2T(n-2)+c3T(n-3)+...+ckT(n-k)+f(n)的遞歸方程,其中c1,c2,...ck為常數且不等於0;其對應差分方程如下

 

則原方程的解等於齊次差分方程的通解+非齊次差分方程特解,最后由初始條件確定通解的系數即可。

 

 


免責聲明!

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



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