算法 求 多项式 的两种方法的优越性
#include <stdio.h>
#include <time.h>
#include <math.h>
#define NUMBER 10
#define MAX 1e8
/* 计算从 多项式 的运行时间 */
clock_t start, stop;
int main() {
double methodOne(int n, double a[], double x);
double methodTwo(int n, double a[], double x);
double one, two, three, four;
double a[NUMBER];
for(int i = 0; i < NUMBER; i++) {
a[i] = (double) i;
}
start = clock();
for(int i = 0; i < MAX; i++) {
three = methodOne(NUMBER - 1, a, 2.2);
}
stop = clock();
one = ((double) (stop - start))/CLK_TCK/MAX;
start = clock();
for(int i = 0; i < MAX; i++) {
four = methodTwo(NUMBER - 1, a, 2.2);
}
stop = clock();
two = ((double) (stop - start))/CLK_TCK/MAX;
//验证两个方法是殊途同归的
if(three == four) {
printf("运行时间:%6.3e\n", one);
printf("运行时间:%6.3e\n", two);
} else {
printf("程序有误\n");
}
}
/* 时间复杂度:p * n ^ 2 + q * n */
double methodOne(int n, double a[], double x) {
double p = a[0];
for(int i = 1; i <= n; i++) {
p += a[i] * pow(x, i);
}
return p;
}
/* 时间复杂度:m * n */
double methodTwo(int n, double a[], double x) {
double p = a[n];
for(int i = n; i > 0; i--) {
p = a[i - 1] + p * x;
}
return p;
}
结果
从这样的结果上看差一个数量级;从
时间复杂度
也可以看出来