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

时间:2017-08-21 01:37:57

标签: arrays algorithm data-structures big-o

声明2D阵列的最差运行时间是多少? 2d数组不是严格的正方形。我已经看到答案说它是O(n),我也看到了答案,说明它的O(n²)。

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

Object[][] gridArray = new Object[i][j];

//The number of elements n = i*j

声明数组时的时间复杂度应为O(n),因为它将根据将有多少元素线性扩展。我错过了什么吗?

1 个答案:

答案 0 :(得分:1)

这取决于n的含义。

有些人可能会将n定义为您的i并查看j所依赖的内容,例如正方形 n * n,用于该定义如果O(n^2),您会获得O(i * i)O(i * j)j in O(i)

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

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

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

另请参阅Syntax for creating a two-dimensional array,其中详细说明了代码的工作原理。