解决问题方法的效率,跟数据的组织方式有关;跟空间的利用效率有关;跟算法的巧妙程度有关。
例:写程序计算给定多项式在给定点 x 处的值:f(x) = a0 + a1x + a2x^2 + … + a(n-1) x^(n-1) + anx^n
#include<cstdio>
#include<cmath>
double f(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;
}
int main(){
int n; // 多项式的阶数
double x; // 需要计算的点 x
double a[10010]; // 多项式的系数
scanf("%d", &n);
for(int i = 0; i <= n; i++){
scanf("%lf", &a[i]);
}
scanf("%lf", &x);
printf("%f", f(n, a, x));
return 0;
}
上述代码比较复杂,需要简化
f(x) = a0 + x (a1 + x (… (an-1 + x(an)) … ))
巧妙运用结合律,每次把 x 当成一个公因子提出