证明精确4SAT问题为NP完全问题

精确4SAT问题是这样的问题。输入为一组子句,每个子句都是析取式,恰好有4个变量,并且每个变量在每个子句中最多出现一次。

现在要证明精确4SAT问题是NP完全问题。首先4SAT问题显然是NP问题,因为验证一个解是否正确的时间复杂度和SAT问题相同。现在我们要把SAT问题归约到精确4SAT问题。

可以参考SAT问题归约到3SAT问题的思路。对于SAT问题的一个子句A=(a1 or a2 or ...... or an),假设a1到an是不同的变量(若有相同的变量只保留一个即可)。当n>=4时,将这个子句化为B=(a1 or a2 or a3 or 'y1)&(y1 or a4 or a5 or 'y2)&(y2 or a6 or a7 or 'y3)......。转化后的这组子句的最后一个子句可能有两个变量an-1和an(n为奇数的时候),也可能只有一个变量为an(n为偶数的时候)。对于后者,只要再加一个y变量就行了,B为一个精确4SAT问题的子句组。这样,如果B为真,那么a1到an中一定有一个变量为真,此时A也为真。当n<4时,在子句中增加若干哑变量即可。综上,精确4SAT问题的每一组解都使得对应的SAT问题有解,从而有归约SAT->精确4SAT。证明了4SAT问题是NP完全问题。

你可能感兴趣的:(证明精确4SAT问题为NP完全问题)