集合覆盖近似算法

合集下载

集合覆盖问题的模型与算法

集合覆盖问题的模型与算法

个 集 合 覆 盖 。问题 : 求 的 一个 基 数 最 小 的集 合 覆盖 , 其 中基数 定义 为 集合 中元 素 的数 目。
J i ,
为 的一个集合覆盖 , 意指 中的每
V L S I 设计 、 网络 安全 等 。 1 。遗 憾 的 是 , 集 合 覆 盖 问题 在 算 法 复 杂性 上 属于 N P . 困难 问题 , 即它不 存 在多 项式 时 间精 确算法 , 除 ̄P = NP 。因此 , 近似 算法成 为求解集 合覆盖 问题 的 一个 有 效 途径 , 其 中以C h v  ̄ i t a l 的贪 心算 法 [ 4 - 5 ] 最 为 简洁 。 后来 , 学者们 又陆续提 出过一些近 似程度更 好的近似 算法 。 近 似算 法 固然 是 多 项式 时 间 算法 , 但 返 回 的往 往不 是

要: 集合 覆 盖 问题在 网络设 计领 域 中有 着 良好 的应用 背 景 , 但 它在 算法 复杂 性上 却是 NP . 困模 型 , 给 出 了源于贪 心 思想 的近似 算法 , 并从 原 始. 对 偶规 划 的 角度 进行 了证 明 , 基于L I N G O软件 的传 感 器 网络 最优 设计 案 例验证 了模 型 的正 确性 和 算法 的有效 性 。 关键 词 : 集合 覆 盖 ; 近似 算 法 ; 0 - 1 规 划; 对 偶规 划; 线性 交互 式通 用优化 器( L I N G O)
文献 标 志码 : A 中 图分 类号 : Q7 8 4; T P 3 0 1 . 6 d o i : 1 0 . 3 7 7 8 / j . i s s n . 1 0 0 2 — 8 3 3 1 . 1 3 0 3 - 0 3 8 3
1 引 言
集 合 覆 盖 问题 是 组 合最 优 化 和 理 论 计 算 机 科 学 中的

近似算法最小顶点覆盖

近似算法最小顶点覆盖

近似算法最小顶点覆盖
最小顶点覆盖问题是指在一个图中找到最小的顶点集合,使得每一条边都至少有一个端点在这个集合中。

最小顶点覆盖的算法很多,其中一种近似算法是贪心算法。

贪心算法的基本思路是,每次选择当前能选择的最优解来扩大覆盖集合。

对于最小顶点覆盖问题,我们可以选择一些顶点来组成覆盖集合,使得每条边都至少有一个端点在集合中。

一个比较直观的近似算法是:
1. 初始化覆盖集合为空。

2. 对于每条边,如果其中一个端点不在覆盖集合中,则将这个端点加入覆盖集合。

3. 重复步骤2,直到所有边都被覆盖。

这个算法的复杂度是O(E),其中E是边数。

虽然它不保证得到精确解,但是在实际中效果还是很不错的。

事实上,该算法的近似比例是2,也就是说,它得到的解最多是精确解的两倍。

近似算法

近似算法

u
v w
z
z
yxBiblioteka yx(a)
图G及其补图
(b)
上图(b)中有一个大小为2的顶点覆盖{w,z} 。
上图(a)的最大团为{u,v,y,x} k=4
顶点覆盖问题原来是以找图G的最小顶点覆盖的形式提出的。
为了研究其计算复杂性,将它表述为相应的判定问题。
首先,容易看出,VERTEX-COVER∈NP。因为对于给定的图G 和正整数k 以及一个“证书”v’ ,验证|V‘|=k,然后对每条
反之,设G有一个顶点覆盖V’V且|V‘|=|V|-k。对任意 u,v∈V,若(u,v)∈E,则u和v中至少有一个顶点属于 V’。这等价于,对任意的u,v∈V,若uV’且vV’,则
(u,v)∈E。换句话说,V-V’是G的一个团,其大小为
|V|-|V’|=k。即V-V’ 是G的一个k团。
因此 ,CLIQUE∝p VERTEX-COVER,从而VERTEXCOVER∈NPC。
证明思路: 首先,VERTEX-COVER∈NP。因为对于给定的图G和正整数k 以及一个“证书”V’,验证|V’|=k,然后对每条边(u,v)∈E, 检查是否有u∈V’或v∈V’,显然可在多项式时间内完成。 其次,通过CLIQUE∝pVERTEX-COVER来证明顶点覆盖问题 是NP难的。
u
v w
定义:语言L是NP完全的当且仅当 (1)L∈NP; (2)对于所有L’∈NP有L’ ∝p L。 如果有一个语言L满足上述性质(2),但不一定满足性质(1), 则称该语言是NP难的。所有NP完全语言构成的语言类称为NP完全 语言类,记为NPC。
定理:设L是NP完全的,则 (1)L∈P当且仅当P=NP; (2)若L∝p L1 ,且 L1∈NP,则 L1 是NP完全的。

集合覆盖问题

集合覆盖问题

集合覆盖问题 NP问题的近似解Set Cover problem是计算机算法复杂度领域的经典问题。

问题如下定义:⾸先有⼀个元素集合U,给定⼀系列集合,各集合之中含可能有⼀些共同的元素(如图所⽰)。

要求访问最少的集合,可以得到U中所有的元素,求出满⾜要求的最少数量的集合,它是Karp’s 21个NP-complete问题之⼀。

可以给出公式定义:给定⼀个元素集合{U}和集合{S},Si中的元素属于U,即S是U的⼦集集合。

我们要求的⼀个覆盖就是⼀个集合C其元素集合之并等于U即:。

⽤图⽰表明:Input:Output:Set cover问题通常在我们寻求⾼效获取被package起来的项或者寻求⼀种最优的项表述时出现,显然找到⼀个cover很简单,但我们⽬的是求的最优,这样才能更好的节约成本。

我们知道,所有的NP-C(NP完全问题)都还没有多项式时间算法。

⽽当我们遇到这类问题时我们通常采⽤只对特殊问题求解,动态规划或分⽀定界,概率算法,只求近似解或者启发式⽅法求解。

