算法证明题 8.9 HITTING SET

来源:互联网 发布:如何计算矩阵一致性 编辑:程序博客网 时间:2024/06/08 11:56
  • 题目描述
    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,需要找出一个集合H,其元素个数不大于阈值b。如果存在,还要求对于所有i,H和Si的交集非空。证明,这个问题为NP完全问题。

  • 初步分析
    如何才会有集合H存在呢?若我们能找到满足条件的最小集合H’,且H’的元素个数小于等于阈值b,那么就一定存在H。反之,若我们找到的满足条件的最小集合H’的元素个数大于阈值b,那么就不存在H。

  • 证明总述
    要证一个问题是NP完全问题,需要证明该问题是NP的,并且该问题是NP难(NP-hard)的。

  • 证明该问题是NP的
    假设已给出集合H,我们需要来判断是否是HITTING SET,也就是看下述的两个条件是否同时满足。

    1、遍历H,看H的元素个数是否小于阈值b
    2、遍历S集合组,看是否都满足和H取交集为非空,也即看H中是否恰好有该S集合中的至少一个元素。

    假设S集合组中元素个数最大为m,那么我们可以在O(mn)的时间复杂度下得出结果,也即在多项式的时间内得到结果。

  • 证明该问题是NP-hard的

    已知Vertex Cover问题是NP完全问题。
    || 具体描述:
    给出一个无向图G,以及一个值b。 要求选择一个顶点的集合S,S包含的元素个数小于b, 且SS中的顶点能够覆盖图G的所有边。换句话说,要求G中的所有边连接的两个顶点至少有一个在集合S中。
    || 证明出处查证:《算法概论》

    我们可以把HITTING SET问题归约到Vertex Cover问题上。Vertex Cover中的集合S的顶点相当于HITTING SET里的集合H的元素,Vertex Cover中的集合无向图G的边相当于HITTING SET里的集合组S的最小交集。

    而得到HITTING SET里的集合组S的最小交集需要遍历所有的元素O(mn),再针对每个元素构造无向边需要O(n),所以总的时间复杂度为O(mnn),是多项式的时间。

    也就是说,假设有一个算法能在多项式时间内找到Vertex Cover问题的解,那么我们就能在多项式时间内找到碰撞集的解。

    然而Vertex Cover问题是NP-hard的,所以HITTING SET也是NP-hard的。

  • 证明总结
    由上述证明可知,HITTING SET是NP的,并且该问题是NP-hard的,所以HITTING SET是NP完全(NP-complete)的。

原创粉丝点击