简介
NPC
Non-deterministic Polynomial complete problem,NP完全问题。
P、NP、NP,NP-hard
P 问题:一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题,比如解决这个问题的复杂度为O(1),O(log(n)),O(n^a)的问题
NP 问题:还未被证明是否存在多项式算法能够解决的问题
NPC(NP完全问题):如果任何一个NP问题都能通过一个多项式时间算法转换为某个NP问题,那么这个NP问题就称为NPC问题。
NP-hard问题:问题未必可以在多项式的时间内验证一个解的正确性(即不一定是NP问题),因此即使NP完全问题有多项式时间内的解,NP困难问题依然可能没有多项式时间内的解。因此NP困难问题“至少与NPC问题一样难”。
问题举例
2009年机械工业出版社《算法概论》(《algorithms》)课后习题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 ≠ ∅ for all i.
Show that HITTING SET is NP-complete.
下面是译文
在碰撞集(HITTING SET)问题中,给出了一组集合{S1,S2,...。。 ,Sn}和预算b,我们希望找到一个所有的Si相交且规模≤b的集合H,当然,前提是这样的H存在。换句话说,我们想要所有i满足 H∩Si≠∅。
证明碰撞集问题(HITTING SET)为NP完全问题。
证明
(1)证明该问题是一个NP问题。
假设给出集合H的所有元素,显然可以在多项式时间内验证该集合H是否满足条件要求(和Si逐一比较是否有交集并检查规模是否超过b),所以该问题是个NP问题
(2)再证明该问题是一个NP-hard问题。
已知图的最小顶点覆盖问题(Vertex Cover)是NP-hard问题(在《算法概论》
书中已有证明),只要能找到一种把最小顶点覆盖问题规约到碰撞集问题的方法,即可以证明碰撞集问题是NP-hard问题。
(3)规约
假设有一个图G(V,E),则把该图的每一条边对应一个集合Si,边上的两个点即该集合的元素,即每个集合有两个元素,如S1={v1,v2},这样一来,就能构造出 |E| 个集合。求图G的最小顶点覆盖问题,可以转化成求这 |E| 个集合的碰撞集,最小顶点覆盖的顶点就是H的元素,最小顶点覆盖数即为b。
(4)结论
所以碰撞集是一个NP问题且是一个NP-hard问题,即碰撞集为一个NP完全问题