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问题多项式化为问题。