我的日程安排有问题。我需要证明这个问题是NP完全问题。有什么方法可以证明它是NP完备的?
要证明问题是 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-Hard
可满足其中表达式是
,即这些布尔值存在一些设置,这使得表达式true。 然后
将 NP 完全问题简化为多项式时间内的问题。 也就是说,给定 SAT 的一些输入
X
(或者您正在使用的任何 NP 完全问题),为您的问题创建一些输入
Y
,这样 X
就在 SAT 中当且仅当 Y
是在你的问题中。函数 f : X -> Y
必须在 多项式时间内运行。 在上面的示例中,输入
Y
将是图形
G
和顶点覆盖的大小 k
。要获得完整的证明,您必须同时证明:
X
位于
SAT
=> Y
在你的问题中
您问题中的 Y
=>
X
中的 SAT
。
答案与其他几个 NP 完全问题有联系,您可以将其简化为您的问题。 脚注:在步骤 2 中(
证明它是 NP-hard),将另一个 NP-hard(不一定是 NP-complete)问题简化为当前问题即可,因为 NP-complete 问题是 NP-hard 问题的子集(也在 NP 中)。
证明你的问题L属于NP(即给定一个解决方案,你可以在多项式时间内验证它)
然后你会发现另一个你已经知道是 NP 完全问题的问题,并展示如何通过多项式将 NP 困难问题简化为你的问题。