算法時間複雜度分析方法

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

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

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

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

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

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

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

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;其對應差分方程以下

 

則原方程的解等於齊次差分方程的通解+非齊次差分方程特解,最後由初始條件肯定通解的係數便可。

相關文章
相關標籤/搜索