演算法分析(1)Fibonacci Number

2021-07-12 03:36:22 字數 1602 閱讀 2892

註解:斐波納契數

描述:fibonacci』soriginal question:

1. 給定一對兔子,乙隻公的,乙隻母的。

2. 兔子在乙個月大時,可以進行交配,母兔在下乙個月時,可以生出另一對兔子。

3.假設我們的兔子永不死亡。

4.假定每個母兔個月總是再生出乙個兔子(乙隻是公的,乙隻是母的)

問題:一年以後,一共有多少對兔子?

解析:

1. in the beginning: (1 pair)

2. end of month 1: (1 pair) rabbitsare ready to mate.

3. end of month 2: (2 pairs) a newpair of rabbits are born.

4. end of month 3: (3 pairs) a newpair and two old pairs.

5. end of month 4: (5 pairs) ...

6. end of month 5: (8 pairs) ...

……..

7.after 12 months, there will be233 pairs rabbits!

想法1:

algotithm1 fib(n)

if n = 0 then return 0

if n = 1 then return 1

return (fib(n-1)+fib(n-2))

效率:t(n)= t(n−1) + t(n−2)+ 3≈1.6的n次方

t(200)  >=

2的139次方

(291 seconds = 7.85 × 1019years )

想法2:用陣列實現

algorithm2:fib(n)

// initially we create an array a[0:n]

a[0] ← 0,  a[1] ← 1

for  i= 2 to n do

a[i]= a[i− 1] + a[i− 2]

return (a[n])

相似問題:

/*題目:有一對兔子,從出生後第3個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?

*分析:

第乙個月 1對

第二個月 1對

第三個月 2對 第2對成長1個月

第四個月 3對 第3對成長1個月 第2對成長2個月

第五個月 5對 第5對成長1個月 第4對成長1個月 第3對成長2個月

第六個月 8對 第8、7、6對成長1個月 第5、4對成長2個月

第七個月 13對

*難點: 找規律

1.為什麼第三個月之後。每月的兔子的數量就是前兩個月的兔子的數量的和?

*/ #include int main()

else

} return 0; }

/*版本二

#include int fun(int n)

} int main()

*/

演算法分析1

最近學校開設了演算法課,大一的時候都沒有好好學,現在惡補一下。會把一些比較好玩的題寫上來分享,希望大家有更好的解法可以告訴我。1.蠻力法求解問題 猴子到森林裡採香蕉,森林距離家裡100公尺,猴子的揹包最多可以放下100個香蕉。但是,貪吃的猴子每行動1公尺需要吃1個香蕉,假設森林裡香蕉足夠多的情況下,...

演算法設計與分析 1

實驗題目 生成兩個隨機的圖,乙個有向圖乙個無向圖。有向圖兩千條邊左右,無向圖一千條邊左右,邊的數量是大概的。100個頂點。要求能算出每個頂點的度。要求每次圖是隨機生成的,並且有良好的結構。今後的實驗都基於這個圖結構。任意語言和環境。建議鍊錶描述。然後基於這個圖實現乙個廣度優先搜尋。參考文獻 c 中的...

《演算法》學習筆記 演算法分析(1)

用於研究理解演算法的思想和方法 任務 科學家理解自然世界 策略 細緻地觀察真實世界的特點,通常還要有精確的測量 根據觀察結果提出假設模型 根據模型來 未來的事件 繼續觀察並核實 的準確性 如此反覆知道確認 和觀察一致 分類和類別 程式的執行時間。精確 近似 原理與通則 準確測量程式的執行時間是困難的...