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.
We assume m < n, and we can have an O(M * M * N) algorithm. And if we replace all 0 by -1, we just find the largest submaxtrix whose sum is 0.
I assume a submatrice is formed using only contiguous rows\columns of the original matrix (ie by removing first\last row or columns).
This way, a matrix can be represented as
If the original matrix is of dimension M x N, then
The variable
row
andcol
has respectivelyM
andN
possible values, which means there areO(MxN)
of such matrices.Idea of Algorithm
(m, n)
from queue(m, n-1)
and(m-1, n)
and put on queueNow there are two points:
O(n)
orO(m)
time. this is the dynamic programming step.Which mean the complexity is
O(max(M,N)MN)
I created a small application that demonstrates an search algorithm optimization. Please let me know if this is what you are looking for.
Notes:
Here it is:
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:
Now for each pair of rows (i, j) do the folowing:
Time complexity is O(N2 * M), extra space is O(N * M).