增加矩阵的数据结构

时间:2016-02-07 06:45:07

标签: arrays data-structures time-complexity

给定大小为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循环并读取(i,j)以获得我的结果,并且在最坏的情况下将只是恒定时间n。我是在正确的轨道上还是我仍然需要以某种方式增强数据结构。任何帮助表示赞赏,谢谢。

1 个答案:

答案 0 :(得分:0)

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

要执行initialize()操作,需要创建矩阵和rowCount / colCount数组,并将所有内容初始化为0.这需要时间O(n 2 )。要执行读(i,j),只需在时间O(1)中读取矩阵。要执行写入(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)保证而不是最坏情况担保。根据具体情况,这可能是一个很好的权衡。