嵌套循环的时间复杂度,其中第二个循环仅针对上述循环的最后一次迭代进行迭代

时间:2020-05-08 11:42:36

标签: time big-o complexity-theory

想象一个场景,其中n的每次迭代都将第二个循环迭代一次,但最后一次迭代m次:

// n and m are two different variables.
for(int i=0; i<n; i++) {
  for(int j=0; j<m; j++) {
    if(i!=(n-1)) break;

    // O(1) code here.
  }
}

时间的复杂度是多少?是O(n * m),O(n + m)还是其他东西?

1 个答案:

答案 0 :(得分:1)

编辑:基于误读,原始答案是错误的。

这是O(n + m),因为对于最外层循环的n-1次迭代,完成了恒定的工作量:它开始内部循环,并在第一次迭代时中止。对于最外层循环的最后一次迭代,最内层循环迭代m次,每次迭代都进行固定数量的工作。因此,我们总共有(n-1)* x + 1 *(m * y)个步骤,其中x和y是一些常数。而且我们知道(n-1)* x + 1 *(m * y)= O(n + m),因为我们可以将常数因子丢给自变量n和m。