下⾯就使⽤贪婪算法给出近似解:⾸先给出如下函数定义给出贪婪算法:下⾯对此算法进⾏分析:此贪婪算法已被证明是set cover问题的⼀个多项式时间复杂度,(1+In r)ratio近似算法,其中r是输⼊S中集合的最⼤的集的势。

证明:假设S1,S2…Sj是通过贪婪算法依次选择的集合,Ci={S1,S2…Si},opt是满⾜集合覆盖最优解的集合数,由于贪婪规则,显然,当我们选择Si+1时Si+1必定覆盖了当前还未被Ci覆盖的最多元素。

还未被Ci覆盖的元素是|U|-f(Ci),他们可以被opt个⼦集合最优覆盖。

因此,按平均来算,最优解集合的⼀个⼦集可以覆盖(|U|-f(Ci))/opt个没有被Ci覆盖的元素,因此推出:解决Set cover问题的贪婪算法已经被证明是解决set cover问题的最可能的多项式时间复杂度近似算法。

ChA、NP完全问题的近似算法

ChA、NP完全问题的近似算法
for(int v = u + 1; v < n; ++v) { // 因为是无向图,只需考虑邻接矩阵的上三角
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; }

第9章近似算法

第9章近似算法

第9章近似算法第9章近似算法1第9章近似算法迄今为止,所有的NP完全问题都还没有多项式时间算法。

对于这类问题,通常可采取以下几种解题策略。

(1)只对问题的特殊实例求解(2)用动态规划法或分支限界法求解(3)用概率算法求解(4)只求近似解(5)用启发式方法求解本章主要讨论解NP完全问题的近似算法。

239.1 近似算法的性能若一个最优化问题的最优值为c*,求解该问题的一个近似算法求得的近似最优解相应的目标函数值为c,则将该近似算法的性能比定义为η= 。

在通常情况下,该性能比是问题输入规模n的一个函数ρ(n),即≤ρ(n)。

?c c c c *,*max ?c c c c *,*max 该近似算法的相对误差定义为λ= 。

若对问题的输入规模n,有一函数ε(n)使得≤ε(n),则称ε(n)为该近似算法的相对误差界。

近似算法的性能比ρ(n)与相对误差界ε(n)之间显然有如下关系:ε(n)≤ρ(n)-1。

**c c c ?**c c c ?9.2 顶点覆盖问题的近似算法问题描述:无向图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}Cset用来存储顶点覆盖中的各顶点。

初始为空,不断从边集e1中选取一边(u,v),将边的端点加入cset 中,并将e1中已被u和v覆盖的边删去,直至cset已覆盖所有边。

即e1为空。

49.2 顶点覆盖问题的近似算法图(a)~(e)说明了算法的运行过程及结果。

(e)表示算法产生的近似最优顶点覆盖cset,它由顶点b,c,d,e,f,g所组成。

求解集合覆盖问题的离散动态凸化方法

求解集合覆盖问题的离散动态凸化方法

