微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

子集总和问题的正确定义

如何解决子集总和问题的正确定义

读汉斯·凯勒(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。
  • 难以验证优化。计算得出的解决方案真的是最好的解决方案,还是有更好的解决方案?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。