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
- Optimize你的多项式计算
- 一元多项式的计算
- 计算多项式的值
- 计算多项式的值
- 一元多项式的计算
- 多项式计算的Horner 方法
- 递归计算多项式的值
- 07:计算多项式的值
- 36:计算多项式的值
- 多项式计算的Horner 方法
- 多项式计算
- 多项式计算
- 多项式计算
- 计算多项式
- 计算多项式
- 计算多项式
- 多项式计算
- 多项式计算
- 黑马程序员---2015.6.10java学习笔记---软件--dos--JDK---while
- ubuntu14.04下使用tetview遇到的问题
- 优雅的scala---乘法口诀表
- 树莓派--安装chromium
- Linux压缩与解压
- Optimize你的多项式计算
- apt-get安装opencv
- Linux环境变量配置文件
- Remove Linked List Elements
- 最好的,xmapp虚拟目录
- 如何理解Looper.prepare()
- 数据库系统中的数据模型基本概念
- jar 用法详解
- 英语四六级、考研作文黄金句子(至尊版)