求解集合覆盖问题的离散动态凸化方法刘秀梅;欧阳菲【摘要】集合覆盖问题是一个基本的组合优化问题,它是NP(多项式复杂程度的非确定性)完全问题.通过罚函数把问题转化为一个无约束最优化问题,给出一个辅助函数.它和问题有相同的离散全局极小解,设计一个算法,通过极小化该辅助函数得到问题的一个近似离散全局极小解.数值试验表明,算法对求解集合覆盖问题是有效的.【期刊名称】《宁德师范学院学报(自然科学版)》【年(卷),期】2019(031)002【总页数】5页(P120-123,133)【关键词】集合覆盖;离散全局极小解;罚函数;辅助函数【作者】刘秀梅;欧阳菲【作者单位】泉州理工学院通识教育中心,福建泉州362000;泉州理工学院通识教育中心,福建泉州362000【正文语种】中文【中图分类】O224集合覆盖问题是一个经典的NP(多项式复杂程度的非确定性)难问题,相继有很多学者利用不同思想提出了很多优化算法.Balas 和Ho 提出了割平面法[1],Fisher 和Kedia 提出了对偶启发式算法[2];Beasley 和Jornslen 结合拉格朗日启发式算法,用约束条件排除可行解的方法,Gomory f-cuts 和改进的分支策略解决了集合覆盖问题[3];Jacobs 和Brusco 开发了模拟退火算法[4];Beasley,Chu 以及Corne 等提出了用遗传算法解决集合覆盖问题[5].这些算法主要分为精确算法和启发式算法.如果问题规模比较大时,精确算法时间代价非常高,启发式算法则以牺牲解的精度来取得较好的时间复杂度.本文用罚函数的方法,把问题转化为一个无约束最优化问题,给出一个辅助函数,它和问题有相同的离散全局极小解.设计一个算法,通过极小化该辅助函数得到问题的一个近似离散全局极小解.1 集合覆盖问题介绍集合覆盖问题通常描述为:从一个m 行,n 列的0-1 矩阵(aij)m×n中选出若干列盖住所有的行,使得盖住所有行所付出的代价最小.它可用问题(A)二值整数规划来表示:式中:cj表示第j 列的代价;xj取0 或1,取1 表示第j 列包含在解中,取0 表示第j 列没有包含在解中;aij=1表示第j 列盖住了第i 行,aij=0 表示第j 列没有盖住第i 行.2 罚函数一般地,一个合适的罚函数对不可行点产生正的惩罚,对可行点不产生惩罚.问题(A)的罚项函数的定义如下:其中,,…,m},当xj为问题(A)的可行解时,p(x)=0.对所有x∈I,p(x)≥0.精确罚问题的定义为:其中,μ>0 为惩罚参数,称为罚因子.设,则f(x)=g(x)+μp(x).定理1 如果x*是问题(A)的最优解,且μ=g(x*),则x*是问题(P)的最优解.证明因为x*是问题(A)的最优解,所以也是问题(P)的可行解,故p(x*)=0,则f(x*)=g(x*)+μp(x*)=g(x*).对所有x∈I,有f(x)=g(x)+μp(x)=g(x)+g(x*)p(x).当p(x)≠0 时,,而aij,xj为0 或1,故,所以p(x)=1,f(x)=g(x)+g(x*)p(x)=g(x)+g(x*)>g(x*).当p(x)=0 时,x∈F,g(x)>g(x*),此时f(x)=g(x)>g(x*).综上可知,对所有x∈I,f(x)>f(x*),即x*是问题(P)的最优解.定理2 如果xμ*是问题(P)的最优解和问题(A)的可行解,则xμ*是问题(A)的最优解.证明根据定理2 的假设,有f(xμ*)=g(xμ*)+μp(xμ*)=g(xμ*)<f (x),∀x∈I,即g(xμ*)<g(x)+μp(x).则对∀x∈F,有g(xμ*)<g (x),即xμ*是问题(A)的最优解.3 邻域的概念在组合优化中,欧氏距离的概念通常不再适用.因此,需要重新定义邻域的概念.定义1 对∀x∈I,若集合N(x)={x,φi(x),i=1,…,n},则称N(x)为x 的邻域,其中φi(x)表示x 的第i 个分量为,其余分量不变.定义了邻域之后,类似连续函数,可以定义局部最优和全局最优.定义2 设x0∈I.若对∀x∈N(x0),有f(x)≥f(x0),则称x0为问题(P)的离散局部极小解;若对∀x∈I,有f(x)≥f(x0),则称x0为问题(P)的离散全局极小解.从上述定义可知,问题(P)的离散全局极小解也一定是问题(P)的离散局部极小解.本文通过邻域搜索算法求问题(P)的离散局部极小解,算法1 的具体步骤如下:1)取点x0∈I.2)若x0为问题(P)的离散局部极小解,停止;否则,取x∈N(x0),使f(x)<f (x0).3)令x0:=x,转步骤2).4 辅助函数及其性质上述邻域搜索算法找到的一般只是问题(P)的离散局部极小解,本文给出一个不同于文献[6]的辅助函数.此辅助函数和问题(P)有相同的离散全局极小解,设计一个算法,从一个初始点出发,极小化该辅助函数,来找问题(P)的比当前离散局部极小解更好的解.4.1 辅助函数假设x1*为问题(P)当前最好的离散局部极小解,且x0是问题(P)的离散局部极小解,使得f(x0)≥f(x1*).构造如下辅助函数:其中,k 为非负参数.在此范数“‖·‖”表示1-范数,即,构造以下辅助问题:4.2 辅助函数T(x,k)的性质类似于文献[6]中相关定理之证明,可以得出辅助函数T(x,k)相关的一些性质.定理3 若x0是问题(P)的离散局部极小解,且f(x0)≥f(x1*),则x0是问题(AP)的离散局部极小解.定理4 s1={x∈I:f(x)<f(x1*)},s2={x∈I:f(x)≥f(x1*)},对所有x∈s1,y∈s2,T(x,k)<T(y,k)成立.由定理4 可得:推论1 若x1*不是问题(P)的离散全局极小解,则s1={x∈I:f(x)<f(x1*)}≠Ø,且问题(AP)的所有离散全局极小解在集合s1中.定理5 假设x1*不是问题(P)的离散全局极小解,y∈s1={x∈I:f(x)<f(x1*)}.若y 是问题(AP)的离散局部极小解,则y 是问题(P)的离散局部极小解,反之成立.由推论1 和定理5 可得以下结论:推论2 若x1*不是问题(P)的离散全局极小解,则问题(P)和问题(AP)有相同的离散局部极小解和离散全局极小解.定理6对∀x=(x1,x2,…,xn)T∈I,若x≠x1*=(x11*,x12*,…,x1n*)T,且x1*∈I,那么存在y=(y1,y2,…,yn)T∈N(x),使得‖y-x1*‖<‖x-x1*‖.证明若x≠x1*,则存在j∈{1,2,…,n},使xj≠x1j*.令yi=xi,i=1,2,…,n(i≠j),则显然,y∈N(x).定理7 对于函数T(x,k),有以下结论:1)对∀x∈s2={x∈I:f(x)≥f(x1*)},若存在y∈N(x),使得f(y)<f(x1*),则x 不是问题(AP)的离散局部极小解.2)对∀x∈s2,x≠x1*,令若k>L(x),则x 不是问题(AP)的离散局部极小解.3)若,则对所有x∈s2,x≠x1*,x 不是问题(AP)的离散局部极小解.定理7 的结论2)和3)说明,当极小化函数T(x,k)时,若离散局部极小解一直在集合s2中,那么通过增加k 值,T(x,k)的极小解可以从离散局部极小解中跳出. 定理8 设z∈N(x),且f(x)>f(z)≥f(x1*),则T(z,k)<T(x,k).当且仅当下列条件之一成立:1)k=0;2)k>0 且‖z-x0‖≤‖x-x0‖;定理8 说明,若k 太大,那么在一些情况下T(x,k)的下降点不会在集合s2中.所以为了得到比x1*更小的离散局部极小解,当从一个初始点极小化T(x,k)时,k 值不能太大.但是定理7 又表明:要绕过当前的离散吸引区域时,k 必须足够大,这与定理8 矛盾了.因此,在减小T(x,k)时,应先取k=0,然后再慢慢增加k 值.5 动态凸化方法下面给出通过解问题(AP)来得到问题(P)的离散全局极小解的算法2.算法2 的步骤如下[6]:1)随机选一点x∈In,用算法1 减小f(x),得到问题(P)的一个离散局部极小解x1*.令N1为一个充分大的数,δk为一个正数.令Ν=0.2)选择一点x0∈In,使x0是问题(P)的一个离散局部极小解,且f(x)≥f(x1*),用k,x0,x1*构造函数T(x,k).3)令k=0,N=N+1.若N>Nl,则转到步骤6);否则随机找一点y∈In,转到步骤4).4)用算法1 从y 开始极小化T(x,k).假设x′是得到的一个离散局部极小解.若x′≠x0且f(x′)>f(x1*),则令k=k+δk,y=x′,重复步骤4);若x′=x0,则转到步骤3);若f(x′)<f(x1*),则转到步骤5).5)令x1*=x′,转到步骤2).6)停止.输出x1*和f(x1*),作为问题(P)的近似全局极小解和极小值.在此算法中,最初,令k=0,随机选一点x∈In,用算法1 从y 开始极小化T(x,k).若极小化的序列收敛于x′≠x0且f(x′)>f(x1*),则增加k 值,减少T(x,k)从x′开始.若此时极小化的序列收敛于x″≠x0且f(x″)>f(x1*),则由定理7,k 值太小了,增加k 值,极小化T(x,k)从x″开始,直到极小化的序列收敛于x0或{x∈I:f (x)<f(x1*)}中的一个点.若极小化的序列收敛于x0,重复以上过程.若极小化的序列收敛{x∈I:f(x)<f (x1*)}中的一个点,那么由定理7,已经找到问题(P)的比x1*小的离散局部极小点,留下x1*,重复以上过程.6 实验结果与分析对提出的算法,本文编写了程序,用OR-Library 中的第一个例子进行测试,这个实例中,列的代价cj是从1 到100 的整数中随机选出的,其中每行至少被两列覆盖.对实例运行15 次,得到的离散局部极小值为157.此实例用贪心算法求得的离散局部极小值为186.本文算法得到的结果比贪心算法得到的结果好,但是速度比贪心算法要慢.与其他算法相比,本文算法操作简便,容易理解.7 结论集合覆盖问题在实际生活中的应用非常广泛,因此,研究它的求解方法是非常有意义的.集合覆盖问题是一个约束最优化问题,本文用罚函数的方法,把约束吸收到目标函数中,通过求解该罚函数的无约束优化问题的最优解来得到原约束优化问题的最优解.构造了一个新的辅助函数,并证明了该辅助函数和集合覆盖问题有相同的离散全局极小解.本文用离散动态凸化方法来求解集合覆盖问题,该算法是一个近似算法,算法从一个随机初始点出发开始极小化辅助函数,使极小化序列逐渐逼近问题的最优解.参考文献:【相关文献】[1]EBALAS E,HO A.Set covering algorithms using cutting planes,heuristics and subgradient optimization:a computational study[J].Mathematical Programming,1980,12:37-60. [2]FISHER M.Optimal solution of set covering partitioning problems using dual heuristics[J].Management Science,1990,36:674-683.[3]BEASLEY J E,JORNSTEN K.Enhancing an algorithm for set coveringproblems[J].European Journal of Operational Research,1992,58:293-300.[4]JACOBSL,BRUSCOM.Alocal-search heuristic forlarge set covering problems[J].Naval Research Logistics,1995,42:1129-1140.[5]BEASLEY J E,CHU P C.A genetic algorithm for the set covering problem[J].European Journal of Operational Research,1996,94:392-400.[6]ZHU W X,FAN H.A discrete dynamic convexized method for nonlinear integer programming[J].Journal of Computational and Applied Mathematics,2009,223(1):356-373.。

