Largest submatrix with equal no of 1's and 0's
algorithm, dynamic-programming
Solution
This algorithm assumes that we search a sub-matrix with contiguous rows and columns and with the largest possible product of height and width.
Start with the following pre-processing:
A = substitute_zero_with_minus_one(InputMatrix)
B = prefix_sum_for_each_column(A)
C = prefix_sum_for_each_row(B)
Now for each pair of rows (i, j) do the folowing:
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
Time complexity is O(N2 * M), extra space is O(N * M).
Problem
Given a matrix of size `mxn` containing 0's and 1's only. I need to find the largest sub-matrix which has equal number of 1's and 0's in it. Brute force approach would be `O(m^2*n^2)` Can we do any better than this? I tried applying dynamic programming, but couldn't find any optimal substructure to it. I believe a similar one-dimensional version of this problem was discussed here: Space-efficient algorithm for finding the largest balanced subarray? which has an `O(n)` solution using some extra space.