在稀疏矩阵中找到最密集的n * n子矩阵

时间:2014-10-13 18:33:11

标签: algorithm matrix time-complexity sparse-matrix

我有一个稀疏的方阵,边2 * n。

例如。

1,0,0,1,0,1
0,1,1,1,0,1
1,0,0,0,1,1
0,0,1,1,0,0
1,1,1,0,0,0
0,0,0,1,1,0

我需要一种有效的方法来找到一个大小为n * n且最大量为1的子矩阵。

我找到了各种方法,但没有比O(n ^ 4)更快的方法。我还发现了更快的方法,而不要求子矩阵需要为n * n。

编辑: 子矩阵必须是连续的,

1 个答案:

答案 0 :(得分:3)

根据您对O(n ^ 4)时间算法的主张,我假设子矩阵必须是连续的,否则问题是NP难的(它比检测更难)一个混合)。对于O(n ^ 2)时间算法,只需进行O(n ^ 2)时间预处理即可实现形式的O(1)时查询"给定a, b, c, d,计算{ {1}}"

给定数组sum_{i=a}^b sum_{j=c}^d X[i,j],按如下方式计算数组X[1..m,1..n]

Y[0..m,0..n]

现在,initialize Y to the zero array for i from 1 to m for j from 1 to n Y[i,j] = Y[i-1,j] + X[i,j] end end for i from 1 to m for j from 1 to n Y[i,j] = Y[i,j-1] + Y[i,j] end end 。要计算Y[c,d] = sum_{i=1}^c sum_{j=1}^d X[i,j],请使用包含 - 排除:sum_{i=a}^b sum_{j=c}^d X[i,j]