我需要设计一个算法进行简单的碎片整理,但要具有“最小更改量”的特性。假设我有三个容器,容量为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
我已经做了一些研究,但我找到的要么是背包问题,要么是Buddy算法,但我不确定这是否真的是我要找的。
你们中的任何一个能帮助我设计尽可能简单的算法吗? 我正在解决这样一种情况:我将拥有少量大容器和大量物品,因此枚举所有可能性并不是很优化。
非常感谢!
更新:只是为了明确我的问题 - 确定是否可以通过仅进行一次更改来解决问题并不是问题。 问题在于如何在“一次移动”不可行时找到最小的替换次数。
2
从容器1移动到容器2,然后将3
放在容器1中。但是,从容器3移动单个1
,然后将3
放在容器3中,这样不是更"快"吗?你只需要重新定位1个单位而不是2个。 - Mr. Llama