NPC(NP完全问题)证明

  • 简介
    • NPC
    • PNPNPNP-hard
  • 问题举例
  • 证明
    • 1证明该问题是一个NP问题
    • 2再证明该问题是一个NP-hard问题
    • 3规约
  • 4结论

简介

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问题一样难”。

NPC(NP完全问题)证明_第1张图片

问题举例

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完全问题

你可能感兴趣的:(算法概论)