此问题可以描述如下;
给定一个矩形,其宽度和高度可以随机地取大;并给出一些较小的矩形或正方形,表示基本元素,例如6*6, 8*4, 4*4, 6*4, 4*4, 2*2, 1*1
;有一些算法可以有效地覆盖给定的矩形吗?有两个约束,
例如,给一个8*8
方块;可以分为一个6*6
,然后分成七个2*2
;另一个选项是四个4*4
;另一个选项是两个8*4
;另一个选择是八个1*1
;并且还有其他一些选择来获得8*8
平方。使用给定的两个约束,将选择两个8*4
作为最佳结果。
有解决这个问题的好算法吗?
答案 0 :(得分:1)
您的问题是著名的knapsack problem的变体,因此可以朝这个方向进行一些研究。 这是NP困难的。
困扰您的一件事是您的评分功能尚未明确。因此,矩形没有任何价值,也不会因为引入另一种类型的图块而受到任何惩罚,因此您可以明确地说,对于覆盖10*10
区域,解决方案1 x 6*6, 1 x 4*6, 1 x 6*4, 1 x 4*4
(元素可以转向吗?)更好或更比25 x 2*2
更糟。哪个约束权重更大:具有更少的不同部分,或具有更大的组成部分。
基于这个遗漏的规范,我会说最简单的方法是使用最大的可用块,这些边是要填充的矩形的分隔线。因此该解决方案始终为n x i*j
,因为这是一种无脑的解决方案,并且始终有效且不需要任何复杂的算法,并且适合第一个(最高优先级?!)约束。
小笔记:
您的问题还出现在工业生产的许多领域,例如在设计电路板时的电气工程领域。添加另一个不同的组件不仅增加了组件价格,还增加了成本。
因此,希望使材料清单(BOM)保持简短,并尝试替换其他组件仅使用一次的组件。例如。在电路板上。如果设计中已经有很多100Ohm的电阻,那么不放置单个200Ohm的电阻而是在其中放置2个100Ohm的电阻可能会更便宜。因此可以避免购买其他物品,需要存储,可能要进行测试以及在生产线中进行设置。...