如何证明一个问题是NP完整的?


108

我在计划上有问题。我需要证明问题是NP完整的。有什么方法可以证明NP完整?


阅读Karp的“组合问题之间的可约性”。
保罗·汉金

Answers:


146

要显示NP是否完整的问题,您需要:

显示在NP中

换句话说,给定一些信息C,您可以创建一个多项式时间算法V,该算法将为每个可能的输入验证X是否X在您的域中。

证明顶点覆盖问题(即,对于某些图形而言G它是否具有一组顶点覆盖集的大小k,使得每个边沿在G覆盖集中至少具有一个顶点?)位于NP中:

  • 我们的输入X是一些图形G和一些数字k(来自问题定义)

  • 以我们的信息C为“ G大小图中顶点的任何可能子集k

  • 然后,我们可以写一个算法V,给定GkC,将返回该组顶点的是否是一个顶点覆盖G与否,在多项式时间

然后,对于每个图G,如果存在某个“可能G的大小为顶点的子集k”(为顶点覆盖),G则为NP

请注意,我们并没有需要找到C在多项式时间。如果可以的话,问题可能出在P。

请注意该算法V应为工作每天 G,对于一些C。对于每个输入,应该存在可以帮助我们验证输入是否在问题域中的信息。也就是说,不应存在不存在信息的输入。

证明这是NP Hard

这涉及到获得一个已知的NP完全问题,例如SAT,其形式为一组布尔表达式:

(A或B或C)和(D或E或F)和...

在表达式可满足的地方,这些布尔值存在一些设置,使表达式为true

然后在多项式时间内将NP-完全问题简化为您的问题

也就是说,给定一些输入XSAT(或任何你使用的是NP完全问题),创建一些输入Y您的问题,以便X在SAT当且仅当Y是你的问题。该函数f : X -> Y必须在多项式时间内运行。

在上面的示例中,输入Y将是图形G和顶点Cover的大小k

要获得完整的证明,您必须证明两者:

  • XSAT=> Y在你的问题

  • Y在您的问题=> XSAT

marcog的答案与其他几个可以解决的NP完全问题有关。

脚注:在第2步(证明它是NP-hard)中,将另一个NP-hard(不一定是NP-complete)问题简化为当前问题,因为NP-complete问题是NP-hard问题(即也在NP中)。


7
我想知道这背后是否缺少数据或循环推理。我的意思是如何“证明” NP中的问题而不将其提到“ NP中已经存在的” 其他问题?这就像说“它是由铁制成的,因为它的一部分被称为铁”,这并不是铁的证明。
埃尔南Eche

6
据我所记得,有一个定理叫做Cook-Levin定理,它指出SAT是NP完全的。该证明比我上面概述的要复杂得多,而且我认为我无法用自己的话来解释。
莱拉·阿加耶夫

4
更准确地说,库克-莱文定理指出SAT是NP完全的:NP中的任何问题都可以通过确定性图灵机在多项式时间内减少到确定布尔公式是否可满足(SAT)的问题。这就是您要问的缺失的部分。如果您在Wikipedia上查找定理,则有一个证明,您可以在证明中引用该定理。就是说,将SAT降低到给定的问题是我被证明NP完整性的方法。
Laila Agaev 2014年

因此,我的问题最终是SAT是否可以通过多项式求解,即P = NP问题。。谢谢您的回答。
埃尔南Eche

您能否解释一下为什么在第二步中我们无法将NP难题简化为我们想要的问题?是否一定是NP完全问题?
MLT

23

您需要将NP完全问题减少到您遇到的问题。如果减少可以在多项式时间内完成,那么您已经证明问题是NP完全的,如果问题已经在NP中,则因为:

它不比NP-完全问题容易,因为它可以在多项式时间内简化为NP-Hard问题。

有关更多信息,请参见http://www.ics.uci.edu/~eppstein/161/960312.html的末尾。


2
+1可以理解的人。而不是说一堆我几乎听不懂的关键词。
ColacX 2013年

22
第一句话是从头到尾的:您需要将已知的NP-完全问题简化您自己的问题。这表明您的问题至少与已知的NP完全问题一样困难。(b)部分也不正确:如果您找到了减少量,那么您已经知道您的问题是NP难题;唯一的问题是它是否完全在NP中(某些问题,如“停止问题”(Halting Problem)则不是)。如果它是NP硬的并且在NP中,那么它是NP完整的(即“ NP完整”比“ NP硬”更具体)。
j_random_hacker 2013年

1
我不会说a)导致矛盾,因为我们不知道P!= NP。
Chiel 10 Brinke 2014年

8

为了证明问题L是NP完全的,我们需要执行以下步骤:

  1. 证明您的问题L属于NP(即给定一个解决方案,您可以在多项式时间内验证它)
  2. 选择一个已知的NP完全问题L'
  3. 描述将L'转换为L的算法f
  4. 证明您的算法是正确的(形式为:x∈L'当且仅当f(x)∈L)
  5. 证明算法f在多项式时间内运行

7

首先,您证明它完全位于NP中。

然后,您会发现另一个已经知道NP已完成的问题,并说明如何将NP Hard问题多项式化为问题。


不。您需要证明您可以从NP完全问题简化为NP问题,以证明NP完整性并证明它完全在NP中。除非您无法在NP中证明它,否则NP hard不会出现。
mrmemio29'2013/

6
  1. 熟悉NP完整问题的一部分
  2. 证明NP硬度:将NP完全问题的任意实例简化为您的问题的实例。这是最大的一块蛋糕,而对NP Complete问题的熟悉也值得付出。根据您选择的NP完整问题,减少难度将或多或少地不同。
  3. 证明您的问题出在NP上:设计一种算法,该算法可以在多项式时间内验证实例是否为解。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.