Algorithm 初始化二维矩阵的时间复杂度是多少?
我想将矩阵初始化为所有0值。复杂性是O(1)还是O(n)?它取决于Algorithm 初始化二维矩阵的时间复杂度是多少?,algorithm,matrix,complexity-theory,time-complexity,multidimensional-array,Algorithm,Matrix,Complexity Theory,Time Complexity,Multidimensional Array,我想将矩阵初始化为所有0值。复杂性是O(1)还是O(n)?它取决于n 如果N是方阵中的行数和列数,则复杂性为O(N^2) 如果N是矩阵中元素的总数(即N=R*C,其中R是行数,C是列数),则复杂性为O(N) 事实上,如果初始化的复杂性是一个问题,并且需要进一步的矩阵访问,您可以: 有一个额外的数据结构来跟踪哪些矩阵元素(行或列,甚至单元格)被初始化 只有在访问元素时才延迟初始化它们 这种方法在矩阵初始化中的复杂性可能不会比进一步处理中的复杂性高。除了简单的方法外,另一种方法是存储“默认值变量”
n
- 如果
是方阵中的行数和列数,则复杂性为N
O(N^2)
- 如果
是矩阵中元素的总数(即N
,其中N=R*C
是行数,R
是列数),则复杂性为C
O(N)
这种方法在矩阵初始化中的复杂性可能不会比进一步处理中的复杂性高。除了简单的方法外,另一种方法是存储“默认值变量”。然后,当您第一次访问矩阵中的单元格时,请使用该变量中的值。对于某些矩阵结构,这可能是一个很好的解决方案。这将使初始化为O(1)。您的意思是最初我将一个变量设置为0,并告诉每个矩阵元素指向该变量?如何将它们分配给0个不同呢?例如,考虑一个矩阵稀疏的情况,即大多数单元将具有相同的值。现在,您不需要保存整个矩阵,只需要存储与默认值不同的值。显然,这里的实现细节很重要。OTOH,如果矩阵密集,
memset()
与任何其他处理相比应该很好,如果矩阵稀疏,则有比2D数组更好的数据结构来容纳它。