霍纳规则计算求和的效率

时间:2014-07-14 18:20:54

标签: algorithm

Horner的规则如何成为计算多项式求和的有效方法?

int HornerRule( int array [] , unsigned int n , int x )
{

    int result =  array[n] ;

    for( int i = n - 1 ; i >= 0 ; --i )
    {
      result = result *x + array[i];
    }

    return result ; 
}

1 个答案:

答案 0 :(得分:1)

Horner的规则利用了求幂的递归定义:

x^y = x^(y-1) * x

使用前一项的结果评估每个高阶项。假设你有一个三次多项式;而不是通过将x^3次自身乘以两次(2次操作)来评估x,而是将x次乘以x^2(您已为x^2项计算过的时间) ,这只是1次操作。以分解形式写出多项式, (为简单起见系数为1):

x^3 + x^2 + x + 1 = x(x^2 + x) + 1
                  = x(x(x + 1)) + 1

(你可能会注意到,在这种情况下,你有相同数量的乘法,每边3个。但是当程度增加时,左边增加k-1个乘法,当你添加一个术语时度k,但右侧只会添加一个乘法:

x^4 + x^3 + x^2 + x + 1 = x(x^3 + x^2 + x) + 1
                        = x(x(x(x + 1)) + 1) + 1