概览
一个典型的2D平面上的动态规划问题。给定一个仅有0
和1
矩阵,找出其中最大的,仅包含1
的正方形。
动态规划
状态定义:
定义DP[i][j]
表示矩阵M
中以位置(i, j)
为右下角的最大的正方形的边长。
状态转移方程:
由上述状态定义可知,当M[i][j] == 0
时,DP[i][j] = 0
;否则DP[i][j]
由DP[i - 1][j]
、DP[i][j - 1]
、DP[i - 1][j - 1]
中的最小值决定——考虑这三个值相等时,DP[i][j]
可以组合使边长增加1,同时若这三个值不同时增加,都无法再增加DP[i][j]
的值。
因此,状态转移方程表示为:
1 | DP[i][j] == 0 if M[i][j] == 0 |
算法的时间复杂度为$O(MN)$,空间复杂度为$O(MN)$,其中输入矩阵为$M \times N$的矩阵。