• 题目描述
    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)的。

算法证明题 8.9 HITTING SET相关推荐

  1. JAVA经典算法50题(转)

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1]   题目:古典问题:有一对兔子, ...

  2. 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)

    文章目录 acwing869. 试除法求约数 acwing870. 约数个数 acwing871. 约数之和 acwing872. 最大公约数 acwing869. 试除法求约数 acwing869. ...

  3. 【面试锦囊】14种模式搞定面试算法编程题(1-7)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  4. 【面试锦囊】14种模式搞定面试算法编程题(8-14)

    面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...

  5. 14种模式解决面试算法编程题(PART I)

    万万没想到,暑假还没开始,有些公司的秋招提前批已经来了-很慌-数据结构和算法题可以说是秋招笔试面试必考的内容,如果你还不够熟练(just like me),那就要从现在开始疯狂刷题了啊朋友们. 附上我 ...

  6. 面试题库 之 数据结构与算法 100题

    1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / \ 6 14 / \ / \ 4 8 ...

  7. 程序员的算法趣题Q56: 鬼脚图中的横线(思路2)

    目录 1. 问题描述 2. 思路2 2.1 从鬼脚图出发进行变形 2.2 反向变换 2.3 进一步探索 3. 小结 1. 问题描述 问题描述以及关于本问题的第一个思路参见:程序员的算法趣题Q56: 鬼 ...

  8. 程序员的算法趣题Q56: 鬼脚图中的横线(思路1)

    目录 1. 问题描述 2. 解题分析 2.1 贪心策略 3. 代码及测试 4. 后记 1. 问题描述 2. 解题分析 感觉非常没有头绪.先做一些实例计算分析. 2.1 贪心策略 考虑图1的{1234- ...

  9. 程序员的算法趣题Q56: 鬼脚图中的横线(思路2的Python题解)

    目录 1. 问题描述 2. 实现方案 3. 代码实现 4. 后记 1. 问题描述 问题描述以及此前的讨论参见: 程序员的算法趣题Q56: 鬼脚图中的横线(思路1)https://blog.csdn.n ...

最新文章

  1. Makefile_03:Makefile介绍(作用、例子、原理)
  2. 有用的mysql语句
  3. python socket编程:实现redirect函数、cookie和session
  4. Struts+DAO框架搭建完成!(源码)
  5. linux 的内核参数优化,Linux服务器内核参数优化
  6. jmeter 添加虚拟IP
  7. 启动tomcat控制台日志出现乱码怎么办?
  8. Win10/Server2016镜像集成离线补丁
  9. pythonlist反转_Python 列表反转显示的四种方法
  10. logback教程logback快速入门超实用详细教程收藏这一篇就够了(万字长文)
  11. MSM8937平台bootloader调试之一
  12. 浅析new一个对象的过程
  13. 为什么需要等待2MSL
  14. 不服不行,太厉害了,终于有人能把TCP/IP 协议讲的明明白白了
  15. 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原
  16. php mysql 单引号_插入MySQL时转义PHP中的单引号
  17. android 9 8 对比,米9安卓对比荣耀Flyme 8,这几点不同拉开了差距!
  18. 解决 raise ReadTimeoutError(self._pool, None, ‘Read timed out.‘)
  19. java.lang.ClassNotFoundException: sun . jdbc . odbc . JdbcOdbcDriver
  20. 如何做一份精致的性能测试报告

热门文章

  1. VR与360环物实现详细过程
  2. python一只青蛙一次可以_Python面试题系列之11 变态青蛙跳
  3. Spring系列:2021年Java春招面试经历,内容太过真实
  4. Nano Measurer 1.2.5 for win 纳米颗粒粒度分析
  5. Android moudle库使用aar的方法
  6. 用 python , opencv 打开网络摄像头读取图像
  7. 2019世界移动通信大会--中国5G迎来高光时刻
  8. 【平衡二叉树】超市促销
  9. 2019的百度网盘下载速度太慢老是限速怎么解决?
  10. 2022-2027年中国卫星遥感行业市场深度分析及投资战略规划报告