P,NP,NPH,NPC问题

算法系列博客之NPC问题

我们已经学习了很多高效的算法,它们大多都是多项式时间的,有的还能达到线性时间,甚至是对数时间。但是到目前为止,仍然有一批问题没有被证明有多项式时间内的算法;所谓没有被证明,即是说明理论上并不能说明它有或者没有多项式时间算法,但是至今为止都没有找到。
下面就要针对这类问题进行定义研究。

P问题,polynomial指能够在多项式时间内进行求解的问题;
NP问题,nondeterministic polynomial,非确定性多项式,即任意一个可能解的正确性判定能够在多项式时间之内完成;
NP难问题,即如果一个NP难问题有多项式时间的求解方案,那么任意NP问题都能够有多项式时间的求解方案;
NP完全问题,即既是NP难问题,又是NP问题的一类问题。

这里写图片描述
经过以上的定义,由于NP难问题的多项式时间解决方案能使得所有NP问题得到多项式时间的解决方案,且NP完全问题是NP难得一个更小的子集,所以我们可以抛开理论,近似认为如果一个问题属于NP完全问题,那么这个问题目前为止可以被认定为不具备多项式时间解决方案的问题

证明一个问题是NPC问题,第一部分说明其是一个NP问题很简单,但证明其是NP难问题是非常难的,需要说明一旦它有多项式时间解决方案,所有NP问题就都有,这几乎是一个不可能的任务。但是自从SAT问题被证明是NP难之后,我们探索其他的NP难问题就变得简单起来。
即, 只要证明已知的NP难问题能够在多项式时间之内转化到另一个问题上,那么这个问题也就是一个NP难问题。因为一旦这个问题是有多项式时间解决方案的,那么前一个NP难问题就能够在多项式时间转换到这个问题并在多项式时间求解之后再转换为原问题的解,整个过程仍然是在多项式时间之内完成;那么也就是说前一个NP问题有了多项式时间的解决方案,即根据定义所有NP问题也都有了多项式时间的解决方案

那么证明一个问题是否是NP难问题就相对容易了,只需要将一个已知NP难问题多项式时间规约到此问题上即可。证明NPC问题,只需要在此基础上再说明其是NP问题即可。

8.9 In the HITTING SET problem, we are given a family of sets {S1, S2, … , Sn} and a budget b, and we wish to find a set H of size <= b which intersects every Si, if such an H exists. In other words, we want H ∩ Si ≠ Ø. SHOW that HITTING SET is NP-complete.
很显然,这个问题是一个NP问题,下面证明其是NP难问题。
我们已经知道顶点覆盖问题是为一个NP难问题,可以构造这样一个规约将其规约到这个问题之上。
按照以下方法构造这个问题的模型,集合中可能的所有元素一一对应于图的顶点,两个顶点相连就将这两个顶点任意放进同一个集合,如果某个点不与任何边相连则将这个顶点单独放入一个集合,则此问题得出的集合就对应着顶点覆盖中问题答案中的顶点集合加上那些没有边的顶点。
证明,顶点覆盖问题的答案顶点集合能够覆盖掉所有的边,也即是说顶点集合之外的顶点要么不与任何边相连,这种点我们已经加进了结果;要么是与顶点集合中的某一个点相连,也即是说它们位于HITTING SET问题中的同一个集合,所以顶点集合加上那些没有边的顶点的集合一定与所有集合都有交集。
而整个构造过程的步骤与边和点的个数相同,这即是说能够在多项式时间将顶点覆盖问题规约到HITTING SET问题之上,即HITTING SET问题是NP难问题,也是NP完全问题。

8.20 In an undirected graph G=(V, E), we say D ⊆ V is a dominating set if every v∈V is either in D or adjacent to at least one member of D. In the DOMINATING SET problem, the input is a graph and a budget b, and the aim is to find a dominating set in the graph of size at most b, if one exists. Prove that this problem is NP-complete.
同样,想要检测一个解是否是这个问题的正确解,只需要对每一个顶点进行验证即可,这个时间是多项式时间,所以这个问题是一个NP问题。
下面将顶点覆盖问题归约到DOMINATING SET问题,直接在此图中得出DOMINATING SET问题的答案D,然后再删除掉那些不与任何边相连的顶点,得出的即是顶点覆盖问题的答案。
证明,由于顶点覆盖能够覆盖掉所有的边,因此如果一个顶点不属于顶点覆盖问题的答案集合,那么这个点要么是与顶点覆盖集合中某点想连接,要么没有任何边与之连接。而如果一个点没有任何边与之连接,根据题目定义,它一定是答案D中的元素,因此答案D删除掉那些不与任何边相连的顶点,得出的一定是顶点覆盖集合;相反,顶点覆盖集合加上那么不与任何边相连的顶点一定是答案D。
而规约的过程即是删除掉那些不与任何边相连的顶点,这个过程显然是多项式时间的,所以DOMINATING SET问题是一个NP难问题。综合所有,它是一个NP完全问题。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章