註解:斐波納契數
描述:fibonacci』soriginal question:
1. 給定一對兔子,乙隻公的,乙隻母的。
2. 兔子在乙個月大時,可以進行交配,母兔在下乙個月時,可以生出另一對兔子。
3.假設我們的兔子永不死亡。
4.假定每個母兔個月總是再生出乙個兔子(乙隻是公的,乙隻是母的)
問題:一年以後,一共有多少對兔子?
解析:
1. in the beginning: (1 pair)想法1: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!
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)
用於研究理解演算法的思想和方法 任務 科學家理解自然世界 策略 細緻地觀察真實世界的特點,通常還要有精確的測量 根據觀察結果提出假設模型 根據模型來 未來的事件 繼續觀察並核實 的準確性 如此反覆知道確認 和觀察一致 分類和類別 程式的執行時間。精確 近似 原理與通則 準確測量程式的執行時間是困難的...