NP完全问题习题证明

来源:互联网 发布:.net和java的语法区别 编辑:程序博客网 时间:2024/05/17 04:03

NP-完全问题

一、概述

1.1 P问题

如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题,P(olynominal) 问题。

1.2 NP问题

能在多项式时间内验证给出的一个解的问题属于NP问题,Nondeterministic Polynominal,非确定性多项式问题。
NP 问题不是非 P 类问题,NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。之所以要定义NP问题,是因为通常只有 NP 问题才可能找到多项式时间复杂度的算法,因为我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。
NP 问题,实际上是在探讨 NP 问题与 P 问题的关系。
很显然,所有的 P 问题都是 NP 问题,也就是说,能多项式地解决一个问题,必然能多项式时间内验证一个问题的解(既然正解都出来了,验证任意给定的解也只需要比较一下就可以了)。
是否所有的 NP 问题都是 P 问题?我们可以用集合的观点来说明:如果把所有 P 类问题归为一个集合 P 中,把所有 NP 问题划进另一个集合 NP 中,那么,显然有P 属于 NP。现在,所有对 NP 问题的研究都集中在一个问题上,即究竟是否有 P=NP?在研究 NP 问题的过程中找出了一类非常特殊的 NP 问题叫做 NP-完全问题,也即所谓的 NPC 问题。正是 NPC 问题的存在,使人们相信 P≠NP。

1.3 NCP问题(NP完全问题)

NPC问题的定义非常简单,同时满足下面两个条件的问题就是 NPC 问题:① 首先,它得是一个 NP 问题;②然后,所有的 NP 问题都可以在多项式时间内归约到它。即如果所有 NP 问题都能在多项式时间内归约到一个 NP 问题,则称该 NP 问题为 NPC问题,NP Complete,NP 完全问题。

二、习题证明

8.3 STINGY SAT is the following problem: given a set of clauses (each a disjunction of literals) and an integer k, find a satisfying assignment in which at most k variables are true, if such an assignment exists. Prove that STINGY SAT is NP-complete.
证明:
证明一个问题是NPC问题先证明它至少是一个 NP 问题;再证明一个已知的 NPC 问题能在多项式时间内归约到它
首先,易知 STINGY SAT 的解是可在多项式时间内验证的,因此属于 NP。
另外,很容易可以将 SAT 归约到 STINGY SAT(将 k 设为所有变量的总个数即可),于是可知 STINGY SAT 为 NP 完全问题。

8.8 In the EXACT 4SAT problem, the input is a set of clauses, each of which is a disjunction of exactly four literals, and such that each variable occurs at most once in each clause. The goal is to find a satisfying assignment, if one exists. Prove that EXACT 4SAT is NP-complete.
证明:
证明一个问题是NPC问题先证明它至少是一个 NP 问题;再证明一个已知的 NPC 问题能在多项式时间内归约到它
首先EXACT 4SAT 属于 NP。
现在通过将 3SAT 归约到 EXACT 4SAT 来证明后者的 NP 完全性。
对于任意一个 3SAT 实例,如果其中某个子句中包含了同一个文字多次,那么可以缩减为一次,如果同时包含了某个变量的肯定及否定,那么可以将这个变量去掉。然后,
可以再在每个子句中可以添加一些哑变量(即没用的辅助变量),这样就可以将每个子句所包含的文字数目扩充到四个。
至此,即已将该3SAT 实例转化成了一个 EXACT 4SAT问题
原创粉丝点击