[数据结构] 算法效率 以“计算多项式值”为例

来源:互联网 发布:幼儿园学英语软件 编辑:程序博客网 时间:2024/06/05 20:34

计算多项式值

计算下面多项式的数值:

f(x)=i=09ixi

  • 途径1:通过循环来实现
    f(x)=a0+a1x++an1xn1+anxn
  • 途径2:通过秦九韶算法来实现
    f(x)=a0+x(a1+x((an1+x(an))))

两种不同的计算方法时间比较

#include <stdio.h>#include <math.h>#include <time.h>#define MAXN 10#define MAXK 1e7clock_t start, stop;double duration;double f1(int n, double a[], double x);//循环方法实现计算double f2(int n, double a[], double x);//秦九韶算法实现计算int main(){    int i;    double a[MAXN];    for (i = 0; i <= MAXN ; i++)        a[i] = (double)i;    start = clock();    for (i = 0; i <= MAXK;i++)        f1(MAXN - 1, a, 1.1);    stop = clock();    duration = ((double)(stop - start)) / CLK_TCK / MAXK;    printf("ticks1 = %f\n", (double)(stop - start));    printf("duration1 = %6.2e\n",duration);    start = clock();    for (i = 0; i <= MAXK; i++)        f2(MAXN - 1, a, 1.1);    stop = clock();    duration = ((double)(stop - start)) / CLK_TCK / MAXK;    printf("ticks2 = %f\n", (double)(stop - start));    printf("duration2 = %6.2e\n", duration);}double 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;}double f2(int n, double a[], double x){    int i;    double p = a[n];    for (i = n; i > 0; i--)        p = a[i - 1] + x*p;    return p;}

运行结果

运行结果