2013年2月23日 星期六

[C Programming] 快速Fibonacci數算法-延伸(下)

延伸問題:
3. 在上一題與本題的解答中分別有兩個計算Fibonacci數的程式,
    一個很短,很簡單,但另一個卻很長、很複雜,
    請用比較大的n, 並且透過反覆計算1000次的方式,
    看看哪一個程式比較快。

答:
我們利用time.h的函數來取結尾和開頭的時間相減,
分別在兩個主程式中加入以下的程式碼:

Code:
int i;
clock_t start_time, end_time;
float total_time = 0;
start_time = clock();
for( i = 1; i <= 1000; i++) // 做1000次
 fibonacci(8000000);
end_time = clock();
total_time = (float) (end_time - start_time)/CLOCKS_PER_SEC;
printf("Time : %f sec \n", total_time);

結果如下:
Traditional: 32.514999 sec
Matrix: 0.001000 sec

另外測試的狀況,使用矩陣方式數量再多2個層級,
我們才能取到有實際代表性的執行時間。
但再多兩個層級的話一般的做法就會花很久很久的時間了XD

結論:
在n很大的時候,二階的Fibonacci相當節省時間,
這跟前面理論上推導的狀況是一樣的。

沒有留言:

張貼留言