高效的矩形拟合算法

时间:2017-06-27 10:13:16

标签: algorithm dictionary graph polygon rectangles

作为输入,我有一个" map",这是一个多边形。它的所有边都与x轴或y轴平行(因此所有这些多边形都由矩形描述,它们由矩形组成,所有多边形的大小都是整数)。在这里,您可以看到正确和错误输入的示例。

This is correct map This is bad map

第二个输入是我想要放入的一组矩形。所有矩形都用他们的尺寸宽度*高度来描述(每个矩形可以有不同的整数尺寸)。

对于给定的输入,我想知道是否可以将所有矩形放到地图上。如果是这样,我想得到所有矩形的位置。而且,我可以在矩形的位置上有更多的条件。例如,我知道地图中的两个矩形A,B必须连接在一边。

这个问题有什么有效的算法吗?我会说它可以转换成一些图形问题,但我不知道如何表示它。谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

几乎可以肯定没有始终有效的算法,因为这个问题是NP-hard。要看到这一点,请注意您可以将NP-hard Partition Problem的任何实例减少为您的问题实例:

  • 对于分区问题中的每个数字x_i,创建一个1 x xi矩形。
  • 设置“第一个输入矩形”大小为2×(0.5 * s),其中s是所有x_i的总和。

当且仅当原始分区问题实例有解决方案时,上述问题的实例才有解决方案,因此如果有一种有效的方法来解决您的问题,那么您可以使用相同的算法来有效地解决分区问题(并且,通过类似的减少,每个其他NP难题)。