這個學期開了一門叫演算法的課,為了今天的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 與分治方法相似,都是通過組合子問題的解來求解原問題。不同的是,分治方法通常將問題劃分為互不相交的子問題,遞迴地求解子問題,再講它們的解組合起來,求出原問題的解。而動態規劃應用於子問題重疊的情況,即不用的子問題具有公共的子子問題。在這種情況下,如果採用...