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

Time 嵌套循环的时间复杂度,其中第二个循环仅对上述循环的最后一个迭代进行迭代,time,big-o,complexity-theory,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. } } //n和m是两个不同的变量。 对于(inti=0;iEDIT):由于误读,原始答案是错误的 这是O(n+m),因

设想一个场景,其中第二个循环在每次迭代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.
  }
}
//n和m是两个不同的变量。

对于(inti=0;iEDIT):由于误读,原始答案是错误的


这是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上。

如果我错了,请纠正我,第二个循环中的“中断”不应该是“继续”吗为了使n的每一个值的j增加m?自其中断以来,第二个循环应该迭代一次,然后退出(i=n-1除外)。@Ernkara你是对的,我读错了;无论出于什么原因,我读到的是
if
条件基于
j
,而不是
i
。我将更新答案。