4个嵌套“ for”循环的最佳和最差情况时间复杂度?

时间:2018-09-12 20:01:11

标签: c algorithm for-loop time-complexity nested-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;
}

我试图自己解决这个问题,但对于最内部的循环将如何增加复杂性感到非常困惑。

2 个答案:

答案 0 :(得分:2)

最佳情况下时间复杂度是恒定的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

答案 1 :(得分:2)

最佳情况:当A [1] [1] = A [1] [2]时为O(1)

最坏的情况:O(n 4 ),当没有重复的元素时->最终要遍历每个元素的整个数组。

请注意,您可以使用地图或集合(将其称为结构)更有效地实现它:

  • 迭代数组
  • 如果结构已经具有A [i] [j],则返回1
  • 在结构中添加A [i] [j]
  • 数组迭代结束后返回0

根据您使用的结构,这将使O(n 2 log n)或O(n 2 )的情况更糟