块放置算法

时间:2012-12-25 09:02:15

标签: algorithm

我目前有一个正方形和一系列以下尺寸的矩形: (225,300),(225,450),(450,225),(300,225)

我需要设计一种算法来确定此方块中所有可能的块组合而不重叠,始终填充整个框并假设每个块都有无限量。目前是否有任何算法以有效的方式处理这个问题?

2 个答案:

答案 0 :(得分:3)

在文献中,有效地 = 多项式


请注意,即使你知道你可以完全填充方块 - 找到所有可能的方法是指数级的,因为有指数的

看看6K * 6K板。填充它的一种方法是将它减少到大小为6 * 6的K ^ 2个子方块,对于每个方法,你可以使用(6,3)或(3,6)来创建它 - 导致{{1}填补广场的可能方法。 (我们仍然没有涵盖所有可能的方法)。

因此,不能多项式地(=有效地)生成所有解。
我会寻找一些回溯/穷举搜索解决方案来检查所有可能的位置以获得所需的结果。


原始答案,忽略了特定问题中的一些问题,并面对它的更一般的变化(给出的板是矩形,而不是正方形,瓷砖不是固定尺寸):

但是,确定是否有任何可能的方法来完全填充 square 矩形 1 的问题是NP-Hard,它的私有情况(给定一个“板”和一个大小为nxm的矩形)在this thread中讨论,并且被证明是NP-Hard,因此没有已知的多项式解决方案来解决这个问题

由于确定是否存在任何可能的平铺是NP-Hard,因此找不到所有这些(甚至其中一个)也不能以多项式完成(除非P=NP,但大多数认为不太可能)。


(1)原始答案写成方形但是假设矩形。对于方块,可能更容易找到单个答案,并且缩减不成立。

答案 1 :(得分:1)

如果只使用四种矩形来填充正方形,我们就可以解决这个问题。

输入: N
输出:确定尺寸为N的正方形是否可以用矩形(3,4),(3,6),(6,3)和(4,3)填充。

答案是真的当且仅当

  1. N是正整数
  2. N mod 6 == 0
  3. 以下是我的解释。

    1. N应该是整数,因为我们无法获得添加整数的分数。
    2. 如果N mod 6 == 1,则该方形mod 6的面积== 1.
      如果N mod 6 == 2,则该方形mod 6的面积== 4 如果N mod 6 == 3,则该方形mod 6的面积== 3 如果N mod 6 == 4,则该方形mod 6的面积== 4 如果N mod 6 == 5,则该方形mod 6的面积== 1.
      由于每个给定矩形的面积是6的倍数。用这些矩形填充这些正方形是不可能的。
    3. 如果N mod 6 == 0,那么我们可以用(3,6)或(6,3)填充这个方格。