集合覆盖 顶点覆盖: set cover和vertex cover

这里将讲解一下npc问题中set cover和vertex cover分别是什么。

set cover:

问题定义:

  实例:现在有一个集合A,其中包含了m个元素(注意,集合是无序的,并且包含的元素也是不相同的),现在n个集合,分别为B1、B2、...、Bn。并且这n个集合的并集恰好等于A集合,即:B1UB2UB3U...UBn=A。

  问题:是否存在B集合的最小子集,且他们的并集也等于A集合?

  例子:集合A={1,2,3,4,5},集合B={{1,2,3},{2,4},{3,4},{4,5}}。可以看出,B集合的并集恰好等于A集合,那么问题的解是:SETCOVER={{1,2,3},{4,5}}。

vertex cover:

问题定义:

  实例:图G=(V,E)。

  问题:是否存在V的子集V',使得|V'|<=|V|,并且G中的每条边e,至少有一个顶点在V'中?

这个问题有一个npo(np optimization problem)的变种,即:找到满足条件的最小顶点集,也就是使得满足条件下最小|V'|值。

首先可以看出,这是两类完全不同的问题,set cover属于集合一类问题,应用于计算机科学以及计算理论方面。vertex cover,属于图论一类问题,应用于计算机科学、计算理论、图论、数学等等方面。

原文地址:https://www.cnblogs.com/sddai/p/6036104.html