一种求解最小集合覆盖问题近似解的组合优化方法

一种求解最小集合覆盖问题近似解的组合优化方法

一种求解最小集合覆盖问题近似解的组合优化方法专利名称:一种求解最小集合覆盖问题近似解的组合优化方法技术领域:本发明涉及一种求解最小集合覆盖问题近似解的组合优化方法,属于组合优化问题的求解技术领域。

背景技术:最小集合覆盖问题是一种抽象的组合优化问题。

该问题给出一系列元素和一系列集合,其中每个集合包含一个或者多个元素,并且每一个集合拥有一个权值。

最小集合覆盖问题即是要从这些集合中挑选一组集合,使得每一个元素至少出现在这一组集合中的某个集合中(即形成一个对所有元素的覆盖),并且要使得这一组集合的权值之和最小。

形式化地描述,有n个元素U= {1,2,. . .,n},和m个集合C = (S1, S2,, Sj,其中对于任意1=1,2,...,!11有友£队并且¥技)为集合SJA权值。

最小集合覆盖问题要寻找C的一个子集C*使得Esec*切⑷:最小,同时满足Usee* = 最小集合覆盖问题广泛存在于工业生产中,例如物流仓储的布局、基站的布局、故障诊断、分布式系统、无线传感器网络配置、调度等等。

然而由于最小集合覆盖问题为NP难问题,在极有可能成立的NP幸P的假设条件下,不存在解决该问题的高效的算法(即多项式时间内能够求解最优解的算法)。

目前工业应用上,用于处理类似NP难问题的方法主要为启发式搜索算法,包括模拟退火算法、演化算法、粒子群算法等,以期望取得较好的解。

然而这些算法对于取得的解过于随意,解的质量并没有任何保障,有可能获得很差的解从而导致应用中过大的成本开销等问题。

发明内容发明目的本发明主要针目前求解最小集合覆盖问题的启发式算法,缺乏对取得的解的质量的保障这一问题,提出一种求解最小集合覆盖问题近似解的组合优化方法,该方法令取得的解的集合权值之和除以最优解的集合权值之和为“近似率”,令k为所有集合的势的最大值,则该装置取得近似率SHk (取=Eti I)的解的期望步数为mn2,取得近似率为Hk - _的解的期望步数为mk+1n2。

算法设计及的分析计算题

算法设计及的分析计算题

《算法设计与分析》一、 排序和查找是经常遇到的问题。

按照要求完成以下各题:(1)对数组A={15,29,135,18,32,1,27,25,5},用快速排序方法将其排成递减序。

解:(1)第一步:15 29 135 18 32 1 27 25 5 第二步:29 135 18 32 27 25 15 1 5第三步:135 32 29 18 27 25 15 5 1 第四步:135 32 29 27 25 18 15 5 1(2)请描述递减数组进行二分搜索的基本思想,并给出非递归算法。

解:基本思想:首先将待搜索元素v 与数组的中间元素2n A ⎡⎤⎢⎥⎣⎦进行比较,如果2n v A ⎡⎤>⎢⎥⎣⎦,则在前半部分元素中搜索v ;若2n v A ⎡⎤=⎢⎥⎣⎦,则搜索成功;否则在后半部分数组中搜索v 。

非递归算法:输入:递减数组A[left:right],待搜索元素v 。

输出:v 在A 中的位置pos ,或者不在A 中的消息(-1)。

步骤:int BinarySearch(int A[],int left,int right,int v) {int mid;while (left<=right) {mid=int((left+right)/2); if (v==A[mid]) return mid;else if (v>A[mid]) right=mid-1; else left=mid+1; }return -1; }(3)给出上述算法的递归算法。

