【问题标题】:Efficient rectangles fitting algorithm高效的矩形拟合算法
【发布时间】:2017-06-27 10:13:16
【问题描述】:

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

第二个输入是一组我想要适应的矩形。所有矩形都由它们的大小宽度*高度来描述(每个矩形可以有不同的整数大小)。

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

是否有任何有效的算法来解决这个问题?我会说它可以转化为一些图形问题,但我不知道如何表示它。感谢您的帮助!

【问题讨论】:

  • 您允许翻转或旋转矩形吗?此外,矩形是否仅由宽度*高度描述?如果是这样,我们无法确定一个矩形。还是单独提供宽度和高度?
  • 你可以将其转化为一个图问题,其中每个节点是添加了一些矩形后的一个状态,这是一个有占用槽的图,以及已使用和空闲矩形的列表。例如,您可以在该图中运行 DFS,在这种情况下,您应该将已经达到和计算的状态保存在内存中,以避免多次执行它们。但是,这会很长,因为该图有太多的状态和节点(最多 2^n_slots + 2^n_rectangles 个状态)。
  • 您可以通过查找只能放在一个位置的矩形或查找只能由特定矩形填充的位置来减少可能性的数量。

标签: algorithm dictionary graph polygon rectangles


【解决方案1】:

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

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

当且仅当原始分区问题实例有解决方案时,上述问题的实例才有解决方案,因此,如果有解决问题的有效方法,那么您可以使用相同的算法来有效地解决分区问题问题(以及,通过类似的简化,所有其他 NP-hard 问题)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-12
    相关资源
    最近更新 更多