想象一个场景,其中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)还是其他东西?
答案 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。