我的调度问题。我需要证明问题是NP完整的。可以用什么方法证明NP完成?
答案 0 :(得分:138)
要显示问题是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)和......
表达式可以满足,就是这些布尔值存在一些设置,这使得表达式为真。
然后在多项式时间内将NP完全问题减少到您的问题。
也就是说,给定X
的一些输入SAT
(或者您正在使用的任何NP完整问题),为您的问题创建一些输入Y
,以便{{1}当且仅当X
出现在您的问题中时,才会出现在SAT中。函数Y
必须以多项式时间运行。
在上面的示例中,输入f : X -> Y
将是图Y
和顶点封面G
的大小。
对于完整证明,您必须同时证明:
k
= X
= {你问题中的SAT
和Y
=> Y
中的X
。
marcog的答案与您可以减少问题的其他几个NP完整问题相关联。
脚注:在第2步(证明它是NP-hard )中,将NP-hard(不一定是NP-complete)问题减少到当前问题就可以了,因为NP完全问题是NP难问题的一个子集(也在NP中)。
答案 1 :(得分:23)
您需要将NP-Complete问题减少到您遇到的问题。如果减少可以在多项式时间内完成,那么你已经证明你的问题是NP完全的,如果问题已经在NP中,因为:
它不比NP完全问题容易,因为它可以在多项式时间内减少到它,这使得问题NP-Hard。
有关详情,请参阅http://www.ics.uci.edu/~eppstein/161/960312.html的结尾。
答案 2 :(得分:8)
首先,你表明它完全位于NP中。
然后你发现另一个你已经知道的问题是NP完成,并说明你如何多方式地减少NP Hard问题。
答案 3 :(得分:6)
为了证明问题L是NP完全的,我们需要执行以下步骤:
答案 4 :(得分:5)