如果一个嵌套的 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)
的复杂性。
如果我们有一个如下所示的嵌套 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)
的复杂性。