NP完全性证明

NP-complete的问题就是说这个问题既是NP又是NP-hard。

NP-complete的问题就是难以在多项式时间内解决的问题。

因此,当对于一个问题不会解决时,能证明它是NP完全问题,那么不会做也无可厚非了。

如何证明一个问题的NP完全性呢?——使用规约

首先找到一个已知的NP完全问题,然后证明这个问题能规约到想要被证明NP完全性的问题。那么就可以说它是一个NP完全问题了。

如何规约?

对于A->B(A规约到B),就是证明A的输入能映射为B的输入,B的输出能映射为A的输出。(注意映射方向)

STINGY SAT问题:给出一个字句的集合和一个整数k,每个字句由分离的文字组成(每个文字是布尔变量),找出一个可满足的值分配,其中最多k个变量为true。

要证明这个问题是NP完全问题,首先要找到一个已知的NP完全问题。

SAT就是一个NP完全问题,SAT问题是对布尔表达式中的每个变量赋值,使得整个式子的值为true。

规约:SAT->STINGY SAT

输入映射:每个SAT的输入可以作为一个CNF,就是多个字句间用与连接,而字句里面的文字用或连接,SAT我们是对所有变量赋值。如果我们把变量的个数设为k。

那么,每个SAT的输入都可以映射为一个STINGY SAT的输入了。

输出映射:对于一个STINGY SAT的输出,是找出一个变量赋值分配(不多于k个变量为true),使得式子为真。当k为变量个数时,每一个输出都将映射到SAT的输出(SAT的真值指派不可能会有多于k个变量值为true,因为变量个数都没有那么多)

因此,可以说STINGY SAT是一个NP-complete

你可能感兴趣的:(算法练习)