#include<bits/stdc++.h>
#include<windows.h>
#define maxn 10
using namespace std;
//计算多项式在x处的值
int f1(int n, double a[], double x);
int f2(int n, double a[], double x);
int f1(int n, double a[], double x){
int i ;
double p = a[0];
for(i = 1; i <= n; i++)
p += (a[i]*pow(x,i));
return p;
}
//优化后的代码
int f2(int n, double a[], double x){
//将所有项都先提取一个x出来
//就得到这样的结果 a[0] + x*(a[1]+x*(a[2]+x*a[3]+(...(a[n-1]+x*(a[n])))))
int i ;
double p = a[n];
//看的出 先算出后一项 就能推得前一项
for(i = n; i>=1;i-- )
//(a[n-1]+x*(a[n])) 这个就是通项公式 此时p=a[n] 将(a[n-1]+x*(a[n]))视为一个整体
p = a[n-1] + i*p;
return p;
}
int main()
{
double a[maxn];
for(int i = 0; i < maxn; i++)
a[i] = double(i);
//计算程序运行时间 精确到微妙
//运行时间
double run_time;
//程序开始运行时间
LARGE_INTEGER time_start;
LARGE_INTEGER time_over;
//计时器频率
double dqFreq;
LARGE_INTEGER f;
QueryPerformanceFrequency(&f);
dqFreq=(double)f.QuadPart;
//计时开始
QueryPerformanceCounter(&time_start);
//要运行的程序
f1( maxn-1, a, 1.1);
QueryPerformanceCounter(&time_over);
run_time=1000000*(time_over.QuadPart-time_start.QuadPart)/dqFreq;
printf("run_time:%fus\n",run_time);
double run_time1;
//程序开始运行时间
LARGE_INTEGER time_start1;
LARGE_INTEGER time_over1;
//计时器频率
double dqFreq1;
LARGE_INTEGER f1;
QueryPerformanceFrequency(&f1);
dqFreq1=(double)f1.QuadPart;
//计时开始
QueryPerformanceCounter(&time_start1);
//要运行的程序
f2( maxn-1, a, 1.1);
QueryPerformanceCounter(&time_over1);
run_time1=1000000*(time_over1.QuadPart-time_start1.QuadPart)/dqFreq1;
printf("run_time1:%fus\n",run_time1);
return 0;
}
数据结构 多项式求值
最新推荐文章于 2023-03-03 19:00:06 发布