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

2021-08-28 04:50:19 字數 1929 閱讀 1228

一般情況下,演算法中基本操作重複的次數就是問題規模n的某個函式f(n),進而分析f(n)隨n的變化情況並確定t(n)的數量級。這裡用『o』來表示數量級,給出演算法時間複雜度。 

t(n)=o(f(n)); 

它表示隨問題規模n的增大,演算法的執行時間增長率和f(n)增長率成正比,這稱作演算法的漸進時間複雜度。而我們一般情況下討論的最壞的時間複雜度。 

空間複雜度: 

演算法的空間複雜度並不是實際占用的空間,而是計算整個演算法空間輔助空間單元的個數,與問題的規模沒有關係。演算法的空間複雜度s(n)定義為該演算法所耗費空間的數量級。 

s(n)=o(f(n)) 

若演算法執行所需要的輔助空間相對於輸入資料n而言是乙個常數,則稱這個演算法空間複雜度輔助空間為o(1); 

遞迴演算法空間複雜度:遞迴深度n*每次遞迴所要的輔助空間,如果每次遞迴所需要的輔助空間為常數,則遞迴空間複雜度o(n)。

累加法:遞推關係式為an+1−an=f(n)an+1−an=f(n)採用累加法。

累乘法:遞推關係式為an+1an=f(n)an+1an=f(n)採用累乘法。

構造法:遞推關係式為(1)aa+1=pan+qaa+1=pan+q,(2)aa+1=pan+qnaa+1=pan+qn,都可以通過恒等變形,構造出等差或等比數列,利用等差或等比數列的定義進行解題,其中的構造方法可通過待定係數法來進行。

和化項法:遞推公式為sn=f(n)sn=f(n)或sn=f(an)sn=f(an)一般利用 an=,其餘的關於複數解的形式和普通的線性方程組的形式類似,不再贅述。接下來,我們要求解該方程的對應非齊次方程組的通解,這裡我們針對該方程的特殊形式,不加證明地給出如下的通解形式:

則和線性代數中的解一樣,原方程的解等於齊次方程組的通解+特解,即:

最後由初始條件確定a(i)的值即可。

為了幫助理解,我們舉兩個例子看看,就明白是怎麼回事了。

【舉 例1】遞迴方程如下:

(1)寫出對應齊次方程的特徵方程:

得到基礎解系為:

(2)計算特解,對於本題,直接觀察得特解為:-8

(3)得到原方程解的形式為:t(n)=a0t1n+a1t2n-8

(4)代入n=0,n=1的情況,得到a0,a1,最後可得:

可以看到該方程形式和上面討論過的斐波那契數列只差乙個常數8,因而兩者的時間複雜度是相同的。有興趣的同學可以按照這個方法再次計算斐波那契數列的時間複雜度驗證一下。

【舉  例2】遞迴方程如下:

(1)計算對應齊次方程的基礎解析:特徵方程為:c(t)=t^2-4t-4=0,得到乙個2重根t=2.因而其基礎解為:

(2)由於f(n)=n*2n,對應上面**的最後一種情況,得到特解形式為:t(n)=n2(p0+p1n)2n代入原遞迴方程可得:p0=1/2,p1=1/6

(3)原方程解的形式為:t(n)=a0*2n+a1*n*2n+n2(1/2+n/6)2n,代入t(0),t(1)得:a0=a1=0

(4)綜上:t(n)=n2(1/2+n/6)2n

因而時間複雜度為:o(n32n).

參考:

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

在演算法分析中,當乙個演算法中包含遞迴呼叫時,其時間複雜度的分析會轉化為乙個遞迴方程求解。實際上,這個問題是數學上求解漸近階的問題,而遞迴方程的形式多種多樣,其求解方法也是不一而足,比較常用的有以下四種方法 1 代入法 substitution method 代入法的基本步驟是先推測遞迴方程的顯式解...

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

在演算法分析中,當乙個演算法中包含遞迴呼叫時,其時間複雜度的分析會轉化為乙個遞迴方程求解。實際上,這個問題是數學上求解漸近階的問題,而遞迴方程的形式多種多樣,其求解方法也是不一而足,比較常用的有以下四種方法 1 代入法 substitution method 代入法的基本步驟是先推測遞迴方程的顯式解...

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

這一段時間,我研究了一下演算法的時間複雜度分析,感覺其中的遞迴分析挺有意思,就總結一下記錄下來,以備以後隨時複習檢視。下面假設遞迴方程式已經給出了,僅僅說明如何計算遞迴方程的時間複雜度。對於遞迴方程的時間複雜度分析,需要分為兩個步驟,計算和證明 遇到乙個遞迴方程,首先看這個遞迴方程的形式,根據不同的...