给定一个大小矩阵,mxn仅包含0和1。我需要找到最大的子矩阵,其中有相等的1和0。蛮力方法将是O(m^2*n^2)我们能做得更好吗? 我尝试应用动态编程,但找不到任何最佳子结构。
mxn
O(m^2*n^2)
该算法假定我们搜索具有连续行和列且高度和宽度的最大可能乘积的子矩阵。
从以下预处理开始:
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)。