声明二维数组的时间复杂度是多少?



声明二维数组的最坏情况运行时间是多少?二维数组不是严格意义上的正方形。我见过说它是O(n(的答案,我也见过说它的O(n²(的答案。

在我看来,当声明这样的对象数组时:

Object[][] gridArray = new Object[i][j];
//The number of elements n = i*j

声明数组时的时间复杂度应该是 O(n(,因为它会根据元素的数量线性扩展。我错过了什么吗?

这取决于你所说的n是什么意思。

有些人可能会将n定义为您的i,并看到j依赖于此,例如方形n * n,对于该定义,您可以得到O(n^2)O(i * i)O(i * j)如果j in O(i)

但是,您将其定义为n = i * j。所以是的,这对你对n的定义是O(n)的,但这种符号隐藏了可能更合适的O(i * j)


但请注意,这取决于您的语言是否在创建时实际初始化所有这些数组条目。有些语言不这样做!

我猜你的代码是Java,这种语言实际上将每个条目都设置为初始值。在你的情况下,这将是null的,因此它确实创建了i * j元素并将它们设置为null,产生O(i * j)

另请查看用于创建二维数组的语法,其中详细解释了代码的工作原理。

最新更新