解决 0/1 背包的变化(物品的多个来源,每个物品都可以从一个来源中选择)

Posted

技术标签:

【中文标题】解决 0/1 背包的变化(物品的多个来源,每个物品都可以从一个来源中选择)【英文标题】:Solving a variation of 0/1 Knapsack (multiple source for items, each item can be selected from one of the sources) 【发布时间】:2011-03-20 21:28:07 【问题描述】:

所以对于一个练习题,我们应该设计一个动态规划算法,它是 0/1 背包问题的变体......基本上每个项目都来自 4 个不同的来源,并且该项目只能取自一个来源..

即,

S1=(d_k, b_k) | 1 ≤ k ≤ n,
S2=(d_k, b_k) | n + 1 ≤ k ≤ 2n,
S3=(d_k, b_k) | 2n + 1 ≤ k ≤ 3n,
S4 = (d_k, b_k) | 3n + 1 ≤ k ≤ 4n

对于n = 10,如果你选择i = 16放,那意味着你不会选择6, 26 or 36...

你能帮我解决这个问题并设计递归方程吗?

【问题讨论】:

【参考方案1】:

我们有 4n 个元素。

符号:

V[k] - 元素 k 的值 (1 W[k] - 元素 k 的权重 (1 B - 绑定 f(k,B) - 边界为 B 且您有 4k 个元素时的最优解的值。

对于第 k 个元素,我们有五种可能的选择:

    未将第 k 个元素插入背包。在该约束下,最优解的值为f(k-1,B)。为什么?因为我们还有 k-1 个元素,但边界仍然是 B。 从 S1 中获取第 k 个元素。在该约束下,最优解的值为V[k] + f(k-1, B - W[k])。为什么?我们已经为第 k 个元素赢得了 V[k] 和腰围 W[k]。因此,对于其余元素,我们将获得 f(k-1, B - W[k])。 从 S2 中获取第 k 个元素。使用与之前相同的逻辑,可以看出该约束下最优解的值为V[k+n] + f(k-1, B - W[k+n])。 从 S3 中获取第 n 个元素。最佳:V[k+2n] + f(k-1, B - W[k+2n])。 从 S4 中获取第 n 个元素。最佳:V[k+3n] + f(k-1, B - W[k+3n])

你的目标是最大化 f。因此递归方程为:

f(k, B) =
   max  
        f(k-1,B),                      //you don't take item n
        V[k]    + f(k-1, B - W[k]),    //you take item k from S1
        V[k+n]  + f(k-1, B - W[k+n]),  //you take item k from S2
        V[k+2n] + f(k-1, B - W[k+2n]), //you take item k from S3
        V[k+3n] + f(k-1, B - W[k+3n])  //you take item k from S2
   

剩下的就是找到初始条件了。

【讨论】:

这是一个非常好的明确答案,但在我看来,仅仅为他(或她)做 Wonder 的家庭作业太过分了。顺便说一句,您有一个错误:您使用 n 来表示“我们正在考虑添加的项目的数量”和“项目的总数”。调用前一个k,比如你的“3n”应该是“k+2n”等等 @Gareth:感谢您找到我的错误。我已经编辑了我的答案并修复了它。关于解决Wonder的作业:我确实透露了困难部分的最终答案,但只是在充分解释了其背后的逻辑之后。他可以在不阅读我答案的最后一部分的情况下提出解决方案。不过,我认为给他最终的答案是可以的,这样他就可以确保他做对了。我相信他确实花时间思考,而且他不只是复制解决方案。【参考方案2】:

标准0/1背包问题:对于每件物品,要么你不带,要么你带。

你的问题:对于每个项目,要么你不接受它,要么你从源 1 中获取它,或者......,或者你从源 4 中获取它。

现在看一下 0/1 背包问题的常用动态规划算法和递归关系。看递归关系中RHS的每一位是从哪里来的;它对应于上面的第一个语句。改用上面的第二条语句。

(如果我有点神秘,那是因为这是家庭作业,你应该学习 :-)。)

【讨论】:

是的,感谢您的回复。是的,我应该从中学习:) 那么我建议你忽略snakile的(优秀)答案,除非你真的卡住了。 :-)

以上是关于解决 0/1 背包的变化(物品的多个来源,每个物品都可以从一个来源中选择)的主要内容,如果未能解决你的问题,请参考以下文章

试图解决背包问题的变化

动态规划-背包问题

动态规划-背包问题

动态规划-背包问题

背包问题

0-1 背包问题