解:输入:递减数组A[left:right],待搜索元素v 。

输出:v 在A 中的位置pos ,或者不在A 中的消息(-1)。

步骤:【3分】int BinarySearch(int A[],int left,int right,int v) {int mid;if (left<=right){mid=int((left+right)/2); if (v==A[mid]) return mid;else if (v>A[mid]) return BinarySearch(A,left,mid-1,v); else return BinarySearch(A,mid+1,right,v); } elsereturn -1;}(4)使用上述算法对(1)所得到的结果搜索如下元素,并给出搜索过程:18,31,135。

高维空间球集覆盖问题的改进1+ε近似算法

高维空间球集覆盖问题的改进1+ε近似算法

高维空间球集覆盖问题是指在$d$ 维欧几里德空间中,找到最小数量的球集合,使得每个点都被至少一个球覆盖。

该问题的近似难度随着维度的增加而增加。

改进的1+ε近似算法可以在$O(dn^{1+\epsilon})$ 的时间内解决该问题,其中$\epsilon$ 是一个小于1 的常数,$n$ 是点集的大小。

算法的基本思想是将所有的点随机映射到一个低维空间,然后使用低维空间的球覆盖来近似原始空间中的球覆盖。

具体来说,算法包括以下步骤:
1.将所有点随机映射到一个$k$ 维空间,其中$k$ 是$d$ 的一个小于$\epsilon^{-1}\ln
n$ 的整数。

可以使用随机正交矩阵或哈希函数来实现随机映射。

2.在$k$ 维空间中找到最小数量的球集合,使得每个点都被至少一个球覆盖。

这个步骤
可以使用常规的贪心算法,例如选取最远点对并覆盖它们之间的所有点。

3.将每个球的半径扩展$\sqrt{\frac{d}{k}}$ 倍,以弥补由于随机映射引入的误差。

4.将每个球映射回原始空间,并将其半径缩小$\sqrt{d}$ 倍。

这个步骤可以通过将球的
中心点映射回原始空间,并将半径乘以$\sqrt{\frac{d}{k}}$ 来实现。

该算法的时间复杂度取决于$k$,通常情况下$k$ 可以选择为$O(\epsilon^{-1}\ln n)$,因此时间复杂度为$O(dn^{1+\epsilon})$。

需要注意的是,该算法仍然存在一些问题,例如它可能会忽略一些小的球,导致最终的覆盖率不够好。

因此,该算法通常只被用作球集覆盖问题的启发式方法。

算法设计与分析考点精讲串烧

算法设计与分析考点精讲串烧

一、选择题(每小题3分,共15分)1.算法与程序的主要区别在于算法具有()。

A.能行性 B.确定性 C.有限性 D.输入和输出答案:C。

2.对一个有序序列,以比较为基础的搜索算法的最坏情况时间复杂性的下界为()。

A.Ω(n) B.Ω(n2) C.Ω(n log n) D.Ω(log n)答案:D。

3.背包问题:n=6,C=10,V(1:6)=(15,59,21,30,60,5),W(1:6)=(1,5,2,3,6,1)。

该问题的最大价值为()。

A.101 B.110 C.115 D.120答案:C。

4.矩阵连乘积问题:M1(5×10), M2(10×4), M3(4×6)。

矩阵链乘M1M2M3需要的最少乘法次数为()。

A.348 B.328 C.720 D.320答案:D。

5.用贪心策略设计算法的关键是()。

A.将问题分解为多个子问题来分别处理 B.选好贪心策略C.获取各阶段间的递推关系式 D.满足最优性原理答案:B。

二、填空题(每小题4分,共20分)1.某算法的计算时间T(n)满足递归关系式:T(n)=2T(n-1)+O(1),n>1;T(1)=1。

则T(n)= 。

答案:2n-1。

2.用方法对状态空间树进行搜索时,每个结点有可能多次成为扩展结点。

3.子集和数问题一般陈述如下:已知n+1个正数:w i(1≤i≤n)和M,要求找出w i的和数是M 的所有子集。

其解可以表示为n-元组(x1, x2,⋯, x n),这里x i∈{0,1},1≤i≤n。

如果没有选择w i,则相应的x i=0;如果选择了w i,则x i=1。

此解空间的空间树上有个叶结点,共有个结点。

答案:2n,2n+1-1。

4.已知将两个分别包含n个和m个记录的已分类文件归并在一起得到一个分类文件需作n+m 次记录移动。

现有五个已分类文件F1,F2,F3,F4,F5,它们的记录个数分别为25,40,15,10,40,将这五个文件归并成一个分类文件需作次记录移动。

贪心算法之集合覆盖问题详解

贪心算法之集合覆盖问题详解

