【问题标题】:Augmenting data structure for matrix矩阵的增强数据结构
【发布时间】:2016-02-07 06:45:06
【问题描述】:

给定一个大小为 n 的方阵(数据结构),操作如下

read(i,j) returns the element
write(i,j,x) write the new element 
initalize() set matrix to zero

并且读取和写入在(最坏情况)恒定时间内执行。 如何扩充它,以便在(最坏情况)恒定时间内执行以下操作?

emptyrow(i) if the ith row is empty then return true
emptycol(j) if the jth col is empty then return true

我的第一个想法是我不需要增强。我可以简单地使用一个 for 循环和 read(i,j) 来得到我的结果,在最坏的情况下将只是常数时间 n。我是在正确的轨道上还是我仍然需要以某种方式扩充数据结构。任何帮助表示赞赏,谢谢。

【问题讨论】:

    标签: arrays data-structures time-complexity


    【解决方案1】:

    考虑将数据结构存储为条目的 n × n 矩阵,加上两个额外的数组:一个 rowCount 数组,用于计算矩阵的每一行中有多少个 1,以及一个 colCount 数组,其中包含每列中有多少个 1数组。

    要执行 initialize() 操作,您需要创建矩阵和 rowCount / colCount 数组并将所有内容初始化为 0。这需要时间 O(n2)。要执行读取(i,j),只需在 O(1) 时间内从矩阵中读取。要执行 write(i, j, x),请将 x 写入位置 (i, j),如果您将 0 更改为 1 或 1 更改为 0,请对 rowCount 和 colCount 数组进行适当的递增/递减。这也需要时间 O(1)。最后,要执行 emptyRow(i) 或 emptyCol(j),只需分别返回 rowCount[i] 或 colCount[j] 是否为零。这也需要时间 O(1)。

    如果您对所有内容都使用哈希表并将“空”视为 0,则可以加快构建 O(1),尽管您现在对剩余操作有平均情况 O(1) 保证,而不是最坏情况保证。根据具体情况,这可能是一个很好的权衡。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 2011-06-11
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      相关资源
      最近更新 更多