Horner法则

霍纳法则:求多项式值的一个快速算法。

简单介绍:

假设有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) )

根据霍纳法则写的一个代码:

简单的多项式求值

 
  1. #include <iostream>

  2.  
  3. using namespace std;

  4.  
  5. int Horner_rule(int arr[],int n,int x)

  6. {

  7. int i,ans = 0;;

  8. for(i = 0;i<n;i++)

  9. {

  10. ans =arr[i]+x*ans;

  11. }

  12. return ans;

  13. }

  14. int main()

  15. {

  16. int n,x,i,t,arr[1000];

  17. cin>>t;

  18. while(t--)

  19. {

  20. cout<<"输入 : n , x : ";

  21. cin>>n>>x;

  22. cout<<"输入 "<<n <<" 个数 : ";

  23. for(i = n-1;i>=0;i--)//求值是从 an 开始,所以倒着存

  24. cin>>arr[i];

  25. for(i = 0;i<n-1;i++)

  26. cout<<arr[i]<<"*x"<<"^"<<i<<"+";

  27. cout<<arr[i]<<"*x"<<"^"<<i<<" = ";

  28. cout<<Horner_rule(arr,n,x)<<endl;

  29. }

  30. return 0;

  31. }

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值