证明:hitting set是NP完全问题

《算法概论》P266 8.9

首先证明hitting set(我暂且翻译为击中集)是一个NP问题。给定该问题的一个实例,包括一组集合{S1,S2,...,Sn},大小限制b,再给定问题的一个可能解H,我们可以在多项式时间内判断以下命题的真假:1.H中元素的数量不超过b;2.{S1,S2,...Sn}中每一个集合都至少有一个元素出现在H中。H是击中集问题的解当且仅当上面的命题均为真。也就是说,击中集问题能在多项式时间内验证解的正确性,所以它是NP问题。

然后,证明顶点覆盖问题(vertex cover)可以归约到击中集问题。设顶点覆盖问题的输入是 (G,g),其中G=(V,E)是一个图,V是顶点集合,E是边集,g是要求的顶点覆盖的大小。证明如下:

  1. (G,g)可以在多项式时间内转化成击中集问题的输入,方法如下:对G中的每一条边ei构造一个集合Si,Si中的元素为ei连接的两个顶点,击中集的budget为g。
  2. 如果击中集问题有解,即存在H与每个集合相交都不为空集,那么每个集合Si中至少有一个元素在H中。H、Si中的元素均对应G中的顶点,显然每条边ei连接的两个顶点中至少有一个在H中,H是G的顶点覆盖。而且H的大小不超过budget,budget为g,所以G一定有大小为g的顶点覆盖,即顶点覆盖问题有解。
  3. 如果顶点覆盖问题有解,即存在大小为g的顶点集合VC,每条边的两个顶点至少有一个在VC中。因为每条边ei对应一个集合Si,那么每个集合中至少有一个元素在VC中,并且VC的大小不超过budget,所以VC是击中集问题的解。
  4. 如果击中集有解,该解可以在多项式时间内转换成顶点覆盖问题的解。实际上,由于每个集合Si中的元素都为顶点,击中集的解直接就是顶点覆盖问题的解。

至此,我们证明了顶点覆盖问题可以归约到击中集问题。顶点覆盖问题已被证明是NP完全问题,即任一个NP问题都能归约到顶点覆盖问题,根据归约的传递性,任意NP问题可以归约到击中集问题。又因为击中集问题是NP问题,所以击中集问题是NP完全问题。

转载于:https://my.oschina.net/cofama/blog/1093922

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值