贪⼼算法之集合覆盖问题详解贪⼼算法之集合覆盖问题详解说明1. 贪⼼算法是指在对某⼀问题求解时,每⼀步都寻找最优解的⼀种思路2. 集合覆盖问题指有多个电台,每个电台都可以覆盖⼀定的区域,求可以覆盖所有地区的最⼩电台数量3. 使⽤贪⼼算法求得的解不⼀定是最优解,但是接近最优解4. 电台覆盖问题思路5. 先⽤集合记录要覆盖的所有区域,然后遍历每⼀个电台,将每⼀个电台能覆盖到的区域和所有的电台做交集处理,然后得到能覆盖最⼤区域的电台,将这个电台保存6. 下⼀次,将已经覆盖过的区域从集合中删除得到未覆盖区域的新的集合,然后再遍历所有的电台,寻找能覆盖区域最多的电台7. 不断重复前述步骤,直到所有的区域都被覆盖8. 此问题在寻找电台时,优先使⽤可以覆盖区域最多的电台,使⽤了贪⼼算法的思想9. 源码见下源码及分析package algorithm.algorithm.greedy;import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.Map;/*** @author AIMX_INFO* @version 1.0*/public class GreedyAlgorithm {public static void main(String[] args) {//创建键值对保存所有电台及其覆盖的区域HashMap<String, HashSet<String>> broadcasts = new HashMap<>();//创建每⼀个电台HashSet<String> hashSet1 = new HashSet<>();hashSet1.add("北京");hashSet1.add("上海");hashSet1.add("天津");HashSet<String> hashSet2 = new HashSet<>();hashSet2.add("⼴州");hashSet2.add("北京");hashSet2.add("深圳");HashSet<String> hashSet3 = new HashSet<>();hashSet3.add("成都");hashSet3.add("上海");hashSet3.add("杭州");HashSet<String> hashSet4 = new HashSet<>();hashSet4.add("上海");hashSet4.add("天津");HashSet<String> hashSet5 = new HashSet<>();hashSet5.add("杭州");hashSet5.add("⼤连");//添加所有电台broadcasts.put("K1",hashSet1);broadcasts.put("K2",hashSet2);broadcasts.put("K3",hashSet3);broadcasts.put("K4",hashSet4);broadcasts.put("K5",hashSet5);//电台要覆盖的所有地区HashSet<String> allAreas = new HashSet<>();for (Map.Entry<String, HashSet<String>> setEntry : broadcasts.entrySet()) {for (String area : setEntry.getValue()) {allAreas.add(area);}}//创建集合保存选择的电台ArrayList<String> selects = new ArrayList<>();//创建临时集合保存当前电台覆盖地区和所有未覆盖地区的交集HashSet<String> tmpSet = new HashSet<>();//定义maxKey保存包含最多未覆盖地区的电台String maxKey = null;//如果集合不为空,说明还要未覆盖的地区while (!allAreas.isEmpty()){maxKey = null;//取出每⼀个电台名字for (String key : broadcasts.keySet()) {tmpSet.clear();//拿到当前电台能覆盖的所有地区HashSet<String> area = broadcasts.get(key);//将这些地区添加到集合中tmpSet.addAll(area);//取tmpSet和allAreas集合的交集,将交集存储到tmpSettmpSet.retainAll(allAreas);//如果当前这个集合覆盖的区域⽐maxKey包含的区域多if (tmpSet.size() > 0 && (maxKey == null || tmpSet.size() > broadcasts.get(maxKey).size())){ maxKey = key;}}//每次遍历都将覆盖过的去掉if (maxKey != null){selects.add(maxKey);allAreas.removeAll(broadcasts.get(maxKey));}}System.out.println(selects);}}。

算法设计与分析:04 近似算法

算法设计与分析:04 近似算法
式性质,所以.(!)不大于2"#$%(!),即 2"#$%(!) ≥ .(!)
于是
2*+, ! > .(!) 所以
证毕。
.(!) *+,(!)
<
2
25
4.3
1 设!"(1 ≤ & ≤ ', ' ≥ 2)是'个相同处理机,有,个 - 相互独立的作业 1,2, … , , ,."(1 ≤ & ≤ ,)是每个作 近 业要求的处理时间。作业可以安排在任意一台处理
近 Error)是用于度量近似解和最优解间差异的较宽松的方式
似 q算法A的比值界!(#)(Ratio Bound)

max
() *+, )
,
*+, ()
)
≤ !(#)

l 总有比值界!(#) ≥ 1
q性能比(Performance Ratio)

§ 最小化问题

() *+, )
Байду номын сангаас

§ 最大化问题
*+, )
20
4.3
- q一个无向完全图如果满足三角不等式性质, - 即对∀", $, % ∈ ',有

( ", % ≤ ( ", $ + (($, %)
似 就可以得到e-近似算法。


21
TSP最优化问题 µ 具有三角不等式性质的!"#问题
证明:令$ = (', ))是有+个顶点的无向完全图,, -, . 是边 -, . ∈ )的代价。 构造图$0 = (', )),只是令该图中边上的权值,0 -, . = , -, . + 2。

近似算法

近似算法

近似算法1 近似算法所有已知的解决NP-难问题算法都有指数型运行时间。

但是,如果我们要找一个“好”解而非最优解,有时候多项式算法是存在的。

给定一个最小化问题和一个近似算法,我们按照如下方法评价算法:首先给出最优解的一个下界,然后把算法的运行结果与这个下界进行比较。

对于最大化问题,先给出一个上界然后把算法的运行结果与这个上界比较。

1.1最小顶点覆盖先来回忆一下顶点覆盖的定义,它是一个与图中所有边相关联的顶点集。

最小顶点覆盖问题是要找一个顶点数最少的顶点覆盖。

最小顶点覆盖的下界可以由最大匹配给出。

因为匹配中任两边不相邻,所以匹配中的每条边至少有一个顶点在顶点覆盖中。

而且,注意到在最大匹配中所有匹配顶点的集合就是一个顶点覆盖。

这是因为,任何一条两端点均未被匹配的边可以添加到匹配中,与匹配的最大性相矛盾。

显然,这个算法包含的顶点数是我们的下界,最大匹配的边数,的两倍。

因此,算法得到的值不会超过最优值的两倍。

我们感兴趣的两个问题是:相对于最优解,我们的下界到底有多“好”,而最后的解又有多“好”?首先来说明下界可能是最优值的两倍。

例如n条边的完全图,最大匹配有条边,所以我们的下界是。

但是,需要n-1个顶点来覆盖这个图。

因为任取一个n-2个顶点的集合,此图是完全图,在被删掉的两个顶点之间肯定存在一条边与选中的这n-2个顶点不关联。

N足够大时,我们有。

因此,比较算法与这个界,不可能有比最优值的2倍更好的下界了。

接下来比较算法的最后结果与最优解。

算法输出被最大匹配匹配的所有顶点。

考虑每部分有n个顶点的完全二分图,这个图存在完美匹配,因此算法输出每一个顶点,即2n个顶点。

但是最优顶点覆盖仅包含来自一边的n个顶点。

可以看出,算法的下界是紧的。

1.2 旅行售货员问题旅行售货员问题如下:给定一个完全图和一个定义在每条边上的距离函数,找一个长度最小的哈密顿圈。

注意,最小支撑树(MST)是最优解的一个下界。

因为如果有一条途径比MST更短,那么在此途径中删掉一条边,就可以得到更小的支撑树。

最小集合覆盖

最小集合覆盖

最小集合覆盖问题(MSCP )(1)含义:给定一个完全无向图G=(V ,E),其每一边(u,v)∈E 有一非负整数费用c(u,v)。

要找出G 的最小费用哈密顿回路。

最小集合覆盖问题的一个实例〈X,F 〉由一个有限集X 及X 的一个子集族F 组成。

子集族F 覆盖了有限集X 。

也就是说X 中每一元素至少属于F 中的一个子集,即X=F 。

对于F 中的一个子集C ,若C 中的X 的子集覆盖了X ,即X= C ,则称C 覆盖了X 。

集合覆盖问题就是要找出F 中覆盖X 的最小子集C*,使得且C 覆盖X}(2)含义:S 是一个集合,S1,S2,...,Sn 是S 的子集,且构成S 的覆盖,即1ni i S S ==,求最小覆盖问题。

