我需要设计一种算法来进行简单的碎片整理,但具有“最小更改量”功能。假设我有 3 个容量为 10 的容器,其中包含以下物品:
Container 1: 2 3 3
Container 2: 4 4
Container 3: 1 5 1 1
所有的容器都装满了 8/10。现在我想放置下一个大小为 3 的项目 - 总可用容量为 6,但没有一个容器的可用容量为 3。虽然有多种可能的碎片整理解决方案,但我需要算法,它会找到解决方案,其中第一个容器中大小为 2 的项目将被放置在其他地方,因此新项目可以然后放置到容器 1 中,因为此解决方案只需要进行一次更改(而不是替换容器 3 中的两个项目)。所以所需的结果应该是:
Container 1: 3 3 3(new item)
Container 2: 4 4 2(moved from Container 1)
Container 3: 1 5 1 1
我已经做了一些研究,我只能找到背包问题或好友算法,但我不确定这些是否真的是我想要的。
你们中的任何人都可以帮助我尽可能简单地设计这个算法吗?我正在解决一种情况,即我将有少量的大型容器和大量的物品,因此列举所有可能性并不是最优的。
非常感谢!
更新只是为了弄清楚我在问什么-确定是否可以通过仅进行一项更改来解决这种情况是没有问题的。问题是,当“单步走”不可能时,如何找到最少的替换数量。