子集和理论和解决方案

时间:2013-07-10 00:15:04

标签: computation-theory subset-sum

子集问题在维基百科中定义如下:

  

给定一组整数,是否存在非空   和为零的子集?例如,给定{-7,-3,-2,5,   8},答案是肯定的,因为子集{-3,-2,5}总和为零。

  

给定一组整数和一个整数s,是否有任何非空子集加到s?

这个问题的暴力解决方案是指数级的(循环遍历N个数字的所有子集,并且对于它们中的每一个,检查子集是否合并到正确的数字),有一些优化版本用于在指数时间内运行的暴力好。

假设有一种算法能够在二次和多项式时间复杂度之间计算蛮力解(上述问题的精确解)

如何将其视为与P = NP问题,时间复杂度等有关?

假设算法存在,对子集求和问题的现有技术是否会有所改进?

(我不是这个领域的专家,所以如果某些事情没有意义或不清楚,我会在这个问题上为我提供额外的输入:))

1 个答案:

答案 0 :(得分:2)

由于子集问题是NP完全的,如果你能找到问题的多项式时间解,那么你可以在多项式时间内解决NP中的所有问题,并且P = NP。

现在,当然,如果不了解NP和NP完整性是什么,上述说法就没有意义。有很多方法可以定义NP问题,但最简单的方法是,当且仅当存在可以在多项式时间内检查其解的正确性的验证者时,问题出现在NP中。在子集求和问题的情况下,显然您可以在多项式时间内验证其解。因此,这是一个NP问题。

NP-complete类是NP中的一组特殊问题,因此NP中的所有问题都可以在多项式时间内减少到NP-complete中的任何问题。例如,Cook首先证明的NP完全问题是SAT问题,在这个问题中,您尝试确定是否存在对一组布尔变量的可能赋值,以使布尔公式计算为true。使用正确的程序,您可以在多项式时间内将NP中的所有决策问题转换为SAT,这使得SAT NP完全。您可以找到有关原始证明here的更多详细信息,但需要了解图灵机。

为了证明新问题的NP完整性,您可以尝试将现有的NP完全问题减少到新问题。作为一个例子,我们知道SAT问题可以很容易地解决为3-SAT问题。这意味着给定SAT问题,我们可以将其转换为3-SAT版本,以便解决等效的3-SAT问题将为我们提供原始SAT问题的结果。由于NP中的所有问题都可以减少到SAT,并且SAT可以减少到3-SAT,这使得3-SAT问题NP完全。

Here很好地证明了如何将3-SAT减少到子集和问题。作为证明的结果,子集和问题是NP完全的。因此,如果你能找到子集和问题的多项式时间解决方案,那么你可以在多项式时间内解决所有NP问题(是的,包括旅行推销员,图形着色,背包等问题)(因为所有减少都是在多项式时间完成。)