如何找到涉及对数和求和规则的嵌套for循环的时间复杂度?

时间:2019-04-25 02:30:11

标签: java time-complexity big-o

因此,我一直在尝试查找下面显示的代码的时间复杂度。我知道第一个for循环会迭代'n'次,并且必须乘以第二个for循环的迭代才能找到大哦时间复杂度。但是,第二个for循环中的条件使我感到困惑。

public static void main(String[] args) {
    int x = 0;

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < i; j = j * 2) {
            x = x + 1;
        }
    }
}

如果j每次迭代都乘以2倍,则两个循环的时间复杂度将为O(nlog(n))。但是由于j基于i的值而停止,因此我认为必须涉及求和规则。我对整体时间复杂度的最佳猜测是O(nlog^2(n)?我是对还是错,为什么?

1 个答案:

答案 0 :(得分:0)

O (log n )是j last (最差)循环的成本,因此 O n log n )是上限边界。问题是它是否较少,因为平均成本较低。但事实并非如此:只有强函数会发生这种情况(请考虑一个简单的带有 i 迭代的内部循环,其中平均值只是一个常数乘以 n ),并且对数是凹的。所以毕竟只是 O n log n )。