zoukankan      html  css  js  c++  java
  • 霍纳法则(Horner's rule)

    卡在hdu 1402 的高精度乘法了,要用FFT(快速傅里叶变换),然后看到了这个霍纳法则,顺便就写下来了。

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

    简单介绍:

    假设有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;
    }
    




  • 相关阅读:
    Ubuntu网卡配置
    Ubuntu软件包管理器
    更改系统语言环境
    简单泛型
    surface知识点
    RTMP协议
    直播技术之现代播放器原理
    直播技术之延迟优化
    直播技术之处理
    【转】草根老师的 linux字符设备驱动详解
  • 原文地址:https://www.cnblogs.com/gray1566/p/3704283.html
Copyright © 2011-2022 走看看