我目前有一个正方形和一系列以下尺寸的矩形: (225,300),(225,450),(450,225),(300,225)
我需要设计一种算法来确定此方块中所有可能的块组合而不重叠,始终填充整个框并假设每个块都有无限量。目前是否有任何算法以有效的方式处理这个问题?
答案 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)填充。
答案是真的当且仅当
以下是我的解释。