20211220-Set Cover Problem
Weighted Set Cover (WSC):带权集合覆盖问题
Set Cover Problem
研究这个问题,是因为看到论文中提及了Weighted Set Cover (WSC),并论证该问题是NP-hard的。因此我希望了解什么是Weighted Set Cover。为了说明这个问题,我们首先需要知道集合覆盖(Set Cover)和顶点覆盖(Vertex Cover)的区别。
1. 集合覆盖(Set Cover)和顶点覆盖(Vertex Cover)
1.1 Set Cover
- 定义
- 有包含了m个元素的集合A(注意,集合是无序的,并且包含的元素也是不相同的)。现有n个集合,分别为${B_1,B_2,…,B_n}$,这n个集合的并集恰好等于A集合,即: $A=B_{1} \cup B_{2} \cup B_{3} \cup \ldots \cup B_{n}$。
- 问题:是否存在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\}\}$。
1.2 Vertex Cover
定义
有图G=(V, E),是否存在V的子集V’,使得|V’|<=|V|,并且G中的每条边e,至少有一个顶点在$|V^{‘}|$中?
这个问题有一个NPO(No Optimization Problem)的变种,即:找到满足条件的最小顶点集,也就是使得满足条件下最小值$|V^{‘}|$。
1.3 二者比较
- 这是两类完全不同的问题,set cover属于集合一类问题,应用于计算机科学以及计算理论方面。vertex cover,属于图论一类问题,应用于计算机科学、计算理论、图论、数学等等方面。
2. 集合覆盖(Set Cover)的解决方案
现在我们希望对集合覆盖问题的解决方案进行说明。
2.1 穷举法 exhausitive search
思想:首先遍历一遍单个子集,看看有无覆盖的。没有则再组合两个子集看有无全覆盖的。没有再组合三个子集……
特点:暴力但简单
2.2 贪心算法 greedy search
思想:循环直到不满足条件 输出子集个数。
1
2
3
4
5
6
7
8
9 for si in S:
S-si == u
delete si
break
for ki in S-si:
if S-si-ki == U:
delete ki
break特点:不一定是全局最优的,但是可以满足大部分情况
2.3 数学转化 math formulation
思路:将问题转成一个integer liner problem,然后再松弛成liner problem 进行求解。
3. 参考
- GeeksforGeeks
- Set Cover Problem | Set 1 (Greedy Approximate Algorithm)
- Vertex Cover Problem | Set 1 (Introduction and Approximate Algorithm)
- Vertex Cover Problem | Set 2 (Dynamic Programming Solution for Tree)