解决背包的一种变化,其中物品的价值取决于背包中已经存在的物品

Solving a variation of the knapsack in which the value of an item depends on items that are already in the sack

本文关键字:背包 存在 取决于 一种 解决 变化      更新时间:2023-10-16

我想解决以下问题:
我有一组N项目,其中每对项目都有一个相互得分,我需要选择W项目的组合,使总得分最高。
例如i,j,k项的总分为

score(i,j) + score(i,k) + score(j,k).

为了避免经历所有N^W可能的组合,我考虑对0-1背包问题做一个变化,并通过这两个变化来解决动态规划:

  1. 设置所有的权重等于1(所以最终我将得到确切的W项目在我的麻袋)
  2. 我将根据当前正在检查的物品和当时已经在麻袋中的物品"动态"计算值,而不是为每个物品设置一个常量数组。

我已经开始用这两个变化来编码解决方案,但是现在我想得更多了,我担心它不能用动态规划来解决,因为"最优子结构"属性不成立。
例如,如果W=3i,j,k项是最优解,那么对于W=2, i,j不一定是最优解(根据上述总分的计算)。
有没有人知道这个问题是如何用动态编程来解决的,而不是用O(N^W)暴力破解?

谢谢

你的问题是np困难的,这意味着几乎肯定没有快速的多项式时间算法来解决它,因为没有人能够想出一个多项式时间算法来解决np困难的问题。为了了解np硬度,假设你有一个图,其中节点是你的索引,如果在i和j之间有一条边,你定义i和j之间的分数为1,否则为0。如果你能在多项式时间内,找到包含最多W个节点的节点的最大分数子集,那么你就能在多项式时间内,算出图中是否存在一个大小为W的团。这是一个np完全问题