今天闲来没事写了个程序验证了下记忆化搜索到底有多快,结果真让我大开眼界!我使用的是计算斐波那契数的程序,Fib1表示未使用记忆化的搜索过程,Fib2表示使用记忆化的搜索过程。我随机输入了一个数据,结果是这样的:
看这个结果,简直黑死人。所以,记忆化搜索yyds!
#include<iostream>
using namespace std;
int count1=0;
int count2=0;
int a[1000]={0};
int Fib1(int n);
int Fib2(int n);
int main(){
int n;
scanf("%d",&n);
int result1;
result1=Fib1(n);
//printf("%d",&count1);
cout<<"The result is:"<<result1<<endl;
cout<<"The method without memory method's iteration number is:"<<count1<<endl;
int result2=Fib2(n);
cout<<"The memorable method's result is:"<<result2<<endl;
cout<<"The number of iteration with the method of memory is:"<<count2<<endl;
return 0;
}
int Fib1(int n){
if(n==1 || n==2 || n==0){
//a[n]=n;
count1++;
//printf("hello");
return n;
}
else{
count1++;
//printf("hello");
//a[n]=Fib(n-1)+Fib(n-2)
return Fib1(n-1)+Fib1(n-2);
}
}
int Fib2(int n){
if(a[n]>0){
return a[n];
}
if(n==1 || n==2 || n==0){
a[n]=n;
count2++;
//printf("hello");
return n;
}
else{
count2++;
//printf("hello");
a[n]=Fib2(n-1)+Fib2(n-2);//record the current value
return Fib2(n-1)+Fib2(n-2);
}
}
感兴趣的同学也赶快拿代码去跑跑试试吧!哈啊哈哈