题目
:对于一个多项式
a
0
x
0
+
a
1
x
1
+
a
2
x
2
.
.
.
.
.
.
a
n
x
n
a_0x^0+a_1x^1+a_2x^2......a_nx^n
a0x0+a1x1+a2x2......anxn
求解这样一个多项式
算法
常规算法
假设我们的系数存放在double b[]这样一个数组里边
最常见的算法就是从前往后挨个算,代码如下:
double sum(double *xishu,double x,int count)
{
double Sum=0;
for(int i=0;i<count;i++)
{
Sum+=pow(x,i)*xishu[i];
}
return Sum;
}
改进算法
我们反过来想一下,最后的是x最多的每俩个提取相邻的最大x的指数,造成了一个简单的循环,
好那我们想一下,每俩俩相加 那只需要加 数组的数量 count-1次,代码如下:
double sum_first(double *xishu,double x,int count)
{
double p=xishu[count-1];
for(int i=count-2;i>=0;i--)
{
p=p*x+xishu[i];
}
return p;
}
分析
那我们分析一下,既然第二种算法比第一种算法好,那好在哪里呢,原因就是第一种算法有重复,举例 我算 x 5 x^5 x5 那前面 x 4 x^4 x4已经算过了,但还是需要再从x开始再乘,在这个过程中产生了大量重复,而第二种算法改进的就是这个,没有重复实现了优化