我的问题与2D背包问题或切割库存问题非常相似,但有一个例外...适合容器的矩形可以调整大小和裁剪,但不允许旋转。
挑战在于尽可能少地进行裁剪,并填满整个容器(绝对没有间隙)。
有没有遇到过类似的算法?任何链接、伪代码都将不胜感激。
问题是通用的,但我想将其应用于在固定大小的页面上组织照片。
非常感谢。
挑战在于尽可能少地进行裁剪,并填满整个容器(绝对没有间隙)。
有没有遇到过类似的算法?任何链接、伪代码都将不胜感激。
问题是通用的,但我想将其应用于在固定大小的页面上组织照片。
非常感谢。
首先,使用确定性的最佳适配减少算法:
按大小从大到小对矩形进行排序
将第一个矩形放入容器中,如果它适合
取下一个矩形并将其放置在容器中最佳的剩余位置而不裁剪(如果它适合其中)。 如果有多个选项,请选择留下最少边缘区域的选项。 重复此步骤,直到容器已满或所有矩形都已使用。
如果容器尚未填满,请按相同顺序遍历未使用的矩形,但这次尝试裁剪。
现在,这并不完美。 您可能会遇到类似于此图像中左侧2个解决方案的情况,在该图像中,即使不需要“无空间”项目,您也会对其进行裁剪:
因此,其次,在第一步的结果上添加元启发式算法,例如Tabu搜索或模拟退火。 如果您正在寻找一个开源库来为您执行此操作,请查看此库。
A
B
C
ABC
AB (i.e. A appears on the left)
AC
AA (i.e. A appears on the top)
BC
我不会声称这是最优的方法,但以下是一些可能让你尝试的想法。
基于评论,我将重新定义问题。我们有一个$v \times t$大小的矩形X和N个大小各异的矩形。我们希望用这N个矩形完全覆盖矩形X。我们允许按比例调整图像的原始尺寸。我们希望最小化被N个矩形所覆盖并且也不覆盖X矩形区域的面积。
以下是一个想法:
不确定它的表现如何,但可以尝试一下。