一尘不染

等于1和0的最大子矩阵

algorithm

给定一个大小矩阵,mxn仅包含0和1。我需要找到最大的子矩阵,其中有相等的1和0。蛮力方法将是O(m^2*n^2)我们能做得更好吗?
我尝试应用动态编程,但找不到任何最佳子结构。


阅读 236

收藏
2020-07-28

共1个答案

一尘不染

该算法假定我们搜索具有连续行和列且高度和宽度的最大可能乘积的子矩阵。

从以下预处理开始:

A = substitute_zero_with_minus_one(InputMatrix)
B = prefix_sum_for_each_column(A)
C = prefix_sum_for_each_row(B)

现在,对每对行(i,j)进行以下操作:

for each column k:
  d = C[k, j] - C[k, i]
  if h[d] not empty:
    if (k - h[d]) * (j - i) is greater than best result:
      update best result
  else:
    h[d] = k

时间复杂度为O(N 2 * M),额外空间为O(N * M)。

2020-07-28