Fibonacci数列时间复杂度之美妙
生活随笔
收集整理的這篇文章主要介紹了
Fibonacci数列时间复杂度之美妙
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Fibonacci數列: fib(0)=1 fib(1)=1 fib(n)=fib(n-1)+fib(n-2)
?
上課老師出了一道題,求下列函數的時間復雜度:
int fib(int d) {if (d==0)return 0;if (d==1)return 1;return fib(d-1)+fib(d-2); }?
老師是這樣求的:
?
點的數目大約為滿(完全)二叉樹結點數目的一半,所以時間復雜度為O(2^n)。
但其實并不是這樣!
嚴謹上說,并不能證明出點的數目是x^n層面的,我們也可以認為點的數目為nlogn級別,對吧?
從圖上看,樹的最低高度為n/2+1,只能說明點的數目至少為2^(n/2+1)而已。。。
?
fib(d)的計算步數為fib(d-1)的計算步數再加上fib(d-2)的計算步數,
fib(d)終究是由若干個f(0)和f(1)組成,設由x個f(0)和y個f(1)組成,表示成(x,y),則:
fib(0): (1,0) fib(1):(0,1) fib(2):(1,1) fib(3):(1,2) …… fib(n):(fib(n-2),fib(n-1))
fib(n)的總操作步數為fib(n-2)+fib(n-1)=fib(n)=,
而(1-sqrt(5))/2相比(1+sqrt(5))/2較小,可以忽略不計,所有其時間復雜度為1 / sqrt(5) * [(1+sqrt(5))/2]^n。
?
轉載于:https://www.cnblogs.com/cmyg/p/8653435.html
總結
以上是生活随笔為你收集整理的Fibonacci数列时间复杂度之美妙的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MongoDB Sharding分片配置
- 下一篇: L1-046. 整除光棍(模拟除法)