繁体   English   中英

如果我使用两个变量遍历2D数组,那时间是否仍然是O(n ^ 2)?

[英]If I use two variables to iterate through a 2D array is that still O(n^2) time complexity?

for (let i = 0; i < array.length; i += 1) {
  const row = array[i];
  for (let j = 0; j < row.length; j += 1) {
      const el = row[j];
  }
}

这将是遍历2D数组nxn矩阵的一种典型方式,我认为O(n ^ 2)的时间复杂度。

如果我这样做

let count = 0;
let i = 0;
let j = 0;
const n = arr.length;
const max = n * n;

while (count !== max) {
  const ele = arr[i][j];
  if (j === n - 1) {
    j = 0;
    i += 1;
  } else j += 1;
  count += 1;
}

还是O(n ^ 2)吗? 有点愚蠢的问题,我想答案是肯定的,但是我只想仔细检查一下。 显然,第一种方法更加清晰,但随后的时间复杂度也较低。

给定n = max(array.length,array [0] .length)

是的 -它们都是O(n ^ 2) 即使是一个循环, while循环所经过的元素数也与2个for循环所经历的元素数相同。

换句话说,通过for循环,您将(大约)遍历n个大小的n次,而使用while循环,您将经历一次n ^ 2大小的块一次。

好吧,起初它并不是真的 O(n 2 )。

Big-O通过给出其执行时间如何随算法处理的元素数量的增长而扩展的概念,来告诉您算法的最坏情况。

对于二维矩阵,虽然矩阵确实是正方形(或至少是矩形),但此处将矩阵的长度用作n并不真正合适。 相反,您应该使用矩阵中的像元数( i x j )。

实际上,二维矩阵是一个数组数组,您的算法只是简单地单步遍历每个单元格,在两种情况下都使其为O(n)。 可以说它是O( i x j ),但它仍然是线性算法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM