对于形如多项式计算问题:
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)