hitting set problem:
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 != 0 for all i。
给定一些集合{S1, S2, ..., Sn},和一个预算b,我们希望找到一个不超过b个元素的集合H,其与每个Si的交集都不为空。
首先证明问题是NP的:
若给定一个H,我们判断他是否符合要求,只需要判断其中元素个数是否小于b,以及集合中每个Si与其交集是否为空即可。判断可以在多项式时间内完成。
接下来证明问题是NP难的:
已知Vertex Cover问题是NP难的,问题内容为:给定一个N个点,M条边的无向图G(点的编号从1至N),问是否存在一个不超过K个点的集合S,使得G中的每条边都至少有一个点在集合S中。
我们尝试将Vertex Cover问题规约到Hitting Set问题。若我们要求图G的顶点覆盖,我们建立一个Hitting Set实例,令{S1, S2, ..., Sn}是G的边的集合,每条边包含两个顶点。所有Si集合的交集就是与边相连的顶点的集合。若我们能找到一个不超过k个元素的集合H,其与每个Si的交集都不为空,那么这个H就是所求的顶点覆盖S。
由于NP难的Vertex Cover问题能够规约到Hitting Set问题,那么Hitting Set问题也是NP难的。
综上,Hitting Set问题是NP的且是NP难的,故该问题是NP完全问题。