【问题标题】:What is the time complexity of initializing a 2-D matrix?初始化二维矩阵的时间复杂度是多少?
【发布时间】:2012-12-01 14:57:33
【问题描述】:

我想将矩阵初始化为所有 0 值。复杂度是 O(1) 还是 O(n)?

【问题讨论】:

  • 除了简单的方法外,另一种方法是存储“默认值变量”。然后,当您第一次访问矩阵中的单元格时,请使用该变量中的值。对于某些矩阵结构,这可能是一个很好的解决方案。这将使初始化 O(1)。
  • 你的意思是最初我将一个变量设置为 0 并告诉每个矩阵元素指向该变量?与将它们全部分配给 0 有何不同?
  • 考虑一个例子,你的矩阵将是稀疏的,即大多数单元格将具有相同的值。现在,您只需存储与默认值不同的值,而不是保存整个矩阵。显然,实现细节在这里很重要。

标签: algorithm matrix complexity-theory time-complexity multidimensional-array


【解决方案1】:

事实上,如果初始化复杂度是个问题,并且进一步矩阵访问是有序的,你可以:

  1. 有一个额外的数据结构来跟踪哪些矩阵元素(行或列甚至单元格)被初始化;
  2. 仅在访问元素时才延迟初始化元素。

这种方法在矩阵初始化中可能不会比在进一步处理中更复杂。

【讨论】:

  • OTOH,如果矩阵是密集的,memset() 与任何其他处理相比应该没问题,如果它是稀疏的,则有比二维数组更好的数据结构来保存它。
【解决方案2】:

这取决于N的含义

  • 如果N是方阵的行数和列数,那么复杂度是O(N^2)
  • 如果N是矩阵中元素的总数(即N = R*C,其中R是行数,C是列数)那么复杂度是O(N)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    相关资源
    最近更新 更多