如何certificate一个问题是NP完成的?
我有调度问题。 我需要certificate这个问题是NP完整的。 什么可以是certificateNP完整的方法?
要显示一个问题是NP完整的,你需要:
显示在NP中
换句话说,给定一些信息C
,你可以创build一个多项式时间algorithmV
,它将为每个可能的inputX
validationX
是否在你的域中。
例
certificate顶点覆盖问题 (也就是说,对于某个图G
, 它是否有一个顶点覆盖集合,其大小为k
,使得G
中的每个边在覆盖集合中至less有一个顶点 ?)在NP中:
-
我们的input
X
是一些图G
和一些数k
(这是来自问题的定义) -
以我们的信息
C
为“大小为k
图G
中任何可能的顶点子集” -
那么我们可以写出一个algorithm
V
,给定G
,k
和C
,在多项式时间内返回这个顶点集是否是G
一个顶点覆盖。
那么对于每一个图G
,如果存在一些顶点覆盖的“大小为k
G
中可能的顶点子集”,则G
在NP
。
请注意 ,我们不需要在多项式时间中findC
如果可以的话,问题将出现在P.
请注意 ,对于某些C
,algorithmV
应该适用于每个 G
对于每个input应该存在的信息可以帮助我们validationinput是否在问题域中。 也就是说,不存在信息不存在的input。
certificate这是NP难
这涉及到一个已知的NP完全问题,如SAT ,布尔expression式的集合forms如下:
(A或B或C)和(D或E或F)和…
expression式是可以满足的 ,也就是说这些布尔值存在一些设置,这就使得expression式成立 。
然后在多项式时间内减lessNP-complete问题到你的问题 。
也就是说,给SAT
一些inputX
(或者你正在使用的任何NP完全问题),为你的问题创build一些inputY
,这样当且仅当Y
在你的问题中时, X
在SAT中。 函数f : X -> Y
必须以多项式时间运行。
在上面的例子中,inputY
将是图G
和顶点覆盖k
的大小。
为了充分certificate ,你必须certificate两个:
-
在你的问题中
X
是SAT
=>Y
-
Y
在你的问题=>X
在SAT
。
marcog的答案与几个其他NP完全问题可以减less到你的问题的链接。
注释:在步骤2( certificate它是NP难 ),减less另一个NP难(不一定是NP完全)的问题,目前的问题将做,因为NP完全问题是NP难题的一个子集也在NP)。
你需要减lessNP-Complete问题到你有的问题。 如果减less可以在多项式时间内完成,那么你已经certificate你的问题是NP完全的,如果问题已经在NP中,因为:
这并不比NP完全问题容易,因为它可以在多项式时间中减less到NP-Hard问题。
首先,你显示它完全位于NP中。
然后,你会发现另一个你已经知道的问题是NP完整,并显示你如何多项式地减lessNP难题到你的问题。
- 熟悉NP Complete问题的一个子集
- certificateNP硬度:将NP完全问题的任意实例减less到问题的实例。 这是一个馅饼的最大的一块,熟悉NP完成问题的地方。 根据您select的NP完整性问题,减less将会或多或less。
- certificate你的问题在NP中:devise一个可以在多项式时间validation一个实例是否是一个解的algorithm。
为了certificate问题L是NP完全的,我们需要执行以下步骤:
- certificate你的问题L属于NP(即给出一个解决scheme,你可以在多项式时间validation)
- select一个已知的NP完全问题L'
- 描述将L'转换为L的algorithmf
- certificate你的algorithm是正确的(forms上:x∈L'当且仅当f(x)∈L)
- certificatealgorithm在多项式时间运行