我们如何在n x n位图中找到最大的白色矩形?

时间:2009-11-05 11:35:01

标签: c++

关于如何解决此类问题的任何想法(在C ++中) - 比如哪个是最好的算法。

2 个答案:

答案 0 :(得分:3)

假设您有一个n x n矩形区域黑白(O和1)像素,并且您正在寻找此区域中最大的白色矩形。

我会写一些简单的东西,如下所示:

  • 第一遍:为每个像素行创建一组1个线段。
  • 第二次传递聚合矩形:
    • 为每个段迭代行以找到包含它的最大矩形。
    • 如果您在流程中使用其他细分,请将其标记为已使用,无需再次尝试
    • 在任何一点上只保留找到的最大矩形

这只是可能解决方案的初稿。它应该使用更正式的算法语法重写,并且应该提供许多细节。如果你想要有效率,每一步都要隐藏陷阱以避免陷阱。但编码不应该太难。

如果我没有遗漏某些内容,我在上面描述的内容在最坏的情况下应该基本上是O(n4),第一遍O(n2)用于查找水平线段(在非常小的环路下可能非常快)在实践中第二遍可能比O(n4)少得多(取决于段大小,实际上是nb_total_segment x nb_segment_per_line x nb_overlapping_segment)。

对我来说这看起来并不坏。用更好的O复杂性看不出任何明显的方法(但当然可能有某种方式,O(n4)并不那么好)。

如果您提供有关输入结构和预期结果的一些详细信息,那么编码可能会很有趣。

答案 1 :(得分:2)