【发布时间】:2016-03-12 13:34:59
【问题描述】:
我需要设计一种算法来进行简单的碎片整理,但具有“最小更改量”功能。假设我有 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
我已经做了一些研究,我只能找到背包问题或好友算法,但我不确定这些是否真的是我想要的。
你们中的任何人都可以帮助我尽可能简单地设计这个算法吗?我正在解决这样一种情况,即我的大型容器数量很少,但其中的物品数量很大,因此列举所有可能性并不是很理想。
非常感谢!
更新 只是为了弄清楚我在问什么 - 确定是否可以通过仅进行一项更改来解决这种情况是没有问题的。问题是,在“单步走”不可能的情况下,如何找到最少的替换。
【问题讨论】:
-
所有容器的大小都必须相同吗?
-
不,他们不是。但是尺寸是给定的,我不能即时修改它们。
-
你能按物品大小对容器进行分类吗?
-
我可以随意对容器进行分类。容器的顺序完全不重要。
-
我不是 100% 确定你的例子是有效的。您建议的解决方案是将
2从容器 1 移动到容器 2,然后将3放在容器 1 中。不会将单个1从容器 3 中移动,然后将3放在容器 3 中“更快” ?您只搬迁了 1 个单位而不是 2 个。
标签: algorithm optimization defragmentation