Answers:
要显示NP是否完整的问题,您需要:
换句话说,给定一些信息C
,您可以创建一个多项式时间算法V
,该算法将为每个可能的输入验证X
是否X
在您的域中。
证明顶点覆盖问题(即,对于某些图形而言G
,它是否具有一组顶点覆盖集的大小k
,使得每个边沿在G
覆盖集中至少具有一个顶点?)位于NP中:
我们的输入X
是一些图形G
和一些数字k
(来自问题定义)
以我们的信息C
为“ G
大小图中顶点的任何可能子集k
”
然后,我们可以写一个算法V
,给定G
,k
和C
,将返回该组顶点的是否是一个顶点覆盖G
与否,在多项式时间。
然后,对于每个图G
,如果存在某个“可能G
的大小为顶点的子集k
”(为顶点覆盖),G
则为NP
。
请注意,我们并没有需要找到C
在多项式时间。如果可以的话,问题可能出在P。
请注意该算法V
应为工作每天 G
,对于一些C
。对于每个输入,应该存在可以帮助我们验证输入是否在问题域中的信息。也就是说,不应存在不存在信息的输入。
这涉及到获得一个已知的NP完全问题,例如SAT,其形式为一组布尔表达式:
(A或B或C)和(D或E或F)和...
在表达式可满足的地方,这些布尔值存在一些设置,使表达式为true。
然后在多项式时间内将NP-完全问题简化为您的问题。
也就是说,给定一些输入X
的SAT
(或任何你使用的是NP完全问题),创建一些输入Y
您的问题,以便X
在SAT当且仅当Y
是你的问题。该函数f : X -> Y
必须在多项式时间内运行。
在上面的示例中,输入Y
将是图形G
和顶点Cover的大小k
。
要获得完整的证明,您必须证明两者:
这X
是SAT
=> Y
在你的问题
并Y
在您的问题=> X
中SAT
。
marcog的答案与其他几个可以解决的NP完全问题有关。
脚注:在第2步(证明它是NP-hard)中,将另一个NP-hard(不一定是NP-complete)问题简化为当前问题,因为NP-complete问题是NP-hard问题(即也在NP中)。
您需要将NP完全问题减少到您遇到的问题。如果减少可以在多项式时间内完成,那么您已经证明问题是NP完全的,如果问题已经在NP中,则因为:
它不比NP-完全问题容易,因为它可以在多项式时间内简化为NP-Hard问题。
有关更多信息,请参见http://www.ics.uci.edu/~eppstein/161/960312.html的末尾。
首先,您证明它完全位于NP中。
然后,您会发现另一个已经知道NP已完成的问题,并说明如何将NP Hard问题多项式化为问题。