遍历2d阵列的时间复杂度是多少?

时间:2015-05-07 12:15:58

标签: c++ arrays algorithm for-loop time-complexity

遍历(行,列)二维数组的时间复杂度是多少?

bool check(int array [9][9])
{ 
    int num=0;
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) { 
            if (array [i][j] == 0) {        
                num++;
            }
        }
    }
    return num;
}

我认为loop的每一个都取n的平方根,以便嵌套循环完全取O(n)遍历所有元素,我将n定义为总数输入的大小(在这种情况下是array中的81个元素)。这是对的吗?

5 个答案:

答案 0 :(得分:14)

当您将n定义为输入的总大小时,是的,您建议的算法的运行时间将是O(n):您正在对输入的每个元素执行一个单独的操作, n总操作。

如果这个问题产生的混淆是按照惯例,多维数组并不是指它们的总大小,而是分别用它们的每个维度来表示。因此,不要将array视为大小为n(81),而是将其视为大小为p x q(9 x 9)的数组。这会给你一个O(pq)的运行时间。或者,如果我们将其限制为具有维度rO(r^2)的方形数组。

所有这些都是正确的,这就是为什么在谈论时间复杂性时提前明确定义变量的重要性。否则,当您使用n来表示大小时大多数人会认为n将是一个维度时,您会引起很多混淆。

答案 1 :(得分:3)

时间复杂度为O (n*m),其中n为第一维的数组数,m为每个内部数组的最大大小,即第二维。

答案 2 :(得分:2)

对于任何形式的算法

for (1..n) {
    for (1..m) { 
        doSomething();
    }
}

平均,最佳和最差情况时间复杂度为O(n x m)。在您的情况下,如果n = m,则变为O(n^2)

答案 3 :(得分:-1)

也可以通过单个循环遍历2-d数组arr[i][j],其中循环将运行(i×j)次。

考虑n = (i×j),然后遍历2-d数组的时间复杂度为O(n)。

感谢coder2design.com

答案 4 :(得分:-1)

时间复杂度为O(N),这意味着其时间复杂度为线性。 让我们看一下时间复杂度的概念。当我们用Big O表示法定义任何时间复杂度时,其含义是在最坏的执行情况下"angularCompilerOptions": { "defaultEncapsulation": 1 } 与运行时间的关系图看起来如何。

对于给定的嵌套循环,数据的大小为9 * 9 =81。无论您在内部for循环中执行什么操作。循环执行的次数不会超过9 * 9 = 81次。如果数组的大小为[10] [10],则循环将执行不超过100次。

如果使用输入或数据数量制作代码执行时间图,它将是线性的。