4 个嵌套 'for' 循环的最佳和最坏情况时间复杂度?
Best and the worst case time complexity for 4 nested 'for' loops?
嵌套 for
循环的最差和最佳时间复杂度是多少?
int compare(int n, int A[][]) {
int i, j, k, m;
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
for (k=1; k<=n; k++) {
for (m=1; m<=n; m++) {
if (A[i][j] == A[k][m] && !(i==k && j==m))
return 1;
}
}
}
}
return 0;
}
我试图自己解决它,但对最内层循环如何增加复杂性感到非常困惑。
最佳情况时间复杂度是常数,O(1)
。当网格的第一个和第二个元素 A
相等时,将发生最佳情况。
1 1 x x x
A = x x x x x
x x x x x
x x x x x
最坏情况下的复杂度是O(n^4)
。当网格的所有元素 A
都是唯一的时,将发生最坏的情况。
1 2 3 4
A = 5 6 7 8
9 10 11 12
13 14 15 16
最佳情况:O(1),当 A[1][1] = A[1][2]
最坏情况:O(n4),当没有重复元素时 -> 你最终会为它的每个元素迭代整个数组。
请注意,您可以使用映射或集合(将其称为结构)更有效地实现它:
- 迭代数组
- 如果结构已经有A[i][j],return1
- 将A[i][j]添加到结构中
- return数组迭代结束后0
这会给你一个更糟糕的情况 O(n2 log n) 或 O(n2),具体取决于您使用的结构
嵌套 for
循环的最差和最佳时间复杂度是多少?
int compare(int n, int A[][]) {
int i, j, k, m;
for (i=1; i<=n; i++) {
for (j=1; j<=n; j++) {
for (k=1; k<=n; k++) {
for (m=1; m<=n; m++) {
if (A[i][j] == A[k][m] && !(i==k && j==m))
return 1;
}
}
}
}
return 0;
}
我试图自己解决它,但对最内层循环如何增加复杂性感到非常困惑。
最佳情况时间复杂度是常数,O(1)
。当网格的第一个和第二个元素 A
相等时,将发生最佳情况。
1 1 x x x
A = x x x x x
x x x x x
x x x x x
最坏情况下的复杂度是O(n^4)
。当网格的所有元素 A
都是唯一的时,将发生最坏的情况。
1 2 3 4
A = 5 6 7 8
9 10 11 12
13 14 15 16
最佳情况:O(1),当 A[1][1] = A[1][2]
最坏情况:O(n4),当没有重复元素时 -> 你最终会为它的每个元素迭代整个数组。
请注意,您可以使用映射或集合(将其称为结构)更有效地实现它:
- 迭代数组
- 如果结构已经有A[i][j],return1
- 将A[i][j]添加到结构中
- return数组迭代结束后0
这会给你一个更糟糕的情况 O(n2 log n) 或 O(n2),具体取决于您使用的结构