用于找到完全覆盖矩形集所需的最少固定大小矩形的算法

时间:2015-08-25 14:18:47

标签: c# algorithm math geometry 2d

我在不同的地方有一系列不同大小的矩形 - 我们称之为#34;收集A"。

目标是生成固定大小矩形(集合B)的二级集合,其中包含集合A中的所有矩形。集合B中的矩形将具有2000x1000像素的固定大小。我试图对此进行优化,因此集合B包含尽可能少的矩形。

Example

在上图中,红色矩形表示集合A.我们能够在3个固定大小的矩形中包含所有这些。

一些规则:

  1. 集合A中的所有矩形必须完全包含在边界内 来自Collection B的矩形。

  2. 集合B矩形必须始终为2000x1000像素。

  3. 集合矩形的大小介于50x50px和1999x999px之间。从不宽于1999px或高于999px。

  4. 集合矩形将分布在整个区域中,其数量是Collection B矩形的几倍。

  5. 只要符合规则1,允许集合A中的矩形部分或完全出现在集合B的多个矩形的边界内。

  6. 两个集合中的所有矩形都是轴平行的。

  7. 我确定有一些如何解决此类问题的示例,但我不确定这个问题是什么,所以我的搜索没有出现任何有用的信息。

1 个答案:

答案 0 :(得分:0)

假设B矩形重叠是可以的,那么我会做以下事情。首先,对于可以被一个B矩形覆盖的每组A矩形,枚举一个这样的B矩形。我们可以向上和向右滑动B矩形,直到它靠在两个A矩形的边缘上,所以我们要做的就是从A矩形中收集左x坐标和下y坐标的集合。 ,对于直接产品中的每个元素,将B矩形的左下角放在那里。

现在,对于这些B矩形中的每一个,确定它所覆盖的A矩形集。然后将覆盖问题转换为set cover integer program并使用整数程序求解器来找到最佳解决方案。