斐波那契數 動態規劃法和分治法

2021-08-31 20:43:32 字數 847 閱讀 9055

這個學期開了一門叫演算法的課,為了今天的itat複賽,這兩天研究了一下這門課。感覺演算法真的是太神奇了。就比如說今天學了動態規劃(小小的入門)。用它實現了斐波那契數,和原來的用分治法的一比較,差距出來了。相差十幾幾萬倍(要算的數越大相差的倍數越多)。下面是實現:

#include

#include

using namespace std;

/** 動態規劃法實現

*/int f(int n, int a)

if (n == 0 || n == 1)

else}/*

* 填表函式

*/int febonacci(int n)

;a[0] = 0;

a[1] = 1;

/* 自底向上填表 */

for (int i = 2; i <= n; i++)

int sum = f(n,a);

return sum;}/*

* 分治法實現

*/int f2(int n)

else

}int main()

cout<<"sum1:"

cout<<"time:"

int sum2 = 0;

// 計算100次

for (int m = 0; m < 100; m++)

cout<<"sum2:"

cout<<"time:"

}

執行結果:

[img]

斐波那契數(動態規劃法)

1.遞迴方法 斐波那契數 include using namespace std int f 1000 long long fib int n int main int argc,char argv 2.自頂向下帶備忘的動態規劃法 動態規劃法 自頂向下帶備忘 斐波那契數 include using ...

演算法 動態規劃法 斐波那契數列

動態規劃用於求解最優化子問題的,往往是高效的而準確的。這背後的邏輯,其實就是程式設計的最基本原理 不要讓程式做重複的事情。對於乙個複雜的問題,可以分解成若干個子問題來解決,這是分治法。每個分解的子問題,得到最優解,再通過乙個方式組合這些最優解,得到全域性最優解,這是貪心法。而其實分解的子問題,往往會...

動態規劃法(一)從斐波那契數列談起

動態規劃 dynamic programming 與分治方法相似,都是通過組合子問題的解來求解原問題。不同的是,分治方法通常將問題劃分為互不相交的子問題,遞迴地求解子問題,再講它們的解組合起來,求出原問題的解。而動態規劃應用於子問題重疊的情況,即不用的子問題具有公共的子子問題。在這種情況下,如果採用...