使用Horner法则计算多项式的值

计算Pn(x) = an * x^n + an-1 * x^(n-1) + ... + a1 * x + a0

直接计算,需要做的乘法次数 1+2+3+……+n = n(1+n)/2 = O(n2)

使用Horner规则,Pn(x) = ((... ((anx + an-1)x + an-2)x + ... + a2)x + a1)x + a0

需要做的乘法次数 n = O(n) 

public class Horner{
    public static int compute(int x, int[] A){
        //计算Pn(x) = an * x^n + an-1 * x^(n-1) + ... + a1 * x + a0
        int result = A[A.length-1];
        for(int i = A.length-2; i >= 0; i --){
            result = x*result + A[i];
        }
        return result;
    }
    public static void main(String[] args){
        //单元测试。取 ai = 2^n-i;n为10。答案应为1024 * 11 = 11264
        int x = 2;
        final int N = 10;
        int[] A = new int[N+1];
        int tmp = 1024;
        for(int i = 0; i < A.length; i ++){
            A[i] = tmp;
            tmp /= 2;
        }
        System.out.println(compute(x, A));
    }
}
Java
原文地址:https://www.cnblogs.com/7hat/p/3385361.html