多项式相加(两种算法对比)
多项式相加(两种算法对比)
例题:写程序计算给定多项式在给定点x处的值:
算法一:
根据表达式公式直接编写程序
double f1(int a[], double x, int n) { double sum = 0; int i; for (i = 0; i < n; i++) { sum += a[i]*pow(x,i); } return sum; }
算法二:
将表达式写成如下形式,再写程序
double f2(int a[], double x, int n) { double sum = 0; int i; for (i = n-1; i >= 0; i--) { sum = a[i] + x*sum; } return sum; }
最后通过计算机的时钟记时来比较两种算法所消耗的时间(关于时钟打点方法文末介绍)
#include <stdio.h> #include <math.h> #include <time.h> #define MAX 10 //设置多项式一共十项 #define MAXF 1e6 //重复执行函数1000 000次 double f1(int a[], double x, int n); double f2(int a[], double x, int n); int main() { clock_t start, stop; double duration; int a[MAX]; double x; double sum; int i; x = 2; for(i=0; i<MAX; i++) a[i] = i+1; //执行常规算法 start = clock(); for(i=0; i<MAXF; i++) sum = f1(a, x, MAX); stop = clock(); duration = ((double)(stop-start))/CLK_TCK; printf("运算结果为:%.2lf\n", sum); printf("常规算法相对运行时间为:%.2lf秒\n", duration); //执行优化之后的算法 start = clock(); for(i=0; i<MAXF; i++) sum = f2(a, x, MAX); stop = clock(); duration = ((double)(stop-start))/CLK_TCK; printf("运算结果为:%.2lf\n", sum); printf("优化算法相对运行时间为:%.2lf秒\n", duration); return 0; } double f1(int a[], double x, int n) { double sum = 0; int i; for (i = 0; i < n; i++) { sum += a[i]*pow(x,i); } return sum; } double f2(int a[], double x, int n) { double sum = 0; int i; for (i = n-1; i >= 0; i--) { sum = a[i] + x*sum; } return sum; }
运行结果为:
可以看出优化后的算法时间效率明显高于一般算法
clock介绍:
clock():记录从开始调用到第二次再调用clock()函数所耗费的时间,时间单位为clock tick,即“时钟打点”。
常数CLK_TCK:机器始终每秒的打点数
用法: