查找完全由1组成的最大子阵(矩形)区域的算法

时间:2013-02-06 10:40:21

标签: algorithm language-agnostic

有一个二维二进制数组(01的二维数组),其中m行和n列;提供一种有效的算法来查找完全由1 s组成的最大子阵列(矩形)的区域。

public int findMaxRectangleArea(int[][] A,int m,int n);

有人可以帮我解决算法部分吗?

2 个答案:

答案 0 :(得分:2)

我会尝试这样的方法:

逐行从左到右迭代,直到找到0

0可能已经识别出1 s的两个矩形:

  • 上面的所有行
  • 从左上角到0
  • 左侧的位置

其中一个更大,请记住它。

First step

然后递归下降到三个未知的扇区(其中两个部分未知)可能仍然包含一个比你已经找到的更大的矩形:

Second step

确保不要再次遍历已知行,这是多余的。

我相信这个解决方案最多可以查看每个字段两次(递归步骤的扇区重叠),因此它应该以θ(x​​ * y)运行。

答案 1 :(得分:0)

这取决于最小阵列尺寸的大小。如果它小于目标平台上的最大字大小,则可以将数组转换为一维位图数组,并使用一系列滑动位掩码窗口来查找矩形。