[英]Solving a variation of the knapsack in which the value of an item depends on items that are already in the sack
我正在尝试解决以下问题:
我有一组N
项目,其中每对项目都有一个共同得分,我需要选择W
项目的组合,以使总得分最高。
例如,项目i,j,k
总分是
score(i,j) + score(i,k) + score(j,k).
为了避免经历所有N^W
可能的组合,我考虑过对0-1
背包问题进行变型,并通过动态编程来解决这两个变化:
W
物品) 我已经开始用这两个更改对解决方案进行编码,但是现在,我想得更多了,因为“最优子结构”属性不成立,恐怕无法用动态编程来解决。
例如,如果W=3
并且项i,j,k
是最优解,则对于W=2
, i,j
不一定是最优解(根据上述总分的计算)。
有谁知道如何通过动态编程而不是O(N^W)
蛮力解决此问题?
谢谢
您的问题是NP难的,这意味着几乎可以肯定没有快速的多项式时间算法可以解决它,因为没有人能够提出多项式时间算法来解决NP难的问题。 要查看NP硬度,假设您有一个图形,其中节点是您的索引,并且如果i和j之间有边,则将i,j之间的分数定义为1,否则为0。然后,如果可以,在多项式时间内,找到最多包含W个节点的节点的最大分数子集,然后可以在多项式时间内找出图中是否有大小为W的团。 这是一个NP完全问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.