“真实”元素的最大连续方形子矩阵

时间:2012-07-29 19:19:44

标签: algorithm language-agnostic matrix

这是一个采访问题:给定一个布尔矩阵找到最大的连续方形子矩阵的大小,该子矩阵只包含“真”元素。

我在SO上发现了这个question,但却不明白答案。所提出的算法从左上方向右下方移动一条对角线,并随着线的移动跟踪“真实”元素的矩形。

我的问题:

  • 如何跟踪算法中的矩形?
  • 为什么我们移动对角线线?如果我们移动垂直/水平线或两者都会怎么样?
  • 如何计算算法复杂度?

1 个答案:

答案 0 :(得分:4)

我无法理解the answer in the link you posted,我不认为那里的复杂性对你的问题是最佳的。 (它声称存在O(N^(3/2)*logN)算法,其中N=n*n是原始矩阵中元素的数量。)

对于您最大的 square 子矩阵问题,有一个DP算法,其复杂度与元素数量成线性关系:

让原始矩阵为A[n][n],我们正在尝试找到矩阵B[n][n],其中B[i][j]表示最右边的子矩阵的大小,其右下角元素为{{ 1}}。所以

A[i][j]

最大的B [i] [j]就是答案。

P.S。我没有检查数组范围以进行简化。您可以只考虑超出范围的元素为零。