在找到嵌套循环的时间复杂度时,即使内循环停止运行,您也会考虑外循环吗?

时间:2017-10-22 11:01:11

标签: time-complexity

考虑以下代码:

int sum = 0;

for(int i = 0; i < N*N; i++)
{
    for(int j = i; j < N; j++)
    {
        sum++;
        System.out.println(sum);
    }
}

我一直都知道找时间复杂度是要找出内循环执行的次数。但是在上面的代码中,内部循环将一直运行,直到我达到N.当我超过N时,内部循环不再更新sum的值。但外循环将继续运行完成。

因此,由于内循环一直运行直到我达到N,所以该代码的时间复杂度不应该是O(N ^ 2)吗?解决方案说时间复杂度为O(N ^ 3)。

1 个答案:

答案 0 :(得分:0)

O(n ^ 3)是正确的!

对于外循环(i)的每次迭代,内循环(j)将迭代N次,然后它将退出循环。外部循环将i=0增加到i=1然后再次执行内部循环(再次迭代N次),并将继续执行此操作直到i = N*N。所以你可以说内循环每次外循环迭代迭代N次。

外部循环从i=0开始,并且迭代N * N次。

如果每次外循环循环时内循环循环N次,并且外循环迭代N * N次,则循环的迭代总次数为:

 (# of inner iterations per outer iteration) * (# of outer iterations)
 = (N) * (N*N)
 = N^3