算法搜索由非重叠矩形形成的最大区域

时间:2019-04-30 06:58:50

标签: algorithm

给定2D坐标平面上的一些矩形,我想找到一种算法来查找由非重叠矩形形成的最大区域。

我的第一个念头是:

  1. 检查矩形Ri,Rj是否对所有i,j重叠

  2. 矩形Ri是一个节点。我们在任何不重叠的矩形Ri,Rj对之间构造一条边

  3. 然后我们有了一个无向图

  4. 查找所有子图,它们是完整的图。

  5. 对节点的权重求和,找到最大的节点

但是,这种暴力方式已经是NP完整的了。我也看不到一种简单的贪婪算法,该算法也不起作用。我想知道是否有任何多项式时间方法来解决这个问题。谢谢!

1 个答案:

答案 0 :(得分:0)

整数编程将非常适合此问题。使用求解器库,设置以下整数程序。

maximize sum_{rectangles R} area(R) x_R
subject to
for each pair of overlapping rectangles R1, R2:
    x_R1 + x_R2 <= 1
variables x_R in {0, 1} for each rectangle R

变量的解释是,x_R = 1如果最优集合中包含矩形R

如果您的求解器很聪明,并且在其预求解过程中添加了集团切割,那么此公式就可以了。否则,您应该在重叠图中检测最大的集团(节点是矩形,边是重叠的矩形),并写出一个约束,即每个集团中最多只能有一个矩形。 (如果此步骤太慢,则还可以使用扫掠线算法来查找重叠矩形的最大集合。)