Optimize你的多项式计算

来源:互联网 发布:常平淘宝培训 编辑:程序博客网 时间:2024/05/21 10:42

现在问题是计算多项式:

f(x)=a[0]+a[1]*x^1+a[2]*x^2+...+a[n]*x^n


以下代码提供朴素版和优化版(optimize):

//给定多项式在给定x处的值#include<iostream>#include<cstdio>#include<cmath>#include<ctime>double duration;//持续时间 clock_t start,stop;using namespace std;const int N=1000;const int MAXK=1e7;//void optimize(int index,double a[],double pos)//优化版本//f(x)=a[0]+x(a[1]+x(a[2]+x(...(a[n-1]+x*a[n]))...) {double sum=a[index-1];for(int i=index-1;i>0;--i){sum=sum*pos+a[i-1];//printf("sum=%lf\n",sum);}//printf("sum=%lf\n",sum);}void f(int index,double a[],double pos)//朴素版本 {double sum=a[0];for(int i=1;i<index;++i){sum+=(a[i]*pow(pos,i));//printf("sum=%lf\n",sum);}//printf("sum=%lf\n",sum);}int main(){int y;double a[N],x;cout<<"输入的常数项个数:";cin>>y;cout<<"输入每个常数项:"<<endl; for(int i=0;i<y;++i){cin>>a[i];}cout<<"输入给定x值:";cin>>x; start=clock();for(int i=0;i<=MAXK;++i)    f(y,a,x);stop=clock();duration=((double)(stop-start))/CLK_TCK/MAXK;printf("trik1=%f\n",(double)(stop-start));printf("duration1=%6.2e\n",duration);start=clock();for(int i=0;i<=MAXK;++i)    optimize(y,a,x);stop=clock();duration=((double)(stop-start))/CLK_TCK/MAXK;printf("trik2=%f\n",(double)(stop-start));printf("duration1=%6.2e\n",duration);return 0;} 


0 0
原创粉丝点击