顶点覆盖问题的NP完全证明和近似算法求解
第九章 NP完全性理论与近似计算
7、TM举例
• DTM程序的一个简单例子TM:TM的转移函数δ 用 表格形式描述。图中说明TM在输入x=10100上的 计算,给出了每一步前后的状态,读写头位置 以及带的非空白部分的内容
q q0 q1 q2 q3 0 (q 0 ,0,R) (q 2 ,b,L) (q f ,b,L) (q 0 ,b,S) 1 (q 0 ,1,R) (q 3 ,b,L) (q 0 ,b,S) (q 0 ,b,S) 转移函数δ b (q 1 ,b,L) (q 0 ,b,S) (q 0 ,b,S) (q 0 ,b,S)
1. 多带图灵机
结构:有限状态控制器、k条读/写头(双向移 动)、k条读写带
2. 单带图灵机
有
读/写头 (双向移动) b a b a b b
穷
q0 q1 q 2 q3
控制器
带
3、图灵机结构特点
(1)读/写头既能读,又能写。
(2)读写头能左/右移动,但不会移出带 的左端。 (3)“带”无限长,上置所读/写的字符 和特殊符号。 (4)有穷控制器内置各种状态。
•注:具有指数时间但计算得很好的例子很少。
探讨(续)
• 一些问题尽管有指数计算时间,但算法 很成功。研究人员没有停止继续寻找该 类问题的多项式时间算法的努力。 • 疑问:出现上述现象的问题其关键性的 性质是什么?
对这些性质的仔细研究可能给出更好的方 法,但至今在解释这种成功方面几乎毫无 进展,也没有一种方法能够事先预言给定 的指数时间算法在实际中能否快速运算。
4、有限状态控制器的作用
• 根据有限状态控制器的当前状态及每个读写头读到的带 符号,图灵机的一个计算步可实现下面3个操作之一或全 部。
(1)改变有限状态控制器中的状态。
(完整word版)顶点覆盖问题的NP完全证明和近似算法求解
顶点覆盖问题的NP 完全证明和顶点覆盖优化问题的近似算法顶点覆盖(VERTEX COVER )给定一个无向图),(E V G =和一个正整数k ,若存在V V ⊆',k V =',使得对任意的E v u ∈),(,都有'V u ∈或'V v ∈,则称'V 为图G 的一个大小为k 的顶点覆盖。
顶点覆盖问题的描述判定问题:VERTEX COVER输 入:无向图),(E V G =,正整数k问 题:G 中是否存在一个大小为k 的顶点覆盖,这是一个NP 完全问题 顶点覆盖的NP 完全性证明NP 性的证明:对给定的无向图),(E V G =,若顶点V V ⊆'是图G 的一个大小为k 顶点的覆盖,则可以构造一个确定性的算法,以多项式的时间验证k V =',及对所有的E v u ∈),(,是否有'V u ∈或'V v ∈。
因此顶点覆盖问题是一个NP 问题。
完全性的证明:我们已知团集(CLIQUE )问题是一个NP 完全问题,若团集问题归约于顶点覆盖问题,即VERTEX CLIQUE poly αCOVER ,则顶点覆盖问题就是一个NP 完全问题。
我们可以利用无向图的补图来说明这个问题。
若向图),(E V G =,则G 的补图--=),(E V G ,其中}),(|),{(E v u v u E ∉=-。
例如,图1(b)是图1(a)的补图。
在图1(a)中有一个大小为3的团集},,{y v u ,在图1(b)中,则有一个大小为2的顶点覆盖},{w v 。
显然可以在多项式时间里构造图G 的补图-G 。
因此,只要证明图),(E V G =有一个大小为k V -||的团集,当且仅当它的补图-G 有一个大小为k 的顶点覆盖。
(a) (b)图1无向图及补图必要性:如果G 中有一个大小为k V -||的团集,则它具有一个大小为k V -||个顶点的完全子图,令这k V -||个顶点集合为'V 。
算法设计与分析_08一些NP完全问题
2016/2/10
算法设计与分析演示稿 纪玉波制 作(C)
33
33.纵横字谜结构:字的有限集WΣ *及0和1的 n×n矩阵A。 问:由W中的字和对应于A中的0的那些空格,能 否建立起一个n×n纵横字谜,即如果E是使得 Aij=0的有序对(i,j)的集合,那末是否有一个 赋值f:E→Σ ,使得赋予E中元素所组成的任一 最大的横的或纵的连续序列的字母都能按序排 成W中的字? 注释:即使A中所有元素全部为0,也仍是NP完全 的。
2016/2/10
算法设计与分析演示稿 纪玉波制 作(C)
4
4.划分成完美匹配:图G=(V,E),正整数K≤|V|。 问:G的顶点是否能划分成k≤K个不相交的集合 V1,V2,…,Vk, 使得对于1≤i≤k,由Vi诱导的子图是一个完美匹 配(全部由1度的顶点组成)? 注释:对于K=2,仍然是NP完全的。
注释:问题的变形一一如果要求由V’所导出的子图是连通 的——甚至对于顶点度数不超过4的平面图,也是NP完全的。 相关的边覆盖问题一一即求最小的集使得所有v∈V’都至 少属于一个e∈E’——能通过图的匹配在多项式时间内得到 解决。
2016/2/10 算法设计与分析演示稿 纪玉波制 作(C) 2
2.图的可着K色性:图G=(V,E),正整数 K≤|V|。 问:G是否可着K色,即是否存在函数 f:V→{1,2,…,K}, 使得只要{u,v}∈E,就有f(u)≠f(v)? 注释:对于K=2,是多项式时间内可解的,但 对于所有固定的K≥3,和对于K=3而且不含4度 以上顶点的平面图,仍是NP完全的。
2016/2/10
算法设计与分析演示稿 纪玉波制 作(C)
16
2016/2/10
算法设计与分析演示稿 纪玉波制 作(C)
顶点覆盖问题的NP完全证明和近似算法求解-Read
顶点覆盖问题的NP 完全证明和顶点覆盖优化问题的近似算法顶点覆盖(VERTEX COVER )给定一个无向图),(E V G =和一个正整数k ,若存在V V ⊆',k V =',使得对任意的E v u ∈),(,都有'V u ∈或'V v ∈,则称'V 为图G 的一个大小为k 的顶点覆盖。
顶点覆盖问题的描述判定问题:VERTEX COVER输 入:无向图),(E V G =,正整数k问 题:G 中是否存在一个大小为k 的顶点覆盖,这是一个NP 完全问题 顶点覆盖的NP 完全性证明NP 性的证明:对给定的无向图),(E V G =,若顶点V V ⊆'是图G 的一个大小为k 顶点的覆盖,则可以构造一个确定性的算法,以多项式的时间验证k V =',及对所有的E v u ∈),(,是否有'V u ∈或'V v ∈。
因此顶点覆盖问题是一个NP 问题。
完全性的证明:我们已知团集(CLIQUE )问题是一个NP 完全问题,若团集问题归约于顶点覆盖问题,即VERTEX CLIQUE poly αCOVER ,则顶点覆盖问题就是一个NP 完全问题。
我们可以利用无向图的补图来说明这个问题。
若向图),(E V G =,则G 的补图--=),(E V G ,其中}),(|),{(E v u v u E ∉=-。
例如,图1(b)是图1(a)的补图。
在图1(a)中有一个大小为3的团集},,{y v u ,在图1(b)中,则有一个大小为2的顶点覆盖},{w v 。
显然可以在多项式时间里构造图G 的补图-G 。
因此,只要证明图),(E V G =有一个大小为k V -||的团集,当且仅当它的补图-G 有一个大小为k 的顶点覆盖。
(a) (b)图1无向图及补图必要性:如果G 中有一个大小为k V -||的团集,则它具有一个大小为k V -||个顶点的完全子图,令这k V -||个顶点集合为'V 。
NP完全问题证明
均分∈ 8.5.5. 均分∈NPC 子集A :1≤ 子集A’ = {ai:1≤i≤k} 满足
a∈ A'
∑ s( a ) = B
当且仅当 M’ = {mi: ai∈A’}是M的匹配 } A的最后两个元素b1,b2 的最后两个元素b
s ( b1 ) = 2 ∑ s ( a i ) − B
i =1
k
s ( b2 ) = ∑ s ( a i ) + B
均分∈ 8.5.5. 均分∈NPC
构造A 构造A,|A| = k +2 对应于每个m 对应于每个mi = (wf(i),xg(i),yh(i)) 有ai. 为二进制数,分成3q 3q段 每段有p log(k+1) s(ai)为二进制数,分成3q段,每段有p = log(k+1)位,共计 3pq位 每段对应一个W 3pq位,每段对应一个W∪X∪Y中的元素. Wf(i),xg(i),yh(i) 所代 中的元素. 表的段的最右位为1 其它为0. 表的段的最右位为1,其它为0.
均分∈ 8.5.5. 均分∈NPC
实例:有穷集A s(a)∈ 实例:有穷集A,∀a∈A, s(a)∈Z+. 是否存在A ⊆ 问:是否存在A’⊆A,使得
a∈ A'
∑ s( a ) =
a∈ A− A均分是NP类问题。下面将3DM变换到均分问题 显然均分是NP类问题。下面将3DM NP类问题 3DM变换到均分问题 3DM的实例 的实例, 设W,X,Y,M ⊆ W×X×Y 是3DM的实例, 其中|W| q, 其中|W| = |X| = |Y| = q, W = {w1,w2,… ,wq} X = {x1,x2,… ,xq} Y = {y1,y2,… ,yq} M = {m1,m2,… ,mk}
近似算法
近似算法1 近似算法所有已知的解决NP-难问题算法都有指数型运行时间。
但是,如果我们要找一个“好”解而非最优解,有时候多项式算法是存在的。
给定一个最小化问题和一个近似算法,我们按照如下方法评价算法:首先给出最优解的一个下界,然后把算法的运行结果与这个下界进行比较。
对于最大化问题,先给出一个上界然后把算法的运行结果与这个上界比较。
1.1最小顶点覆盖先来回忆一下顶点覆盖的定义,它是一个与图中所有边相关联的顶点集。
最小顶点覆盖问题是要找一个顶点数最少的顶点覆盖。
最小顶点覆盖的下界可以由最大匹配给出。
因为匹配中任两边不相邻,所以匹配中的每条边至少有一个顶点在顶点覆盖中。
而且,注意到在最大匹配中所有匹配顶点的集合就是一个顶点覆盖。
这是因为,任何一条两端点均未被匹配的边可以添加到匹配中,与匹配的最大性相矛盾。
显然,这个算法包含的顶点数是我们的下界,最大匹配的边数,的两倍。
因此,算法得到的值不会超过最优值的两倍。
我们感兴趣的两个问题是:相对于最优解,我们的下界到底有多“好”,而最后的解又有多“好”?首先来说明下界可能是最优值的两倍。
例如n条边的完全图,最大匹配有条边,所以我们的下界是。
但是,需要n-1个顶点来覆盖这个图。
因为任取一个n-2个顶点的集合,此图是完全图,在被删掉的两个顶点之间肯定存在一条边与选中的这n-2个顶点不关联。
N足够大时,我们有。
因此,比较算法与这个界,不可能有比最优值的2倍更好的下界了。
接下来比较算法的最后结果与最优解。
算法输出被最大匹配匹配的所有顶点。
考虑每部分有n个顶点的完全二分图,这个图存在完美匹配,因此算法输出每一个顶点,即2n个顶点。
但是最优顶点覆盖仅包含来自一边的n个顶点。
可以看出,算法的下界是紧的。
1.2 旅行售货员问题旅行售货员问题如下:给定一个完全图和一个定义在每条边上的距离函数,找一个长度最小的哈密顿圈。
注意,最小支撑树(MST)是最优解的一个下界。
因为如果有一条途径比MST更短,那么在此途径中删掉一条边,就可以得到更小的支撑树。
顶点覆盖问题的求解算法研究
顶点覆盖问题的求解算法研究第一章:绪论顶点覆盖问题是图论中的一个经典问题,其求解在实际应用中具有重要意义。
本文将针对顶点覆盖问题的求解算法进行研究和探讨。
第二章:算法描述2.1 基于贪心算法的顶点覆盖求解算法由于顶点覆盖问题是NP完全问题,因此想要用多项式时间算法解决该问题几乎是不可能的。
在实际应用中,最常用的求解方法是基于贪心算法的顶点覆盖算法。
该算法的基本思路是:在一个无向图中选出一个最小的顶点集合,使得这个集合中的每一条边都至少与一个顶点相邻。
也就是说,这个顶点集合能够覆盖掉图中的所有边。
具体步骤如下:1. 初始化一个空集合,表示最终求解的顶点集合。
2. 遍历图中的每一条边,对于每条边,都选择一个未被选择的顶点将其标记为“已选择”。
3. 如果已选顶点的数量达到了该边的数量,就将这些顶点放到集合中,并将这些顶点所对应的边都删除。
4. 重复步骤2和3,直到所有的边都被删除。
这个算法实现简单,时间复杂度为O(ElogE),其中E为图中边的数量。
2.2 基于动态规划的顶点覆盖求解算法除了贪心算法,还可以采用基于动态规划的算法来解决顶点覆盖问题。
这个算法的基本思路是:对于一个有n个顶点的无向图,定义一个长度为2^n的二进制串系列,其中每一位表示一个顶点是否在顶点覆盖集合中。
具体步骤如下:1. 初始化动态规划表,使得所有的格子的值均为无穷大。
2. 对于每一个边(u,v),都有两种情况:u与v都不在顶点覆盖集合中,或者其中有一个在集合中。
然后根据所得到的结果来更新对应的动态规划表格子。
3. 最终,值为最小的一组二进制字符串所代表的集合就是顶点覆盖集合。
基于动态规划的算法实现复杂,时间复杂度为O(2^n * n^2)。
第三章:算法优化3.1 基于图匹配的顶点覆盖算法基于贪心算法和动态规划算法虽然能够求解顶点覆盖问题,但是在处理大规模的图时,算法的效率较低。
因此,研究如何对算法进行优化变得特别重要。
基于图匹配的顶点覆盖算法就是一种较好的优化方式。
算法设计与分析课件--NP完全性理论-NP完全问题及近似算法
1
第八章 NP完全性理论
目录
8.1 异解问题和难解问题
8.2 P类问题和NP类问题
8.3
NP完全问题
8.4 NP完全问题的近似算法
2
8.3 NP完全问题
问题变换:
➢ NP类问题在最坏情况下的时间复杂性一般都是快速增长的指数函 数。希望能够在NP类问题内部找到一种方法,比较两个问题的计 算复杂性。
❖该近似算法的相对误差定义为=
cc* c*
。若对问题的输
入规模n,有一函数ε(n)使得 c c* ≤ε(n),则称ε(n)
c*
为该近似算法的相对误差界。
13
8.4 NP完全问题的近似算法
NPC问题的近似算法示例 - TSP:
➢ 给定一个完全无向图G=(V,E),其每一条边(u,v)∈E有一非 负整数费用c(u,v)。要找出G的最小费用哈密顿回路。如果 TSP满足三角不等式性质,即对于任意3个顶点u,v,w∈V有 :c(u,w)≤c(u,v)+c(v,w),则称该TSP为欧几里得TSP,否 则称为一般TSP。
12
8.4 NP完全问题的近似算法
NPC问题的近似算法的性能:
❖若一个最优化问题的最优值为c*,求解该问题的一个近 似算法求得近似最优解相应的目标函数值为c,则将该近 似近≤似算ρ比法(是n的)问。近题ρ似输(比n入)定为规义1模时为n,的求=一m得a个x的c函c*近, c数c*似 ρ。解(在为n)通最,常优即情解m况a。x 下cc* ,,cc*该
➢ 传递性:设P1、P2和P3是3个判定问题。若P1∝τ(n)P2,且P2∝τ(n)P3 ,则P1∝τ(n)P3。
4
8.3 NP完全问题
多项式时间变换示例:
NP完全问题证明
8.5.4 顶点覆盖问题 (VERTEX-COVER)
证 3SAT变换到 变换到VC. 将3SAT变换到VC. 设U={u1,u2,...,un}, C={c1,c2,...,cm}
3SAT的实例 如下构造图G, 分量设计法. 的实例. 是3SAT的实例. 如下构造图G, 分量设计法. 真值安排分量: 真值安排分量: =(V 1≤ 其中V ={u ={{u Ti=(Vi,Ei), 1≤i≤n, 其中Vi={ui,ūi}, Ei={{ui,ūi}} 任意覆盖必至少包含u 中的一个,否则不能覆盖边{ 任意覆盖必至少包含ui或ūi中的一个,否则不能覆盖边{ui或ūi}. 满足性检验分量: 满足性检验分量: =(V ,E ), 1≤ Sj=(Vj’,Ej’), 1≤ j≤ m, 其中 Vj’={a1[j],a2[j],a3[j]} ={a Ej’={{a1[j],a2[j]},{a1[j],a3[j]},{a2[j],a3[j]}} ={{a 覆盖至少包含V 中的两个顶点 否则不能覆盖E 中的三角形 中的两个顶点, 覆盖至少包含Vj’中的两个顶点,否则不能覆盖Ej’中的三角形
B = ∑ 2 pj = 2 p( 3q −1) + 2 p( 3q − 2 ) + ... + 2 2 p + 2 p + 20
j =0
3 q −1
B的段数与s(ai)一样,每段的最右位为1,其它为0 的段数与s(a 一样,每段的最右位为1 其它为0
均分∈ 8.5.5. 均分∈NPC 例如: 例如: W={w1,w2},X={x1,x2},Y={y1,y2}, M={(w1,x2,y2),(w1,x2,y1),(w2,x1,y1)} p=log(3+1)=2 p= og(3+1) 元素a1,a2,a3分别对应 元素a (w1,x2,y2),(w1,x2,y1),(w2,x1,y1) s(a1) = 01 00 00 01 00 01 = 210 + 24 + 20 s(a2) = 01 00 00 01 01 00 = 210 + 24 + 22 s(a3) = 00 01 01 00 01 00 = 28 + 26 + 22 B = 01 01 01 01 01 01ūi∈V’ ⇔ Nhomakorabea(ui)=F
顶点覆盖问题的计算与优化
顶点覆盖问题的计算与优化顶点覆盖问题是图论中一类非常经典的问题,其关注点在于寻找一种最小的点集,使得这个点集内每条边都至少有一个端点。
在实际应用中,例如网络覆盖,寻找最小的顶点集合以覆盖整个网络是非常重要的,因此顶点覆盖问题也被广泛应用于网络工程和社交网络分析等领域。
一、顶点覆盖问题的基础定义给定一个无向图 G=(V,E),顶点集 V 中的一个子集 S 被称为图 G 的一个顶点覆盖,当且仅当每一条边 (u,v) ∈ E 都至少与 S 中的一个顶点相关联。
形式化的说,对于图 G=(V,E) 的一个顶点覆盖 S,有:∀ (u,v) ∈ E, u ∈ S or v ∈ S其中,S ⊆ V。
更进一步,图 G 的最小顶点覆盖,是指寻找大小最小的顶点集合 S,使得上述条件满足。
二、顶点覆盖问题的实际应用顶点覆盖问题不仅在图论理论中有着重要的地位,同时在实际应用中也具有广泛的应用。
例如,对于通信网络的设计,需要覆盖特定区域内的所有节点,使得节点能够正常通信,即需要找到最小的顶点覆盖;在社交网络中,寻找最小的顶点覆盖可以用于判断一个社交圈子是否足够密切。
因此,研究顶点覆盖问题具有非常重要的现实意义。
三、顶点覆盖问题的算法对于一般图的顶点覆盖问题,已知为 NP-完全问题。
而对于某些特殊图,例如二分图和二元树,顶点覆盖问题可以在多项式时间内求解。
1. 二分图的顶点覆盖问题对于一个二分图 G=(V,E),其中 V 被分为两个集合 A 和 B,可以通过构建最大匹配来求解二分图 G 的最小顶点覆盖。
最大匹配指的是由一些不重叠、边数最多的边所组成的匹配,即不存在可以加入的边,而最小顶点覆盖与最大匹配有一个重要的关系:对于图 G 的任意顶点 u 和 v,如果边 (u,v) ∈ E 属于 G 的最大匹配,那么 u 和 v 必须至少有一个被包含在 G 的最小顶点覆盖中。
因此,对于二分图 G,可以使用匈牙利算法求其最大匹配,再通过构建最小点覆盖的方法,求解 G 的最小顶点覆盖。
顶点覆盖问题求解策略综述
顶点覆盖问题求解策略综述顶点覆盖问题是在图论中常见的一个重要问题,它在实际应用中有着广泛的应用。
本文将对顶点覆盖问题的求解策略进行综述。
顶点覆盖问题描述了如何选择图中的一些顶点,使得这些顶点能够覆盖图中的所有边。
具体而言,给定一个图G=(V,E),目标是找到一个顶点集合C,使得对于图G中的每一条边(v,u),都存在至少一个顶点在C中。
顶点覆盖问题通常被描述为一个优化问题,即在满足覆盖条件的前提下,找到尽可能小的顶点集合C。
在解决顶点覆盖问题时,我们通常可以采取以下几种策略:1. 穷举法:穷举法是最简单直观的方法,其思路是遍历所有可能的顶点集合,并验证每个集合是否满足覆盖条件。
虽然这种方法能够得到正确的解,但由于顶点集合的数量随图的规模指数级增长,因此穷举法在大规模问题上效率较低,很难应用于实际情况。
2. 近似算法:近似算法是一种在合理时间内找到接近最优解的方法。
其中最具代表性的近似算法是贪心算法。
贪心算法的基本思想是每次选择一个顶点来覆盖尽可能多的边,直到所有边都被覆盖。
贪心算法虽然不能保证找到最小的顶点覆盖集,但是在实际问题中通常能够得到较好的解,并且具有较高的效率。
3. 精确算法:精确算法是一种确保能够找到最优解的方法。
其中最著名的精确算法是使用分支定界技术的穷举法。
分支定界技术的核心思想是将问题划分为子问题,通过对子问题的求解来逐步深入到最优解的搜索空间。
由于分支定界技术的思想是一种剪枝策略,因此可以削减搜索空间,提高算法的效率。
然而,由于顶点覆盖问题是NP完全问题,因此精确算法通常在大规模问题上面临着指数级的计算复杂度。
4. 启发式算法:启发式算法是一种基于经验和启发性信息来指导求解策略的方法。
其中最常用的启发式算法是遗传算法和模拟退火算法。
遗传算法通过模拟自然选择的过程,利用交叉和变异的操作来搜索问题的解空间。
模拟退火算法则模仿金属退火时慢慢降低温度的过程,在一定的探索空间内接受较差的解,以避免陷入局部最优解。
线性规划近似求解顶点覆盖问题
线性规划近似求解顶点覆盖问题Stanford University—CS261:Optimization Handout7 Luca Trevisan January25,2011Lecture7In which we show how to use linear programming to approximate the vertex cover problem.1Linear Programming RelaxationsAn integer linear program(abbreviated ILP)is a linear program(abbreviated LP) with the additional constraints that the variables must take integer values.For ex-ample,the following is an ILP:maximize x1?x2+2x3subject tox1?x2≤1x2+x3≤2(1)x1∈Nx2∈Nx3∈NWhere N={0,1,2,...}is the set of natural numbers.The advantage of ILPs is that they are a very expressive language to formulate opti-mization problems,and they can capture in a natural and direct way a large number of combinatorial optimization problems.The disadvantage of ILPs is that they are a very expressive language to formulate combinatorial optimization problems,and ?nding optimal solutions for ILPs is NP-hard.If we are interested in designing a polynomial time algorithm(exact or approximate) for a combinatorialoptimization problem,formulating the combinatorial optimization problem as an ILP is useful as a?rst step in the following methodology(the discussion assumes that we are working with a minimization problem):Formulate the combinatorial optimization problem as an ILP;Derive a LP from the ILP by removing the constraint that the variables have to take integer value.The resulting LP is called a“relaxation”of the original problem.Note that in the LP we are minimizing the same objective function over a larger set of solutions,so opt(LP)≤opt(ILP);Solve the LP optimally using an e?cient algorithm for linear programming;–If the optimal LP solution has integer values,then it is a solution forthe ILP of cos t opt(LP)≤opt(ILP),and so we have found an optimalsolution for the ILP and hence an optimal solution for our combinatorialoptimization problem;–If the optimal LP solution x?has fractional values,but we have a round-ing procedure that transforms x?into an integral solution x such thatcost(x )≤c·cost(x?)for some constant c,then we are able to?nd a so-lution to the ILP of cost≤c·opt(LP)≤c·opt(ILP),and so we have ac-approximate algorithm for our combinatorial optimization problem.In this lecture and in the next one we will see how to roundfractional solutions of relaxations of the Vertex Cover and the Set Cover problem,and so we will be able to derive new approximation algorithms for Vertex Cover and Set Cover based on linear programming.2The Weighted Vertex Cover ProblemRecall that in the vertex cover problem we are given an undirected graph G=(V,E) and we want to?nd a minimum-size set of vertices S that“touches”all the edges of the graph,that is,such that for every(u,v)∈E at least one of u or v belon gs to S. We described the following2-approximate algorithm: Input:G=(V,E)S:=?For each(u,v)∈E–if u∈S∧v∈S then S:=S∪{u,v}return SThe algorithm?nds a vertex cover by construction,and if the condition in the if step is satis?ed k times,then|S|=2k and the graph contains a matching of size k,meaning that the vertex cover optimum is at least k and so |S |is at most twice the optimum.Consider now the weighted vertex cover problem.In this variation of the problem,the graph G =(V,E )comes with costs on the vertices,that is,for every vertex v we have a non-negative cost c (v ),and now we are not looking any more for the vertex cover with the fewest vertices,but for the vertex cover S of minimum total cost v ∈S c (v ).(The original problem corresponds to the case in which every vertex has cost 1.)Our simple algorithm can perform very badly on weighted instances.For example consider the following graph:Then the algorithm would start from the edge (a,b ),and cover it by putting a,b into S .This would su?ce to cover all edges,but would have cost 101,which is much worse than the optimal solution which consists in picking the vertices {b,c,d,e,f },with a cost of 5.Why does the approximation analysis fail in the weighted case?In the unweighted case,every edge which is considered by the algorithm must cost at least 1to the optimum solution to cover (because those edges form a matching),and our algorithm invests a cost of 2to cover that edge,so we get a factor of 2approximation.In the weighted case,an edge in which one endpoint has cost 1and one endpoint has cost 100tells us that the optimum solution must spend at least 1to cover that edge,but if we want to have both endpoints in the vertex cover we are going to spend 101and,in general,we cannot hope for any bounded approximation guarantee.We might think of a heuristic in which we modify our algorithm so that,when it considers an uncovered edge in which one endpoint is much more expensive than the other,we only put the cheaper endpoint in S .This heuristic,unfortunately,also fails completely:imagine a “star”graph like the one above,in whichthere is a central vertex of cost 100,which is connected to 10,000other vertices,each of cost 1.Thenthe algorithm would consider all the 10,000edges,and decide to cover each of them using the cheaper endpoint,?nding a solution of cost 10,000instead of the optimal solution of picking the center vertex,which has cost 100.Indeed,it is rather tricky to approximate the weighted vertex cover problem via a combinatorial algorithm,although we will develop (helped by linear programming intuition)such an approximation algorithm by the end of the lecture.Developing a 2-approximate algorithm for weighted vertex cover via a linear program-ming relaxation,however,is amazingly simple.3A Linear Programming Relaxation of Vertex Cover Let us apply the methodology described in the ?rst section.Given a graph G =(V,E )and vertex costs c (·),we can formulate the minimum vertex cover problem for G as an ILP by using a variable x v for each vertex v ,taking the values 0or 1,with the interpretation that x v =0means that v ∈S ,and x v =1means that v ∈S .The cost of the solution,which we want to minimize,is v ∈V x v c (v ),and we want x u +x v ≥1for each edge (u,v ).This gives the ILPminimizev ∈V c (v )x vsubject to x u +x v ≥1?(u,v )∈Ex v ≤1v ∈Vx v ∈Nv ∈V (2)Next,we relax the ILP (2)to a linear program.minimizev ∈V c (v )x vsubject to x u +x v ≥1?(u,v )∈Ex v ≤1v ∈Vx v ≥0v ∈V (3)Let us solve the linear program in polynomial time,and suppose that x ?is an optimal solution to the LP (3);how do we “round”it to a 0/1solution,that is,to a vertex cover?Let’s do it in the simplest possible way:round each value to the closest integer,that is,de?ne x v =1if x ?v ≥12,and x v =0if x ?v <12.Now,?nd the set correspondingto the integral solution x ,that is S :={v :x v =1}and output it.We have:The set S is a valid vertex cover ,because for each edge (u,v )it is true thatx ?u +x ?v ≥1,and so at least one of x ?u or x ?v must be at least 1/2,and so at leastone of u or v belongs to S ;The cost of S is at most twice the optimum,because the cost of S isv∈Sc(v)=v∈V c(v)xv≤v∈V c(v)·2·x?v=2·opt(LP)≤2·opt(V C)And that’s all there is to it!We now have a polynomial-time2-approximate algorithm for weighted vertex cover.4The Dual of the LP RelaxationThe vertex cover approximation algorithm based on linear programming is very ele-gant and simple,but it requires the solution of a linear program.Our previous vertex cover approximation algorithm,instead,had a very fast linear-time implementation. Can we get a fast linear-time algorithm that works in the weighted case and achieves a factor of2approximation?We will see how to do it,and although the algorithm will be completely combinatorial,its analysis will use the LP relaxation of vertex cover.How should we get started in thinking about a combinatorial approximation algorithm for weighted vertex cover?We have made the following point a few times already,but it is good to stress it again: in order to have any hope to design a provably good approximation algorithm for a minimization problem,we need to have a good technique to prove lower bounds for the optimum.Otherwise,we will not be able to prove that the optimum is at least a constant fraction of the cost of the solution found by our algorithms.In the unweighted vertex cover problem,we say that if a graph has a matching of size k,then the optimum vertex cover must contain at least k vertices,and that’s our lower bound technique.We have already seen examples in which reasoning about matchings is not e?ective in proving lower bound to the optimum of weighted instances of vertex cover.How else can we prove lower bounds?Well,how did we establish a lower bound to the optimum in our LP-based2-approximate algorithm?We used the fact that the optimum of the linear programming relaxation(3)is a lower bound to the minimumvertex cover optimum.The next idea is to observe that the cost of any feasible solution to the dual of(3)is a lower bound to the optimum of(3),by weak duality, and hence a lower bound to the vertex cover optimum as well.Let us construct the dual of(3).Before starting,we note that if we remove the x v≤1constraints we are not changing the problem,because any solution in which some variables x v are larger than1can be changed to a solution in which every x v is at most one while decreasing the objective function,and without contradicting any constraint,so that an optimal solution cannot have any x v larger than one.Our primal is thus the LP in standard formminimizev∈Vc(v)x vsubject tox u+x v≥1?(u,v)∈Ex v≥0?v∈V(4) Its dual has one variable y(u,v)for every edge(u,v),and it ismaximize(u,v)∈Ey(u,v)subject tou:(u,v)∈Ey(u,v)≤c(v)?v∈Vy(u,v)≥0?(u,v)∈E(5)That is,we want to assign a nonnegative“charge”y(u,v)to each edge,such that the total charge over all edges is as large as possible,but such that,for every vertex,the total charge of the edges incident on the vertex is at most the cost of the vertex.From weak duality and from the fact that(4)is a relaxation of vertex cover,we have that for any such system of charges,the sum of the charges is a lower bound to the cost of the minimum vertex cover in the weighted graph G=(V,E)with weights c(·). Example1(Matchings)Suppose that we have an unweighted graph G=(V,E), and that a set of edges M?E is a matching.Then we can de?ne y(u,v):=1if (u,v)∈M and y(u,v):=0if(u,v)∈M.This is a feasible solution for(5)of cost |M|.This means that any lower bound to the optimum in the unweighted case via match-ings can also be reformulated as lower bounds via feasible solutions to(5).The latter approach,however,is much more powerful.Example2Consider the weighted star graph from Section2.We can de?ne y(a,x)= 1for each vertex x=b,c,d,e,f,and this is a feasible solution to(5).This proves that the vertex cover optimum is at least5.5Linear-Time 2-Approximation of Weighted Ver-tex CoverOur algorithm will construct,in parallel,a valid vertex cover S ,in the form of a valid integral solution x to the ILP formulation of vertex cover (2),and a feasible solution y to the dual (5)of the linear programming relaxation,such that the cost of y is at least half the cost S .Before starting,it is helpful to reformulate our old algorithms in this languageInput:undirected,unweighted,graph G =(V,E )x =(0, 0y =(0, 0for each edge (u,v )∈E–if x u <1and x v <1theny (u,v ):=1x u :=1x v :=1S :={v :x v =1}return S,yOur goal is to modify the above algorithm so that it can deal with vertex weights,while maintaining the property that it ?nds an integral feasible x and a dual feasible y such that v ∈V c (v )x v ≤2· (u,v )∈V y u,v .The key property to maintain is that when we look at the edge (u,v ),and we ?nd it uncovered,what we are going to “spend”in order to cover it will be at most 2y u,v ,where y u,v will be a charge that we assign to (u,v )without violating the constraints of (5).We will get simpler formulas if we think in terms of a new set of variables p v ,which represent how much we are willing to “pay”in order to put v i n the vertex cover;at the end,if p v =c v then the vertex v is selected,and x v =1,and if p v <c v="" then="" we="" are="" not="" going="" to="" use="" in="" the="" vertex="" cover.thus,in="" integral="" solution,we="" will="" have="" x="" c="" (v="" )="" ,and="" so="" )·x="" ≤p="" and="" total="" amount="" willing="" pay,="" p="" is="" an="" upper="" bound="" cost="" of="" solution="" .<="" bdsfid="187">。
顶点覆盖问题的近似算法
顶点覆盖问题的近似算法顶点覆盖问题是计算机科学中一个重要的组合优化问题。
该问题的目标在于找到一个最小的点集,能够覆盖无向图中的所有边。
该问题是NP困难问题,因此在多项式时间内无法得到最优解。
但是,我们可以使用近似算法来求解顶点覆盖问题。
近似算法是一种能够在多项式时间内求解最优解的算法,但其结果不一定是最优的。
顶点覆盖问题的近似算法可以分为两种:贪心近似算法和线性规划近似算法。
贪心近似算法是一种简单的算法,其思想在于每次选择能够覆盖尽可能多的未覆盖边的结点,直到所有的边都被覆盖。
具体实现方法为,从图中任意选择一条边,将其两个端点标记为已覆盖,然后删去这条边及其关联的所有边。
重复这个过程直到所有的边被覆盖。
这个算法的近似比为2,即其结果的规模不超过最优解的两倍。
线性规划近似算法是一种更加复杂的算法,其思想在于将顶点覆盖问题转化为一个线性规划问题,然后求解出一个最优的线性规划解。
具体实现方法为,将每个结点看作一个0-1变量,表示该结点是否被选择。
然后,将每个边看作一个约束条件,要求其两个端点至少有一个被选择。
最后,将目标函数设置为所有结点被选择时的代价。
对于求解出的线性规划解,可以将小于等于0的变量设置为0,大于等于1的变量设置为1,从而得到一个整数解。
该算法的近似比为1.44。
在实际应用中,选择何种近似算法取决于具体问题的规模和要求。
如果需要更加快速地得到一个准确度较低但规模较小的结果,则可以选择贪心近似算法。
如果需要更高的准确度,可以选择线性规划近似算法。
无论使用哪种近似算法,都需要进行正确性分析和性能评估,以确保得到的结果是可靠的。
ChA、NP完全问题的近似算法
if(G[u][v] == 0) continue; X[u] = X[v] = 1; // 将u,v加入X for(int w = u + 1; w < n; ++w) // 删除与u,v关联的边
if(Y.find(*F) != Y.end()) W.insert(*F); return W; }
15
template<class K, class Pr, class A> // 每个元素都加上指定的值 set<K, Pr, A> operator+(const set<K, Pr, A> &X, const K &Y) { set<K, Pr, A> W;
(c)
(d)
(e)
(f)
图(a)~(e)说明了算法的运行过程及结果。(e)表示算法产生
的近似最优顶点覆盖 C,由顶点a,b,c,d,e, f 组成。(f)是图G 的
一个最小顶点覆盖,只有 3 个顶点:b,d,e 。
ห้องสมุดไป่ตู้
9
(2)复杂性分析
因为被选取和删除的边的总数为|E| ,所以该近似算法的计 算时间为 (|E|) 。
typename set<K, Pr, A>::const_iterator F = X.begin(), L = X.end(); for(; F != L; ++F) W.insert(*F + Y); return W; } template<class K, class Pr, class A> // 每个元素都乘以指定的值 set<K, Pr, A> operator*(const set<K, Pr, A> &X, const K &Y) { set<K, Pr, A> W; typename set<K, Pr, A>::const_iterator F = X.begin(), L = X.end(); for(; F != L; ++F) W.insert(*F * Y); return W; }
近似算法最小顶点覆盖
近似算法最小顶点覆盖什么是最小顶点覆盖问题?最小顶点覆盖是图论中的一个经典问题,它的目标是在一个给定的图中选择尽可能少的顶点,使得每条边都至少与其中一个顶点相关联。
换句话说,最小顶点覆盖问题可以理解为找出一个顶点集合,使得图中的每条边至少与集合中的一个顶点相关联。
NP完全问题最小顶点覆盖问题属于NP完全问题,这意味着目前还没有找到一个高效的确定性算法来解决它。
对于这类问题,我们常常使用近似算法来寻找一个不太理想但是可以接受的解。
近似算法的概念近似算法是一种可以在有限时间内找到一个可接受解的算法。
它通过牺牲一定的精确度或效率来降低问题的复杂性。
近似算法常常用于NP完全问题,因为在这些问题中,用常规的算法找到一个精确解的时间复杂度很高。
最小顶点覆盖问题的近似算法近似算法最小顶点覆盖问题的思路是通过贪心算法来逐步扩展顶点集合,直到满足所有边都与集合中的顶点相关联。
下面是一个通过贪心算法求解最小顶点覆盖问题的简单步骤:1.初始化顶点集合为空。
2.对于图中的每条边,选择其中一个顶点加入集合中。
选择的原则可以是任意的,比如选择边中的第一个顶点或者随机选择一个顶点。
3.删除与已加入集合中的顶点相关联的边。
4.重复步骤2和步骤3,直到所有的边都被删除。
贪心算法的近似性能尽管贪心算法在最小顶点覆盖问题中可以得到一个不太理想但是可以接受的解,但它的近似性能能否达到一个理想水平呢?对于最小顶点覆盖问题,我们可以证明贪心算法的近似性能是2,即贪心算法得到的解的规模不会超过最优解的两倍。
证明思路如下:假设最优解的规模为k,而贪心算法得到的解的规模为k’。
我们可以通过反证法来证明k’不会超过2k。
假设最优解中存在一条边没有被贪心算法的解覆盖到,那么我们可以将这条边添加到贪心算法的解中,得到一个更好的解,这与贪心算法的解是最优解矛盾。
所以我们可以得出结论:贪心算法的解中的每一条边都被最优解覆盖到。
假设最优解的规模为k,而贪心算法得到的解的规模为k’,那么最优解中的每一条边都在贪心算法的解中覆盖到,所以最优解的规模至少是k’。
不确定环境下的最小权顶点覆盖问题的开题报告
不确定环境下的最小权顶点覆盖问题的开题报告一、问题描述顶点覆盖问题(Vertex Cover, VC)是指在给定无向图G(V,E)中,选出最小的顶点集合使它们的邻接点集合包含整个边集E的顶点集合。
其中,边的顶点集合为该边的两个端点。
此外,如果每个顶点有一个正整数的权值,那么问题被称为带权顶点覆盖问题(Weighted Vertex Cover, WVC)。
问题可以表示为:在无向图G(V,E)中,每个顶点有一个正整数的权值,选出具有最小权值的顶点集合V0,使得对于每个边(u,v)∈E,至少一个端点在V0内。
在实际应用中,许多问题都可以抽象为顶点覆盖问题,例如社交网络中的个人与个人之间的关系可以用图来表示,顶点代表个人,边代表关系,顶点覆盖问题可以用来帮助找到最小的个人集合,使得他们可以代表整个社交网络,方便对个人之间的关系进行分析;物流配送中的装车规划问题,顶点覆盖问题可以用来帮助找到最小的装车点确定配送方案。
二、问题分析无权顶点覆盖问题的求解方法比较简单,直接选取一个邻边、未选中的点覆盖边即可。
但带权顶点覆盖问题是NP完全问题,常见的求解方法有:1.贪心算法从权值最小的顶点开始,选取顶点和它的邻边,直到所有边都被覆盖。
2.整数规划算法将顶点集合的选择问题转化为0-1规划问题,利用整数规划求解器求解。
3.近似算法使用一些常见的近似算法,如禁忌搜索、模拟退火算法等,来求解带权顶点覆盖问题。
三、研究内容1.将带权顶点覆盖问题转化为整数规划问题,研究各种求解整数规划问题的算法,并比较它们的效率和精度。
2.设计一个基于禁忌搜索和模拟退火算法的近似算法,研究它的效率和精度,尝试对算法进行优化。
3.结合贪心算法,探究其在带权顶点覆盖问题中的适用性和局限性。
四、预期成果1.提出针对带权顶点覆盖问题的整数规划算法,研究其精度和效率性;2.设计模拟退火和禁忌搜索的近似算法;3.开发出实现以上算法的程序;4.在不同的数据集上测试程序,并评估算法的性能。
顶点覆盖问题的近似算法
c −c*
顶点覆盖问题的近似算法
问题描述:无向图G=(V,E)的顶点覆盖是它的顶点集V的一个子集V’⊆V, 使得若(u,v)是G的一条边,则v∈V’或u∈V’。顶点覆盖V’的大小是它所包含的 顶点个数|V’|。
VertexSet approxVertexCover ( Graph g ) { cset=∅; e1=g.e; while (e1 != ∅) { 从e1中任取一条边(u,v); cset=cset∪{u,v}; 从e1中删去与u和v相关联的所有边; } return c }
顶点覆盖问题的近似算法
图(a)~(e)说明 a)~(e)说明 了算法的运行过程 及结果。 e)表示 及结果。(e)表示 算法产生的近似最 优顶点覆盖cset cset, 优顶点覆盖cset, 它由顶点 b,c,d,e,f,g所组 b,c,d,e,f,g所组 f)是图 是图G 成。(f)是图G的一 个最小顶点覆盖, 个最小顶点覆盖, 它只含有3个顶点: 它只含有3个顶点: b,d和 b,d和e。
Cset用来存储顶点 Cset用来存储顶点 覆盖中的各顶点。 覆盖中的各顶点。初 始为空, 始为空,不断从边集 e1中选取一边 中选取一边( e1中选取一边(u,v) ,将边的端点加入 cset中 并将e1 e1中已 cset中,并将e1中已 覆盖的边删去, 被u和v覆盖的边删去, 直至cset cset已覆盖所有 直至cset已覆盖所有 e1为空 为空。 边。即e1为空。
近似算法的性能
若一个最优化问题的最优值为c*,求解该问题的一个近似算法求得的近 似最优解相应的目标函数值为c,则将该近似算法的性能比 近似算法的性能比定义为 近似算法的性能比 η= 。在通常情况下,该性能比是问题输入规模n的一个函数ρ(n) c c * max , ,即 c* c ≤ρ(n)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
顶点覆盖问题的NP 完全证明和顶点覆盖优化问题的近似算法
顶点覆盖(VERTEX COVER )
给定一个无向图),(E V G =和一个正整数k ,若存在V V ⊆',k V =',使得对任意的E v u ∈),(,都有'V u ∈或'V v ∈,则称'V 为图G 的一个大小为k 的顶点覆盖。
顶点覆盖问题的描述
判定问题:VERTEX COVER
输 入:无向图),(E V G =,正整数k
问 题:G 中是否存在一个大小为k 的顶点覆盖,这是一个NP 完全问题 顶点覆盖的NP 完全性证明
NP 性的证明:
对给定的无向图),(E V G =,若顶点V V ⊆'是图G 的一个大小为k 顶点的覆盖,则可以构造一个确定性的算法,以多项式的时间验证k V =',及对所有的E v u ∈),(,是否有'V u ∈或'V v ∈。
因此顶点覆盖问题是一个NP 问题。
完全性的证明:
我们已知团集(CLIQUE )问题是一个NP 完全问题,若团集问题归约于顶点覆盖问题,即VERTEX CLIQUE poly αCOVER ,则顶点覆盖问题就是一个NP 完全问题。
我们可以利用无向图的补图来说明这个问题。
若向图),(E V G =,则G 的补图--=),(E V G ,其中}),(|),{(E v u v u E ∉=-。
例如,图1(b)是图1(a)的补图。
在图1(a)中有一个大小为3的团集},,{y v u ,在图1(b)中,则有一个大小为2的顶点覆盖},{w v 。
显然可以在多项式时间里构造图G 的补图-G 。
因此,只要证明图),(E V G =有一个大小为k V -||的团集,当且仅当它的补图-
G 有一个大小为k 的顶点覆盖。
(a) (b)
图1无向图及补图
必要性:如果G 中有一个大小为k V -||的团集,则它具有一个大小为k V -||个顶点的完全子图,令这k V -||个顶点集合为'V 。
令),(v u 是-E 中的任意一条边,
则E v u ∉),(。
所以),(v u 中必有一个顶点不属于'V ,即),(v u 中必有一个顶点属于'V V -,也就是边),(v u 被'V V -覆盖。
因为),(v u 是-E 中的任意一条边,因此,-
E
中的边都被覆盖,所以,'V V -是-
G 的一个大小为k V V =-|'|的顶点覆盖。
充分性:如果-G 中有一个大小为k 的顶点覆盖,令这个顶点覆盖为'V ,),(v u 是-E 中的任意一条边,则u 和v 至少有一个顶点属于'V 。
因此,对于任意的顶点u 和v ,若'V V u -∈并且'V V v -∈,则必然有E v u ∈),(,即'V V -是G 中一个大小为的k V -||的团集。
综上所述,团集(CLIQUE )问题归约于顶点覆盖(VERTEX COVER )问题,即VERTEX CLIQUE poly αCOVER 。
所以,顶点覆盖问题是一个NP 完全问题。
顶点覆盖优化问题的近似算法
上面已经证得,顶点覆盖问题是一个NP 完全问题,因此,没有一个确定性的多项式时间算法来解它。
顶点覆盖的优化问题是找出图中的最小顶点覆盖。
为了用近似算法解决这个问题,假设顶点用1,...,1,0-n 编号,并用下面的邻接表来存放顶点与顶点之间的关联边。
struct {_list adj /*邻接表结点的数据结构*/ int ;_num v /*邻接结点的编号*/
struct list adj _;next * /*下一个邻接顶点*/
};
typedef struct list adj _ ;NODE
NODE ];[n V * /*图G 的邻接表头结点*/ 则顶点覆盖问题的近似算法的求解步骤可以叙述如下:
(1)顶点的初始编号0=u ;
(2)如果顶点u 存在关联边,转到步骤(3),否则,转到步骤(5);
(3)令关联边为),(v u ,把顶点u 和顶点v 登记到顶点覆盖C 中;
(4)删去与顶点u 和顶点v 关联的所有边;
(5)1+=u u ,如果n u <,转到步骤(2),否则,算法结束。
算法的实现过程叙述如下:
算法名称:顶点覆盖优化问题的近似算法;
输 入:无向图G 的邻接表[]V ,顶点个数为n ;
输 出:图G 的顶点覆盖[]C ,C 中的顶点个数为m 。
NODE app er vertex (_cov _.1int [],V *int ,n int [],C )&m
.{2
.3 ;1,p p NODE *
.4 ;,int v u
.5 ;0=m
.6 ){;;0(++<=u n u u for
.7 ;][next u V p ⋅=
.8 ){!(NULL p if = /*如果u 存在关联边*/ .9 ;2;_]1[;][+→==+=m num v p v m C u m C
.10 ){!(NULL p while = /*则选取边),(v u 的顶点*/ .11 );,_(_u num v p e delete → /*删去与u 有关联的所有边*/ .12 ;next p p →=
.13 }
.14 ;][NULL next u V =⋅
.15 ;][1next v V p ⋅=
.16 ){!(NULL p while = /*删去与v 关联的所有边*/ .17 );,_(_v num v p e delete →
.18 ;next p p →=
.19 }
.20 ;][NULL next v V =⋅
.21 }
.22}
算法说明:
这个算法用数组C 来存放顶点覆盖中的各个顶点,用变量m 来存放数组C 中的顶点个数。
开始时,把变量m 初始化为0,把顶点的编号u 初始化为0。
然后从顶点u 开始,如果顶点u 存在着关联边,就把顶点u 及其一个邻接点v 登记到数组C 中。
并删去与顶点u 和顶点v 的所有关联边。
其中,第11行的函数
),_(_u num v p e delete →用来删去顶点num v p _→与顶点u 相邻接的登记项;
第17行函数),_(_v num v p e delete →用来删去顶点num v p _→与顶点v 相邻接的登记项;第14行和20行分别把顶点u 和顶点v 的邻接表头结点的链指针置为空,从而分别删去这两个顶点与其他顶点相邻接的所有登记项。
经过这样的处理,就把顶点u 及顶点v 的所有关联边删去。
这种处理一直进行,直到图G 中的所有边都被删去为止。
最后,在数组C 中存放着图G 的顶点覆盖中的各个顶点编号,变量m 表示数组C 中登记的顶点个数。
图2表示了这种处理过程。
图2(a)表示图G 的初始状态;图2(b)表示选择边),(b a ,把关联边的顶点a 及b 放进数组C 中,并删去顶点a 及顶点b 相关联的所有边,这里删去边),(b a ,),(g a 及),(j a ;图2(c)表示选择边),(d c ,把关联该边的顶点c 和顶点d 放进数组C 中,并删去边),(d c ,),(g c 及),(i d ;这个过程一直进行,图2(g)表示最后得到的结果。
整个处理过程共选择了6条边上的12个顶点,作为图的一个顶点覆盖,他们是m l k j h g f e d c b a ,,,,,,,,,,,。
可以看到,它不是图G 的最小的顶点覆盖。
图2(h)表示图G 的一个最小的顶点覆盖,它有7个顶点,分别是l k i h f c a ,,,,,,。
(a) (b)
(c) (d)
(e) (f)
(g) (h)
图2 算法处理过程图
算法近似性能估计:
下面来估计这个算法的近似性能。
假定算法所选取的边集为'E,则这些边
的关联边顶点被作为顶点覆盖中的顶点,放进数组C 中。
因为一旦选择了某条边,例如边),(b a ,则与顶点a 和顶点b 相关联的所有边均删去。
再次选择第2条边时,
第2条边与第1条边将不会具有公共顶点,则边集中的所有的边都不会具有公共顶点。
这样放进数组中的顶点个数为|'|2E ,即|'|2||E C =。
另一方面,图G 的任何一个顶点覆盖,至少包含'E 中各条边中的一个顶点。
若图G 的最小顶点覆盖为*C ,则有|'||*|E C ≥。
所以有:
2|
'||'|2|*|||=≤=E E C C ρ 由此可以得到,这个算法的性能比率小于或等于2。