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 ;
}
答案 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
)