声明二维数组的最坏情况运行时间是多少?二维数组不是严格意义上的正方形。我见过说它是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)
。
另请查看用于创建二维数组的语法,其中详细解释了代码的工作原理。