霍纳法则:求多项式值的一个快速算法。
简单介绍:
假设有n+2个数 , a0,a1,a2,a3,……an 和x组成的一个多项式,形式如下:
a0*x^0+a1*x^1+a2*x^2+a3*x^3+……an*x^n ,通常都是一项一项的求和然后累加,这样的话要进行n* (n+1)/2 次乘法运算 和 n 次加法运算 ,
而霍纳法则就是一个改进的一个算法。通过变换得到如下式子:
(((……(((an+an-1)*x+an-2)*x+an-3)*x)+……)*x+a1)*x+a0 ,
这种求值的方法便是霍纳法则。(复杂度 为 O(n) )
根据霍纳法则写的一个代码:
简单的多项式求值
-
#include <iostream> -
using namespace std; -
int Horner_rule(int arr[],int n,int x) -
{ -
int i,ans = 0;; -
for(i = 0;i<n;i++) -
{ -
ans =arr[i]+x*ans; -
} -
return ans; -
} -
int main() -
{ -
int n,x,i,t,arr[1000]; -
cin>>t; -
while(t--) -
{ -
cout<<"输入 : n , x : "; -
cin>>n>>x; -
cout<<"输入 "<<n <<" 个数 : "; -
for(i = n-1;i>=0;i--)//求值是从 an 开始,所以倒着存 -
cin>>arr[i]; -
for(i = 0;i<n-1;i++) -
cout<<arr[i]<<"*x"<<"^"<<i<<"+"; -
cout<<arr[i]<<"*x"<<"^"<<i<<" = "; -
cout<<Horner_rule(arr,n,x)<<endl; -
} -
return 0; -
}
博客介绍了霍纳法则,它是求多项式值的快速算法。普通求多项式值需进行n*(n + 1)/2次乘法和n次加法运算,而霍纳法则通过变换式子,复杂度降为O(n),还给出了根据该法则写的简单多项式求值代码。
1161

被折叠的 条评论
为什么被折叠?



