多项式计算

对于形如多项式计算问题:

     S = An * X^n + An-1 * X^n + ...... + A1 * X + A0 

A0, A1, A2... An 与 X 已知,快速求解S。


分析:由于S中含有 X^n 求解问题, 一般计算n次幂需要O(N)时间, 若用迭代算法计算需要O( log N )时间, 对于计算S最少需要

            log 1 + log 2 + log 3 + ..... + log n = log( n!) 

          由斯特林公式:    n! = sqrt( 2 * PI * n) * ( n / e )^ n

          log( n! ) = 1/2 log( 2 * PI * n) + n log( n / e ), 所以 Tn = log( n! ) = O( n log n);


这里介绍一种快速求解多项式计算问题的方法:霍纳法则(Horner Rule)

    

       思想:在多项式S中,对于含有X因子的项提取公因式X,层层提取,最后使得 S = X * (   X *  ( X * ( ....( X * An) + An-1 ) + Ai ) + A1 ) + A0

如: S = A3 * X^3 + A2 * X^2 + A1 * X + A0

                          = X * ( A3 * X^2 + A2 * X + A1 ) + A0

                          = X * ( X * ( A3 * X + A2 ) + A1) + A0

然后从最里层开始计算,逐步去掉括号,最后可求得值。 


代码实现( c 语言):


long int Horner(int A[], int n, int X)
{
    // n为最高次项数
    long int poly = 0;

    for ( int i = n; i >= 0; --i)
        poly = X * poly + A[i];

    return poly;
}

算法时间复杂度:O(N)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值