求下面式子的和:
a
0
x
0
+
a
1
x
1
+
.
.
.
+
a
n
x
n
a_0x^0+a_1x^1+...+a_nx^n
a0x0+a1x1+...+anxn
如果我们按部就班的算,那么我们需要
n
(
n
+
1
)
2
\frac{n(n+1)}{2}
2n(n+1)次乘法运算和n次加法运算,时间复杂度为
O
(
N
2
)
O(N^2)
O(N2)。
而秦九韶算法(霍尔法则)只需要n次乘法和n次加法。只需要将它改成如下形式:
(
(
(
…
…
(
(
(
a
n
+
a
n
−
1
)
∗
x
+
a
n
−
2
)
∗
x
+
a
n
−
3
)
∗
x
)
+
…
…
)
∗
x
+
a
1
)
∗
x
+
a
0
(((……(((an+an-1)*x+an-2)*x+an-3)*x)+……)*x+a1)*x+a0
(((……(((an+an−1)∗x+an−2)∗x+an−3)∗x)+……)∗x+a1)∗x+a0
时间复杂度为
O
(
N
)
O(N)
O(N)
代码如下
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;
int main() {
int n;
cout << "请输入多项式的次数 :";
cin >> n;
double *a = new double[n+1];//n次多项式申请n+1大小的数组
cout << "请输入多项式的系数(最高次项开始):" << endl;
for(int i = n; i >= 0; i --)
cin >> a[i];//读入各项系数
double x0,ans=a[n];
cout << "请输入 X0 " << endl;
cin >> x0;
for(int i = n-1;i >= 0;i --)
ans = ans*x0 + a[i];//最高次项开始,往外展开
cout << "多项式在X0出的函数值为:" << ans << endl;
delete []a;//释放动态内存
return 0;
}