我正在看这个视频.基本上它说使用dictionary(python的语言?)将计算从时间O(n ^ 2)到O(n)的fibonacci.
我编程了以下代码,fibo1应该是O(n)但实际上它运行得很慢.fibo2是正常的递归,它是O(n ^ 2)解决方案,但实际上它的运行速度比fibo1.我怎么能理解这个?
#include <iostream>
#include <map>
int fibo1(int i, std::map<int,int>& m);
int fibo2(int i);
int main()
{
std::map<int,int> m;
m[1] = 1; m[2] = 1;
int n = 40;
std::cout << fibo1(n,m);
//std::cout << fibo2(n);
return 0;
}
int fibo1(int i, std::map<int,int>& m) {
if(m[i]==0) {
return fibo1(i-1,m)+fibo1(i-2,m);
}
return m[i];
}
int fibo2(int i) {
if(i==1 || i==2) {
return 1;
}
return fibo2(i-1)+fibo2(i-2);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |