问题描述:
给定一组集合{S1,S2,S3,…,Sn}和预算b,求一个集合H,其中H和所有Si相交且H的规模不超过b。求证该问题是NP完全问题
证明:
(1)先证该问题是一个NP问题。
假设给出集合H的所有元素,显然可以在多项式时间内验证该集合H是否满足条件要求(和Si逐一比较是否有交集并检查规模是否超过b),所以该问题是个NP问题
(2)再证该问题是一个NP难问题。
已知图的最小顶点覆盖问题(Vertex Cover)是NP难问题(在算法概论书中已有证明),只要能找到一种把最小顶点覆盖问题规约到碰撞集问题的方法,即可以证明碰撞集问题是NP难问题。
规约方式如下:
假设有一个图G(V,E),则把该图的每一条边对应一个集合Si,边上的两个点即该集合的元素,即每个集合有两个元素,如S1={v1,v2},这样一来,就能构造出|E|个集合。求图G的最小顶点覆盖问题,可以转化成求这|E|个集合的碰撞集,最小顶点覆盖的顶点就是H的元素,最小顶点覆盖数即为b。
所以碰撞集是一个NP问题且是一个NP难问题,即碰撞集为一个NP完全问题