如果一个嵌套的 for 循环有两个不同的开始迭代,时间复杂度是否仍然是 O(n^2)?

If a nested for-loop has two different starting iterations, is the time complexity still O(n^2)?

如果我们有一个如下所示的嵌套 for 循环:

for (int i=0; i < n; i++){
    for (int j=1; j < n; j++){
        // do something       
     }
}

即使 j(在最坏情况下)总是会搜索 array/list 中的 n-1 个,但最坏情况下的复杂度是否会是 O(n^2)

你只是减去一个常量,所以内部循环的复杂度仍然随着 n 的增加而增加,所以这个循环是 O(n)。两者嵌套在一起是 O(n^2).

答案取决于迭代的定义方式。举个例子,

n*(n-1) = n^2 - n

但复杂性分析遵循最大指数,因为随着 n 趋于无穷大,较小的指数变得无关紧要。

但是,如果您将第二次迭代定义为:

for i = 0 to n:
  for j = (n-1000000) to n:

我们会有 O(n * constant)O(n) 的复杂性。