(3)含义:最小集合覆盖问题是运筹学研究中的一个基本的组合优化问题,它通常描述成如下的一个覆盖问题:从一个m 行、n 列的0-1矩阵(a ij )mxn 中选出若干列盖住所有的行,使得付出的代价最小。

(4)缺点:1、具有很高的计算复杂度; 2、容易受局部最优解的影响;(5)应用领域:集合覆盖问题在现实生活和生产中有许多重要应用,如生产、投资决策以及项目选择,分子生物学,调度问题,信息检索、错误诊断和恢复。

集装线平衡,油轮行程安排及开关理论,电路设计,运输车辆路线安排。

. (6)求解方法:1、 运用DNA 粘贴模型求解步骤:考虑简单无向图G=(V ,E )的最小顶点覆盖问题,令顶点集V (G )={v 1,v 2,…,vn},边集E(G)={e 1,e 2,…, m e }。

最小顶点覆盖问题的DNA 算法为: 步骤1 对图G 的每个顶点进行DNA编码,生成图G的所有顶点的闭环DNA。

步骤2 以每条边为约束通过删除实验,在闭环DNA 上删除掉与边相关联的一个顶点。

m 次删除实验后,产生所有覆盖的补集。

步骤3 通过电泳实验,选择最长的闭环DNA ,产生最小覆盖的补集。

步骤4 检测实验结果,得到最小覆盖。

集合覆盖问题

集合覆盖问题

组合优化 ——集合覆盖问题摘要:不仅介绍了特殊地集合覆盖问题的贪婪算法和证明了该算法的多项式时间的近似比,而且介绍了一般地集合覆盖问题的贪婪算法和该算法的近似比。

然后,将集合覆盖应用到最短超字符串问题,并将该问题进行了推广。

