遍历(行,列)二维数组的时间复杂度是多少?
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个元素)。这是对的吗?
答案 0 :(得分:14)
当您将n
定义为输入的总大小时,是的,您建议的算法的运行时间将是O(n)
:您正在对输入的每个元素执行一个单独的操作, n
总操作。
如果这个问题产生的混淆是按照惯例,多维数组并不是指它们的总大小,而是分别用它们的每个维度来表示。因此,不要将array
视为大小为n
(81),而是将其视为大小为p x q
(9 x 9)的数组。这会给你一个O(pq)
的运行时间。或者,如果我们将其限制为具有维度r
,O(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)
答案 4 :(得分:-1)
时间复杂度为O(N),这意味着其时间复杂度为线性。
让我们看一下时间复杂度的概念。当我们用Big O表示法定义任何时间复杂度时,其含义是在最坏的执行情况下"angularCompilerOptions": {
"defaultEncapsulation": 1
}
与运行时间的关系图看起来如何。
对于给定的嵌套循环,数据的大小为9 * 9 =81。无论您在内部for循环中执行什么操作。循环执行的次数不会超过9 * 9 = 81次。如果数组的大小为[10] [10],则循环将执行不超过100次。
如果使用输入或数据数量制作代码执行时间图,它将是线性的。