无重量约束背包

Posted

技术标签:

【中文标题】无重量约束背包【英文标题】:Constrained Knapsack without weight 【发布时间】:2016-02-09 19:30:04 【问题描述】:

我刚刚遇到了以下问题(它让我想起了背包问题,但有一些不同):

给你 n 件物品,你必须把它们放在你的背包里,以获得最大的利润。每个项目都有特定的利润值和特定的形状。由于它们的形状,有些物品不能一起放入背包。与正常的背包问题不同,没有最大重量限制背包中物品的数量。 您还将获得每个项目的列表。在该列表中,您可以看到可以与相应物品一起放入背包的物品。

是否有计算最优解的算法? 或者它是一个NP完全问题?那样的话,有没有逼近的方法?

【问题讨论】:

【参考方案1】:

我认为这是NPC。

polynomial verification requirement 是微不足道的。

减少到Maximal Independent Set 问题。对于每个 MIS 实例 G = (V, E),构造一组项目 V,每个项目都有单位利润。对于每个项目 v ∈ V,它可以放置的项目列表是它不共享边的顶点集。即,如果 G(v) 是可以与 v 一起使用的项目列表,则 G(v) = w | (u, w) ∉ E.

如果对于新问题有一个利润k 的解决方案,那么它使用不在彼此列表中的k 个项目。由此可见,独立集问题有一个大小为k的解。

【讨论】:

非常感谢!很好的答案!现在我还发现,如果你没有单位利润,这个问题就叫做最大权重独立集。

以上是关于无重量约束背包的主要内容,如果未能解决你的问题,请参考以下文章

带有要考虑约束的物品的背包

背包算法的变体

java实现动态规划之背包问题

背包 0-1 数量固定

DataWhale 动态规划DP

算法学习——动态规划3