【发布时间】:2014-01-06 23:46:41
【问题描述】:
我遇到的问题如下:
给定一个包含 N 个项目的队列,每个项目都有一个权重,以及 K 个容器的队列。我们需要按照物品来的顺序将物品分配到容器中。例如,第一个项目只能进入第一个容器,第二个项目可以进入第一个或第二个但不能进入第三个(否则第二个容器将没有任何项目)。
我需要创建并实现一种算法来实现某种均匀分布,因此最重的容器必须尽可能轻巧;给出具有这种重量的容器的数量。
我想这是 3 分区或背包问题的一些变体。我已经使用动态编程实现了一种可能的分发解决方案,并尝试从其中使用的表中获取计数。但它不够有效(内存太贵),并且获取容器数量的算法不正确。
有人可以解释一下,哪种算法可以解决这个问题?
【问题讨论】:
-
N > K时,最后的N-K物品可以放在任何容器中吗? -
您的问题是否与Bin-Packing problem 或更普遍的Cutting Stock problem 没有更多共同点?
-
@Andy Jones,不,每个容器都应该使用,并且应该按顺序使用。所以我们可以将前 3 个项目放入第一个容器,然后将 5 个放入第二个容器,N-K 应该以某种方式在另一个容器之间分配。或者我只是没有清楚地理解你的问题。
-
@asQuirreL 谢谢,我会详细了解这个问题
-
我可能遗漏了一些东西,但是您的问题可以改写为“”给定一个
n元素数组,我们如何将它划分为k连续段,使得元素的最大总和任何部分都被最小化了?”因为如果是这样,您的问题是repeat of this one,它提供了一个高效的 DP 解决方案。或者您是否正在寻找比这更有效的东西?
标签: algorithm optimization dynamic-programming combinatorics