遞歸斐波那契數列時間復雜度


以前看數據結構與算法分析(C語言描述),作者在講述算法分析時提到遞歸計算斐波那契數列,
Fib(int N)
{
  if(N <= 1)
    return 1;
  else
    return Fib(N - 1) + Fib(N-2);
}

時間復雜度T(N) = T(N-1) + T(N-2);
作者說歸納法易證得T(N) >= Fib(N);而Fib(N) < (5/3)^(N);類似計算可正得Fib(N)>= (3/2)^(N)
這個地方作者處理得有些不太徹底,不是嗎?翻來覆去沒把Fib(N)准確求出,今天我翻看另一本資料,
更模糊了,它求得2^(N/2) < T(N) < 2^(N)就完事了。
不過今天我開竅了,T(N) = T(N-1) + T(N-2);這是什么?也許你會說這是一個遞推式,但它的學名是
二階齊次差分方程,我今天猛然看出這一點:)!
什么是差分方程?
以下資料全部來自Introduction to Numerical Analysis,second Edition Translate by
Bartels,W.Gautsch and C.Witigall,Springer-Verlag,世界圖書出版公司,(英文版)

百度百科:

數學上, 遞推關系(recurrence relation),也就是 差分方程(difference equation),是一種遞推地定義一個序列的方程式:序列的每一項目是定義為前一項的函數。某些簡單定義的遞推關系式可能會表現出非常復雜的(混沌的)性質,他們屬於數學中的 非線性分析領域。
所謂解一個遞推關系式,也就是求其 解析解,即關於 n的非遞歸函數。
解法:
http://jpkc.wyu.edu.cn/xhyxt/kejian/chapter5/5.2.2.htm
 


這是我大三所用的數值分析教材,目前國內好像還沒中文版。

書上464頁說道:
By a linear homogeneous difference equation of order r one means an equation of the form

u(j+r) + a(r-1)u(j+4-1) + .... + a(0)u(j) =0;  j=0,1,2...  (7.2.9.1)
上面那些括號里的數一般是下標,我不好打出來,用括號代替了。

反正就是說齊次差分方程就是那個式子的形式了。
接着466頁上講到
Theorem. let the polynomial 
Ψ(u) = u^r + a(r-1)u^(r-1) + ... + a(0)
have the k distinct zeros λ(i) ,i = 1,2,...,k
with multiplicities σ(i),i = 1,2,...,k
and let a(0) != 0,then for arbitray polynomials p(i)(t) with deg p(i) < σ(i),i = 1...k;
the sequence 
u(j) = p(1)(j)λ(1)^(j) + p(2)(j)λ(2)^(j) +...+ p(k)(j)λ(k)^(j)
is a solution of the difference eqution (7.2.9.1).Conversely,every solution of
(7.2.9.1)can be uniquely represented in the form(7.2.9.9).

這段話又是什么意思呢?一句話:這是個牛逼的定理它導出了齊次差分方程的解並且說明了齊次差分方程
的所有解的形式。書上證明不是太短。

接下來舉例說明。就拿斐波那契數列來說。
書上561頁提了個問題,問題我就不打了,它問:
u(j+2) = u(j+1) + u(j)的通項公式是什么?然后它說u(0) = 0,u(1) = 1 即可得Fibonacci sequence
就是說這個式子從u(0) = 0,u(1) = 1遞推即可得斐波那契數列。從其他初始狀態的話可得其他數列。

開始解決問題。
按照那個牛逼定理,先解方程x^2 - x - 1 = 0;
這個不難,x1= (1+5^(1/2))/2,x2 = (1-5^(1/2))/2;
然后套公式u(j) = c1 * x1^(j) + c2 * x2^(j);
c1,c2為待定常數,利用u(0) = 0,u(1) = 1,得出c1 = 1/(5^(1/2));c2 = -c1;
這樣斐波那契數列的通項就出來了,遞歸計算斐波那契數列時間復雜度問題也就迎刃而解了。


免責聲明!

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



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