声明2D阵列的最差运行时间是多少? 2d数组不是严格的正方形。我已经看到答案说它是O(n),我也看到了答案,说明它的O(n²)。
在我看来,当声明一个像这样的对象数组时:
Object[][] gridArray = new Object[i][j];
//The number of elements n = i*j
声明数组时的时间复杂度应为O(n),因为它将根据将有多少元素线性扩展。我错过了什么吗?
答案 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,其中详细说明了代码的工作原理。