集合覆盖问题(Set Cover Problem)和点覆盖问题及归约

集合覆盖问题

集合覆盖问题(Set Covering Problem,简称SCP)是运筹学研究中典型的组合优化问题之一,工业领域里的许多实际问题都可建模为集合覆盖问题,如资源选择问题、设施选址问题(移动基站的选址、物流中心的选址)等。

简单的应用

集合覆盖问题(Set Cover Problem)和点覆盖问题及归约_第1张图片
软件用数字代替.png

-m种软件
-我们希望我们的系统能有n个软件,集合为U(比如手机里面有视频软件,学习软件等等)
-第i种软件包含的软件为Si,且Si包含在U中(比如Si可以为视频软件的集合)
-用最少的软件分类标签去包含这所有的软件。(比如说腾讯课堂又可以归为视频软件,又可以归为学习软件)

集合覆盖问题是一个什么问题

首先想到,比如在上面的例子中,如果6在S2中,那么在S6中我们就可以不用要,不过也可以要,这就有点像点覆盖问题中的如果一个边的一个端点选到集合中去之后,另外一个端点可以不要,所以我们不难想到把点覆盖问题归约到集合覆盖问题,假设点覆盖问题是一个NP难的问题,那么集合覆盖问题也是一个NP难的问题。(*因为点覆盖能归约到集合覆盖,说明,集合覆盖比点覆盖还要难)

点覆盖到集合覆盖的归约

那么问题是怎么归约?刚刚分析了,集合覆盖似乎和点覆盖有点“像”,集合S2中有,则S6中的6可以不用有,那么我们把每个子集合当成一个顶点,如果两个子集合中都同时存在某个元素,那么就连一条边(并且是带编号的边,因为需要表明清楚共同拥有的到底是子集合中的哪个元素。在别的应用场景下可以当成权重

集合覆盖问题(Set Cover Problem)和点覆盖问题及归约_第2张图片
点覆盖到集合覆盖的归约.png

由这个特例可以发现,当做了点覆盖到集合覆盖的归约后,求解集合覆盖,能直接求出点覆盖(这句话有待考证)。
更准确的说是:

  • X问题归约到Y问题
  • G是X问题中任意的一个特例
  • H是Y问题中的任意一个特例
  • G问题的求解转换成Y问题的求解。
    另说:
  • 给定问题A的实例 α ,利用多项式时间归约算法,将它转化为问题B的一个实例 β ;
  • 在实例 β 上,运行B的多项式时间判定算法;
  • 将 β 的解作为 α 的解。

参考:https://www.jianshu.com/p/247999af00ed

你可能感兴趣的:(集合覆盖问题(Set Cover Problem)和点覆盖问题及归约)