分析多项式和指数函数的运行时

时间:2015-06-13 20:34:00

标签: java

所以我一直在尝试实现2个功能:

  1. 在O(d)时间内执行整数多项式求值的方法,其中d是多项式的次数。

  2. 计算取幂。我需要它在0(log b)时间内执行

  3. 这是我到目前为止所做的:

    public static int polynomialEvaluation(int[] coefficients, int x){
        int n = coefficients.length -1;
        int y = coefficients[n];
    
        for (int i = n-1; i >= 0; i--){
            y = coefficients[i] + (x*y);
    
        }
    
        return y;
    }
    
    
    public static int exponentiation(int a, int b) {
    
        int res = 1;
        while (b > 0) {
            res = res * a;
            b--;
        }
        return res;
    }
    

    }

    这两个中的任何一个是否符合时间复杂度要求?我认为我有指数函数,但不确定第一个的成本。

    编辑:我重写了指数函数,尝试避免迭代循环如下。在我看来,它现在可以更有效地计算

    public static int exponentiation(int a, int b) {
    
        if ( b == 0) return 1;
        int res = exponentiation(a, b/2);
        if (a % 2 == 0)
            return res * res;
        else 
            return (a * res * res);
    }
    

1 个答案:

答案 0 :(得分:4)

基本代数运算(例如加法和乘法),数组查找和赋值都被视为需要恒定时间。由于您的代码仅在循环中包含这些操作,因此复杂性是循环的迭代次数(加上外部操作的常量,但在O表示法中消失)。每个循环执行多少次迭代?

这有望告诉你多项式计算具有所需的复杂度,而指数计算则没有。提示更好的算法:如果你已经计算了 b 2 ,那么使用该答案计算 b 4 ?如果你有这个结果,你如何计算 b 8 ?如果您已计算出例如 b 2 b 4 b 8 b 16 b 32 b 64 以这种方式(当然,你仍然有原始的 b 1 ),你怎么能用这些结果来计算,例如 B'SUP> 93