关键词:集合覆盖、贪婪算法、最短超字符串问题 正文:问题1(特殊地集合覆盖):令U 为一有限集,由U 的子集构成的集族}S ,,S ,{S S k 21=,求S 的所含集合数目最少的子集族,他能覆盖U的所有元素。

定理1:贪婪算法1是集合覆盖问题的多项式时间)ln 1(γ+-近似算法。

其中γ表示S中所含元素数目最多的集合的势。

证明:令g S S S ,,,21 为贪婪算法按顺序挑选出来的集合。

令ij j i S C 1==,令OPT 表示为最小集合覆盖问题的最优解。

由贪婪准则,1+i S 是在所有剩余集合(除i S S S ,,,21 集合外)中能够最多覆盖未被i C 覆盖元素的集合。

未被i C 覆盖的元素数目为||||i C U -,而这些未被覆盖的元素被最优解中的所有集合覆盖,因此,最优解中平均每个集合可覆盖OPTC U i ||||-个未被覆盖的元素。

因此,OPTC U C C i i i ||||||||1-≥-+ 即,11)11(||)11|)(||(|||||++-≤--≤-i i i OPTU OPT C U C U 又因为,0,1≥≤--x e x x 则,O PT i i e S C U /)1(1||||||+-+≤-选择i 使得||||||||1i i C U OPT C U -≤<-+ 则有,OPT i g +≤, 且O PT i e U OPT /||-≤ 因此,)ln 1()||ln 1(γ+≤+≤OPT OPTU OPT g问题2(一般地集合覆盖):给定有n 个元素的全域U ,由U 的子集构成的集族}S ,,S ,{S S k 21 =,以及费用函数+→Q S c :,找S 的最小费用子集族,它能覆盖U 的所有元素。

第6章 近似算法

第6章  近似算法

一.顶点覆盖问题(Vertex-cover)的近似算法 顶点覆盖,顶点覆盖规模,最优顶点覆盖 虽然要求最优顶点覆盖是困难的,但求近似最 优顶点覆盖并不困难.
APPROX-VERTEX-COVER(G) 1 C ← φ 2 E’← E[G] 3 While E’≠ φ 4 Do let (u,v) be an arbitrary edge of E’ 5 C ← C ∪ {u,v} 6 Remove from E’every edge incident on either u or v 7 Return C
由于在第4步所选的边的两个顶点事先并 不出现在C中,因此,|C|=2|A|≤2|C*|.
二. 旅行商问题的近似算法 (The traveling-salesman problem) 给定完全无向图G=(V,E),成本函数 c:V×V → N, A E. c(A)= c(u, v) .
( u ,v )A
第六章 近似算法
内容提要
•近似算法,近似比 •顶点覆盖问题的近似算法 •旅行商问题的近似算法 •集合覆盖问题的近似算法
重点与难点
重点: •近似算法,近似比 •顶点覆盖问题的近似算法 •旅行商问题的近似算法 •集合覆盖问题的近似算法 难点:近似比的证明.
学习目的与要求
理解近似算法 , 近似比的概念 . 通过 学习顶点覆盖问题的近似算法,旅行 商问题的近似算法,集合覆盖问题的 近似算法的设计与分析,掌握近似比 的分析与证明方法.
三. 集合覆盖问题(The set-covering problem)
F={S1,S2,S3,S4,S5,S6}, 贪心解:C={S1,S4,S5,S3}.
集合覆盖问题的近似算法 GREEDY-SET-COVER(X,F) 1 U ← X 2 C ← φ 3 While U ≠ φ 4 do select a S∈F that maximizes |S∩U| 5 U ← U-S 6 C ← C∪{S} 7 return C

一类弱集合覆盖问题的近似算法

一类弱集合覆盖问题的近似算法

一类弱集合覆盖问题的近似算法
张涌;朱洪
【期刊名称】《计算机学报》
【年(卷),期】2005(028)009
【摘要】在近似算法领域,集合覆盖(Set Cover)是研究的比较早和比较透彻的问题之一.该文提出了一类与集合覆盖很相似的问题:集合击中和弱集合b -覆盖,并且给出了解决它们的近似算法,还证明了它们的不可近似性.
【总页数】4页(P1497-1500)
【作者】张涌;朱洪
【作者单位】复旦大学计算机科学与工程系智能信息处理实验室,上海,200433;复旦大学计算机科学与工程系智能信息处理实验室,上海,200433
【正文语种】中文
【中图分类】TP301
【相关文献】
1.一种求解带权集合覆盖问题的近似算法 [J], 张馨东;罗亮
2.一类弱支配集问题的近似算法 [J], 幸冬梅
3.边着色图上最大弱适当树问题近似算法 [J], 金世豪;陈光亭;陈永;张安
4.一类多目标最优控制问题的弱有效性和与广义弱鞍点(英文) [J], 刘海军;梁治安
5.一类广义线性多乘积问题的完全多项式时间近似算法 [J], 申培萍;王路凡
因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

cx
xS
k i 1
(ui1
ui ) | Si
(S1
1 S2
... Si1 ) |
• 注意到|Si - (S1∪S2∪···∪Si-1)|≥ |S - (S1∪S2∪···∪Si-1)| =ui-1,

因为贪心算法中对 元素。由此可得:
Si
的选择保证了Si比任意集合
S
覆盖更多的
cx
xS
k
(ui1
i 1
ui
)
1 ui1
10
集合覆盖近似度的证明(6)
• (6)由前式可得:
11
集合覆盖近似度的证明(7)
• Corollary 35.5 • GREEDY-SET-COVER is a polynomial-
time (ln |X|+ 1)-approximation algorithm. • Proof Use inequality (A.14) and Theorem
优解DS,近似度为(ln |X|+ 1)。 • (2)利用Steiner Tree算法将前面所得的
近似最优解DS连成一个连通的点集,即得 到一个较好的连通支配集CDS。
14
• 再见
再见
15
1 cx | Si (S1 S2 ... Si1 ) |
6
集合覆盖近似度的证明(2.2)
• 一个计算cx的示例。例如按顺序选择S1、S2、S3,则分 配给a、e、f、h的代价分别为1/4,分配给b、d、g的代价 为1/3,分配给c的代价为1。总代价∑cx为3。若按其它顺 序选择不同集合(如最优解的某个顺序),则cx可能会重 复,因此这种选择下的∑cx一定大于等于3。
• 分配给最优覆盖的代价为: cx SC*xS
• 由于每一个x∈X都至少在一个集合S∈C*中,因
此有:
cx cx
SC*xS
xX
• 将上面的两个不等式组合起来,有: | C | cx SC*xS 8
集合覆盖近似度的证明(4)
• (4)证明的余下部分关键在于以下的不等 式,稍后再对其进行证明。对属于F的任何
集合覆盖问题
• 许多问题如点覆盖,支配集等都是集合覆 盖问题的特例。
X a b c d e f g h
S1 1
11
1
S 2
1
1
1 1
S3
1
1
S4 1
1
1 1
S5 1
1
S 6
11
1
1
集合覆盖问题
• Set-Cover • 下图中,F={S1, S2, S3, S4, S5, S6},一
个最小的集合覆盖为C={S3, S4, S5}。可用 矩阵表示每个子集能覆盖的元素个数。
集合S,有: cx H (| S |) xS
• 根据前面的式子可得:
| C | H (| S |) | C* | H (max{| S |: S F}) SC*
9
集合覆盖近似度的证明(5)

((S设S并S中251k且,∪).仍为.S.S,考中未使S2 虑k共被∪u中k任有覆·=的··意u盖∪0某i-的集1的S一-i最)合元|u个为小iS素个所∈下贪的元覆F标心个,素盖,集数和首。因合。i次对=此覆被定于1S盖,S义i 2中算=i所,u的1法.覆.0,.,每选=2盖|,C|一择S.。|.。.|个,于S为k设元1,是,S:S素中有有2u,至元i:u.=.少i.素-,1|SS被≥的i-uS后个i,1,,数。
X a b c d e f g h
cx
1/ 4 1/ 3 1 1/ 3 1/ 4 1/ 4 1/ 3 1/ 4
S1 1
11
1
S 2
1
1
1
1
S3 S4 1
1 1
1
1 1
S5 1
1
S 6
1
1
1

7
集合覆盖近似度的证明(3)
• (3)在算法的每一步中,要产生1个代价,因此
有: | C | cx xX
35.4.
12
集合覆盖近似算法思考题
• Exercises 35.3-4 • Show that the following weaker form of
Theorem 35.4 is trivially true:
| C || C* | max{| S |: S F}
13
集合覆盖的应用
• 求连通支配集 • (1)用GSC算法求得一个支配集的近似最
5
集合覆盖近似度的证明(2.1)
• (2)设Si表示由GSC算法所选出的第i个子 集;在将Si加入C时要产生代价1。将这个 选择Si的代价平均分布于首次被Si覆盖的元 素之上。设cx表示分配给元素x的代价, x∈X。对每一个元素只分配一次代价,即 当它首次被覆盖时分配一个代价。如果x首 次被Si覆盖,则有:
2
Greedy-Set-Cover近似算法
• 在每一阶段都选出能覆盖最多的,未被覆
盖的元素的集合S。 X a b c d e f g h
S1 1
S 2
1
11
1
1
1 1
S3 S4 1
1 1
1
1 1
S5 1
1
S 6
11
1
3
GSC的近似度
• Theorem 35.4 • GREEDY-SET-COVER 是一个多项式时间
的ρ(n)-近似算法,其中
(n) H (max{|S |: S F})
• Corollary 35.5 • GREEDY-SET-COVER是一个多项式时间
的 (ln |X|+ 1)-近似算法。
4
集合覆盖近似度的证明(1)
• 证明: • (1)为了证明其是一个ρ(n)-近似算法,对
每一个由该算法选出的集合赋予一个代价1, 将这一代价平分到初次被覆盖的元素上, 在利用这些代价来导出一个最优集合覆盖 C*的规模和由该算法得到的集合覆盖C的规 模之间的关系。
相关文档
最新文档