此处略去吹牛逼的部分。。。。。
顶点覆盖问题
一.不带权值
1.使用贪心算法
每次选择度数最大的点加入S集合,然后去掉所在的边,重复直到图中没有边为止。
这个算法可以,但是不太好。
2.极小XXX
记不清了 唉
二.带权值
1.Weighted vertex cover. Given a graph G with vertex weights, find a vertex cover of minimum weight.
【带权值的顶点覆盖:对于给出的一个顶点带权值的图G,找到一个顶点覆盖,使它们的权值之和最小。】
(这里我们主要解决的是:求图G=(V,E)的顶点覆盖S,要使顶点集合S中所有顶点的权值之和最小。)
左右两个都是图G的顶点集合,显然,左图的权值之和比右图的较小。
2. Pricing Method
【定价法】
Pricing method. Each edge must be covered by some vertex. Edge e = (i, j) pays price pe >=0 to use vertex i and j.
【定价法:(因为顶点覆盖要求每条边至少有一个顶点在集合S里)每条边必须被一些顶点所覆盖,根据顶点i和j,给边e = (i, j) 标上价格Pe。】
Fairness. Edgesincident to vertex i should pay<=wi intotal
【公平性:与顶点i所连接的所有边的价格(权值)之和必须小于顶点的权值。】
(注意:上图还没给边标上权值)
【引理:图G的所有边的价格(权值)之和 小于等于 顶点覆盖S中所有顶点的权值之和(两个简单的缩放)。】
Pricing method. Set prices and find vertex cover simultaneously.
【定价法:(边的)价格设置与找寻顶点覆盖同时进行。】
带权重的顶点覆盖:
输入:图G=(V, E),权重向量w
初始化:把所有的边的价格(权重)都置为0.
循环:
循环条件:当(边e的两个顶点)i和j都是非紧致的时候(紧致的意思就是该顶点所有边的价格之和等于该顶点的权值)
循环体:选择这个边,不断的增加它的价格(权重),直到有一个边达到紧致的状态。(注:如果是第一循环,则边e的价格等于顶点i和j中权值较小的一个)
把紧致的顶点加入到集合S中。
返回S。
(具体过程如下图所示:)
Pricing Method: Analysis
【分析定价法】
Theorem. Pricing method is a 2-approximation.
【定理:定价法是一个二倍近似算法。】
Pf.
【证明】
(证明S是一个顶点集合)
·Algorithm terminates since at least one new node becomes tight after each iteration of while loop
【算法结束条件:在while循环的每次迭代结束之后,至少有一个顶点会是紧致的(除非图没有边)】
·Let S = set of all tight nodes upon termination of algorithm.
S is a vertex cover:
if some edge i-j is uncovered, then neither i nor j is tight. But then while loop would not terminate.
【当算法终止的时候,集合S就是顶点覆盖。】
【因为,while循环的结束条件就是每一条边的两个顶点,至少有一个顶点会是紧致的,所以每一条边至少会有一个顶点在S中,否则循环就不会停止。】
【所以S是一个顶点集合】
(证明S是最优解S*的一个二倍近似解)
(第一个箭头)
【因为所有节点是紧致的,所以它的边价格(权值)之和肯定等于顶点的权值】
(第三个箭头)
【因为所有边肯定会被加两次】
(第四个箭头)
【引理】