数据结构 多项式求值

#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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值