算法证明题 8.9 HITTING SET
题目描述
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相关推荐
- JAVA经典算法50题(转)
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/51097928 JAVA经典算法50题 [程序1] 题目:古典问题:有一对兔子, ...
- 算法刷题-数论-试除法求约数、约数个数、约数之和、最大公约数(辗转相除法)
文章目录 acwing869. 试除法求约数 acwing870. 约数个数 acwing871. 约数之和 acwing872. 最大公约数 acwing869. 试除法求约数 acwing869. ...
- 【面试锦囊】14种模式搞定面试算法编程题(1-7)
面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...
- 【面试锦囊】14种模式搞定面试算法编程题(8-14)
面试锦囊之知识整理系列 面试锦囊系列一直有收到大家的反馈,包括后台内推成功的消息.朋友的同事从创业小公司成功跳到huawei等等,非常高兴小破号的这些整理分享能够真正地帮助到大家,以后也会继续.为了更 ...
- 14种模式解决面试算法编程题(PART I)
万万没想到,暑假还没开始,有些公司的秋招提前批已经来了-很慌-数据结构和算法题可以说是秋招笔试面试必考的内容,如果你还不够熟练(just like me),那就要从现在开始疯狂刷题了啊朋友们. 附上我 ...
- 面试题库 之 数据结构与算法 100题
1.把二元查找树转变成排序的双向链表 题目: 输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表. 要求不能创建任何新的结点,只调整指针的指向. 10 / \ 6 14 / \ / \ 4 8 ...
- 程序员的算法趣题Q56: 鬼脚图中的横线(思路2)
目录 1. 问题描述 2. 思路2 2.1 从鬼脚图出发进行变形 2.2 反向变换 2.3 进一步探索 3. 小结 1. 问题描述 问题描述以及关于本问题的第一个思路参见:程序员的算法趣题Q56: 鬼 ...
- 程序员的算法趣题Q56: 鬼脚图中的横线(思路1)
目录 1. 问题描述 2. 解题分析 2.1 贪心策略 3. 代码及测试 4. 后记 1. 问题描述 2. 解题分析 感觉非常没有头绪.先做一些实例计算分析. 2.1 贪心策略 考虑图1的{1234- ...
- 程序员的算法趣题Q56: 鬼脚图中的横线(思路2的Python题解)
目录 1. 问题描述 2. 实现方案 3. 代码实现 4. 后记 1. 问题描述 问题描述以及此前的讨论参见: 程序员的算法趣题Q56: 鬼脚图中的横线(思路1)https://blog.csdn.n ...
最新文章
- Makefile_03:Makefile介绍(作用、例子、原理)
- 有用的mysql语句
- python socket编程:实现redirect函数、cookie和session
- Struts+DAO框架搭建完成!(源码)
- linux 的内核参数优化,Linux服务器内核参数优化
- jmeter 添加虚拟IP
- 启动tomcat控制台日志出现乱码怎么办?
- Win10/Server2016镜像集成离线补丁
- pythonlist反转_Python 列表反转显示的四种方法
- logback教程logback快速入门超实用详细教程收藏这一篇就够了(万字长文)
- MSM8937平台bootloader调试之一
- 浅析new一个对象的过程
- 为什么需要等待2MSL
- 不服不行,太厉害了,终于有人能把TCP/IP 协议讲的明明白白了
- 【OpenCV 例程 300篇】221.加密马赛克图像处理与解密复原
- php mysql 单引号_插入MySQL时转义PHP中的单引号
- android 9 8 对比,米9安卓对比荣耀Flyme 8,这几点不同拉开了差距!
- 解决 raise ReadTimeoutError(self._pool, None, ‘Read timed out.‘)
- java.lang.ClassNotFoundException: sun . jdbc . odbc . JdbcOdbcDriver
- 如何做一份精致的性能测试报告