子集总和问题的正确定义

问题描述

读汉斯·凯勒(Hans Kellerer),乌尔里希·普弗西(Ulrich Pferschy)和戴维·皮辛格(David Pisinger)所著的《背包问题》(2004),关于子集和问题,我发现了这个定义(第4章):

给出一组 N = {1,...,n} 个具有正整数权重的 n 个项目 W1,...,Wn 和容量 c ,子集和问题(SSP)是要找到 N 的子集,以使相应的总重量最大 不超过容量 c

在2.1节中正式发现(抱歉,没有LaTeX支持)

enter image description here

寻找伪代码样本,我发现了这个wikipedia article,其中声明了一个完全不同的(尽管非正式的)定义:

给定一组整数(或多个整数),是否有一个非空子集 总数为零?

尽管它也说有几种等效的表达方式,但我不认为这一点和本书完全可以等同。

我在这里看着两个不同的问题,以为是一样的吗?我想念什么?

谢谢

解决方法

是的,这两个定义不相等。背包问题中的定义描述了优化问题。在这种情况下,这是一个NP-Hard问题。维基百科上的定义描述了存在问题。这是NP完成。

两个定义之间的一大区别是正确性的验证。

  • 存在问题可以在线性时间内轻松验证。对解决方案求和,并检查其是否为0。
  • 难以验证优化。计算得出的解决方案真的是最好的解决方案,还是有更好的解决方案?

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...