我陷入了以下问题Problem Statement。 我已经考虑了一段时间,然后查看了一些问题的线索,因为我无法提出解决方案。我的理解是,这是“Bin Packing”问题的一个特例,一般都是NP-Hard。 特别是CodeForces Blog Idea看这个想法,我无法理解为什么这里的效果最佳。特别是我们如何证明这种算法是最优的?
问题陈述:
恩佐正在为他的新房子进行翻新。最困难的部分是 购买完全合适数量的瓷砖。他想要N个瓷砖 不同的尺寸。当然,他们必须从瓷砖上切下来 买的。所有必需的瓷砖都是方形的。侧面的长度 瓦片是2 ^ S1,2 ^ S2,...,2 ^ SN。他只能买很多尺寸的瓷砖 M * M,他决定只切割平行于其边缘的瓷砖 方便。他需要买几块瓷砖?
答案 0 :(得分:4)
所提出的解决方案的本质是首先适合递减(FFD)启发式。
如果对于每个 a i < ,那么让我们调用Bin Packing问题嵌套的大小。 a j , i = k ij a j 。请注意,根据此定义,原始问题是嵌套Bin Packing 问题。
让我们证明FFD启发式解决嵌套Bin Packing 。考虑一个反例:非增加的项目大小序列 a i 以及FFD启发式无法实现的最佳解决方案OPT。第一个 i 需要箱号OPT + 1。这意味着,所有以前的项目都已打包,并且项目 i 没有空间。
让我们使用FFD和 i 项目的最佳分布来比较第一个 i-1 项目的分布。通过 a i ,最佳分布的放置项目的总大小更高。因此,对于至少一个箱,最佳分配的物品的总尺寸大于FFD分布。由于嵌套,到目前为止考虑的所有项目可能会分成若干个 a i 大小的项目,因此两个总数都是a i ,它们之间的最小可能差异是 a i 。因此,我们发现项目 i 的bin,导致矛盾。
在1D案例(原始 Bin Packing 问题)中,矛盾很明显,但对于2D情况则不那么清楚。让我们介绍一个单元格大小 A =√a i 的网格和左上角的原点。已放置标题的边长将是 A 的倍数。我们将两个解决方案中的所有标题都转移到顶部(按从上到下的顺序),然后转到左侧(按从左到右的顺序)。之后,所有图块将在网格上具有整数坐标。但是在最优解中有比FFD更多的占用单元,因此应该至少有一个 A×A 单元在最优解中占用,并且在FFD中是自由的。我们用它来放置瓷砖 i 。