【问题标题】:algorithm to find area of largest sub-array(rectangle) consisting entirely of 1's [closed]查找完全由1组成的最大子阵列(矩形)区域的算法[关闭]
【发布时间】:2013-02-06 10:40:21
【问题描述】:

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

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

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

【问题讨论】:

标签: algorithm language-agnostic


【解决方案1】:

我会尝试这样的方法:

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

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

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

其中一个更大,记住它。

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

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

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

【讨论】:

  • 还没有……有一个您省略的合并步骤并非微不足道。所以你在找到 0 之后已经划分了问题,但是在递归解决了较小的部分之后,你需要合并...
  • 合并这一步真的不简单吗?如果一个解决方案是小块,它完全包含在其中一个中,所以整个解决方案只是四个中最大的一个。如果我错了,请举个例子。
  • 我不知道,但它没有被列出...微不足道与否是主观的。我的观点是解决方案不完整。我还没想过……
【解决方案2】:

这完全取决于您的最小数组维度有多大。如果它小于目标平台上的最大字长,则可以将数组制作成一维位图数组,并使用一系列滑动位掩码窗口来查找矩形。

【讨论】:

    猜你喜欢
    • 2015-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-17
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多