近似算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第11章 近似算法
11.1 概 述
11.2 图问题中的近似算法
11.3 组合问题中的近似算法 11.4 实验项目——TSP问题的近似算法
11.1 概 述
11.1.1 近似算法的设计思想
11.1.2 近似算法的性能
11.1.1 近似算法的设计思想
许多难解问题实质上是最优化问题,即要求在满足约 束条件的前提下,使某个目标函数达到最大值或最小值的 解。在这类问题中,求得最优解往往需要付出极大的代价。 在现实世界中,很多问题的输入数据是用测量方法获 得的,而测量的数据本身就存在着一定程度的误差,因此, 输入数据是近似的。同时,很多问题的解允许有一定程度 的误差,只要给出的解是合理的、可接受的,近似最优解 常常就能满足实际问题的需要。此外,采用近似算法可以 在很短的时间内得到问题的近似解,所以,近似算法是求 解难解问题的一个可行的方法。
算法11.1可以用邻接表的形式存储无向图,由于算法中 对每条边只进行一次删除操作,设图G含有n个顶点e条边, 则算法11.1的时间复杂性为O(n+e)。
下面考察算法11.1的近似比。若用A表示算法在步骤 3.1中选取的边的集合,则A中任何两条边没有公共顶点。 因为算法选取了一条边,并在将其顶点加入顶点覆盖后, 就将E'中与该边的两个顶点相关联的所有边从E'中删除, 因此,下一次再选取的边就与该边没有公共顶点。由数 学归纳法易知,A中的所有边均没有公共顶点。算法结 束时,顶点覆盖中的顶点数|V'|=2|A|。另一方面,图G的 任一顶点覆盖一定包含A中各边的至少一个端点,因此, 若最小顶点覆盖为V*,则|V*|≥|A|。由此可得, |V'|≤2|V*|,即算法11.1的近似比为2。
图11.2 TSP问题的近似算法求解示例
算法11.2——满足三角不等式的TSP问题 1.在图中任选一个顶点v; 2.采用Prim算法生成以顶点v为根结点的最小生成树T; 3.对生成树T从顶点v出发进行深度优先遍历,得到遍历序列L; 4.根据L得到图G的哈密顿回路;
算法11.2的时间主要耗费在采用Prim算法构造最小生成 树,因此,其时间复杂性为O(n2)。 下面考察算法11.2的近似比。设满足三角不等式的无向 图G的最短哈密顿回路为H*,W(H*)是H*的代价之和;T是 由Prim算法求得的最小生成树,W(T)是T的代价之和;H是 由算法11.2得到的近似解,也是图G的一个哈密顿回路, W(H)是H的代价之和。因为图G的任意一个哈密顿回路删 去一条边,构成图G的一个生成树,所以,有 W(T)≤W(H*)
c(i, j)+c(j, k)≥c(i, k)
事实上,很多以TSP问题为背景的应用问题,如交通、 航线、机械加工等应用问题,顶点之间的代价都满足三角不 等式。 可以证明,满足三角不等式的TSP问题仍为NP难问题,
但是,可以设计一个近似算法,其近似比为2。图11.2(a) 给出了一个满足三角不等式的无向图,图中方格的边长为1。 求解TSP问题的近似算法首先采用Prim算法生成图的最小生 成树 T ,如图(b)所示,图中粗线表示最小生成树中的边, 然 后 对 T 进 行 深 度 优 先 遍 历 , 经 过 的 路 线 为 a→b→c→b→h→b→a→d→e→f→e→g→e→d→a ,得 到 遍 历序列L=(a, b, c, h, d, e, f, g),由序列L得到哈密顿 回 路 , 即 近 似 最 优 解 , 如 图 (d) 所 示 , 其 路 径 长 度 约 为 19.074 , 图 (e) 所 示 是 (a) 的 最 优 解 , 其 路 径 长 度 约 为 16.084。
11.2.2 TSP问题
TSP问题是指旅行家要旅行n个城市,要求各个城市经历 且仅经历一次然后回到出发城市,并要求所走的路程最短。 如 果 无 向 图 G=(V, E) 的 顶 点 在 一 个 平 面 上 , 边 (i, j)∈E的代价c(i, j)均为非负整数,且两个顶点之间的距离 为欧几里德距离(Euclidean Distance),则对图G的任意3 个顶点i, j, k∈V,显然满足如下三角不等式:
11.2 图问题中的近似算法
11.2.1 顶点覆盖问题 11.2.2 TSP问题
11.2.1 顶点覆盖问题
无向图G=(V, E)的顶点覆盖是顶点集V的一个子集V 'V,使得若(u, v)是G的一条边,则v∈V'或u∈V'。顶点覆 盖V'的大小是它所包含的顶点个数|V'|。顶点覆盖问题是求 出图G中的最小顶点覆盖,即含有顶点数最少的顶点覆盖。
c*
则称ε(n)为该近似算法的相对误差界(Relative Error Bound)。近似算法的近似比ρ(n)与相对误差界ε(n)之间显然 有如下关系: (n) (n) 1 有许多问题的近似算法具有固定的近似比和相对误差界, 即ρ(n)和ε(n)不随着问题规模n的变化而变化,在这种情况下, 用ρ和ε来表示近似比和相对误差界。还有许多问题的近似算 法没有固定的近似比,即近似比ρ(n)随着问题规模n的增长 而增长,换言之,问题规模n越大,近似算法求出的近似最 优解与最优解相差得就越多。 对有些难解问题,可以找到这样的近似算法,其近似 比可以通过增加计算量来改进,也就是说,在计算量和解 的精确度之间有一个折衷,较少的计算量得到较粗糙的近 似解,而较多的计算量可以得到较精确的近似解。
a
d
b
e
c
f
d
e
f
(d) V '={a, b, c, f, d, e} 删除与d或e相关联的边
(e) 近似最小顶点覆盖 V '={a, b, c, f, d, e}
(f) 最小顶点覆盖 V '={a, b, c, e}
图11.1 最小覆盖问题的近似算法求解过程
假设无向图G中n个顶点的编号为0~n-1,顶点覆盖问 题的近似算法如下:
a b c h
d e f g c
a b h
d e f g 3 c
1 2
5 a b 7 d e f 6 g 8
4
h
(a) 图G的顶点 a b c h d
(b) 生成最小生成树T a e f g c
(c) 对T进行深度优先遍历 d
e b
h (e) TSP问题的最优解 f g
(d) 由遍历序列产生哈密顿回路
设算法11.2中深度优先遍历生成树T得到的路线为R,则 R中对于T的每条边都经过两次,所以,有:
W(R)=2W(T)
算法11.2得到的近似解H是R删除了若干中间点(不是 第一次出现的顶点)得到的,每删除一个顶点恰好是用三 角形的一条边取代另外两条边。例如,在图11.2中,遍历生 成 树 的 路 线 为 a→b→c→b→h→b→a→d→e→f→e→g→e→d→a,删除第2 次出现的顶点b,相当于用边(c, h)取代另外两条边(c, b)和(b, h)。由三角不等式可知,这种取代不会增加总代价,所以, 有 W(H)≤W(R) 从而 W(H)≤2W(H*) 由此,算法11.2的近似比为2。
首次适宜法首先将所有的箱子初始化为空,然后依次wenku.baidu.com
取每一个物品,将该物品装入第一个能容纳它的箱子中。 例如,有10个物品,其体积分别为S=(4, 2, 7, 3, 5, 4, 2, 3, 6, 2),若干个容量为10的箱子,采用首次适宜 法得到的装箱结果如图11.3所示。
0.3(s4) 0.2(s2) 0.4(s1) (a) 箱子1 (b) 箱子2 0.2(s7) 0.7(s3)
11.3 组合问题中的近似算法
11.3.1 装箱问题 11.3.2 子集和问题
11.3.1
装箱问题
设有n个物品和若干个容量为C的箱子,n个物品的体 积分别为{s1, s2, …, sn},且有si≤C(1≤i≤n),把所有 物品分别装入箱子,求占用箱子数最少的装箱方案。 最优装箱方案可以通过把 n个物品划分为若干子集, 每个子集的体积和小于C,然后取子集个数最少的划分方 案。但是,这种划分可能的方案数有(n/2)n/2 种,在多项 式时间内不能够保证找到最优装箱方案。 大多数装箱问题的近似算法采用贪心策略,即在每个 物品装箱时规定一种局部选择方法。下面介绍4种不同的 求解装箱问题的近似算法。 1.首次适宜法(First Fit)
c* c
有时用相对误差表示一个近似算法的近似程度会更方便 些。若一个最优化问题的最优值为c*,求解该问题的一个近 似算法求得的近似最优值为c,则该近似算法的相对误差 (Relative Error)λ定义为: c c*

c*
近似算法的相对误差总是非负的,它表示一个近似最优 解与最优解相差的程度。若问题的输入规模为n,存在一个 c c* ( n) 函数ε(n),使得
即使某个问题存在有效算法,好的近似算法也会发挥作 用。因为待求解问题的实例是不确定的,或者在一定程度上 是不准确的,如果使用近似算法造成的误差比不精确的数据 带来的误差小,并且近似算法远比精确算法高效,那么,出 于实用的目的,当然更愿意选择近似算法了。 近似算法的基本思想是用近似最优解代替最优解,以换 取算法设计上的简化和时间复杂性的降低。近似算法是这样 一个过程:虽然它可能找不到一个最优解,但它总会为待求 解的问题提供一个解。为了具有实用性,近似算法必须能够 给出算法所产生的解与最优解之间的差别或者比例的一个界 限,它保证任意一个实例的近似最优解与最优解之间相差的 程度。显然,这个差别越小,近似算法越具有实用性。
0.4(s6)
0.5(s5) (c) 箱子3
0.6(s9) 0.3(s8) (d) 箱子4 0.2(s10) (e) 箱子5
算法11.1——顶点覆盖问题 1.for (i=0; i<n; i++) //顶点覆盖初始化为空 x[i]=0; 2.E'=E; 3.循环直到E'为空 3.1 从E'中任取一条边(u, v); 3.2 x[u]=1; x[v]=1; //将顶点u和v加入顶点覆盖中 3.3 从E'中删去与u和v相关联的所有边;
max{
c c* , } c* c
在通常情况下,该性能比是问题输入规模n的一个函数 c c* ρ(n),即: max{ , } (n) 这个定义对于最大化问题和最小化问题都是适用的。对 于一个最大化问题,c≤c*,此时近似算法的近似比表示最优 值c*比近似最优值c大多少倍;对于一个最小化问题,c*≤c, 此时近似算法的近似比表示近似最优值c比最优值c*大多少倍。 所以,近似算法的近似比η不会小于1,近似算法的近似比越 大,它求出的近似解就越差。显然,一个能求得最优解的近 似算法,其近似比为1。
顶点覆盖问题是一个NP难问题,因此,没有一个多项 式时间算法有效地求解。虽然要找到图G的一个最小顶点 覆盖是很困难的,但要找到图G的一个近似最小覆盖却很 容易。可以采用如下策略:初始时边集E'={ },顶点集 V'={ },每次从边集E'中任取一条边(u, v),把顶点u和v加入 到顶点集V'中,再把与u和v顶点相邻接的所有边从边集E'中 删除,直到边集E'为空。显然,最后得到的顶点集V'是无向 图的一个顶点覆盖,由于每次把尽量多的相邻边从边集E'
11.1.2 近似算法的性能
衡量近似算法性能最重要的标准有两个:
(1)算法的时间复杂性:近似算法的时间复杂性必须是多 项式阶的,这是设计近似算法的基本目标;
(2)解的近似程度:近似最优解的近似程度也是设计近似 算法的重要目标。近似程度可能与近似算法本身、问题规 模,乃至不同的输入实例都有关。 不失一般性,假设近似算法求解的是最优化问题,且 对于一个确定的最优化问题,每一个可行解所对应的目标 函数值均为正数。 若一个最优化问题的最优值为 c*,求解该问题的一个 近似算法求得的近似最优值为c,则将该近似算法的近似比 (Approximate Ratio)η 定义为:
中删除,可以期望V'中的顶点数尽量少,但不能保证V'中的 顶点数最少。图11.1中给出了一个顶点覆盖问题的近似算法 求解过程。
g g g c
a
d
b
e
c
f
a
b
a
d
b
e
c
f
d
e
f
(a) 一个无向图 g a d b e c f
(b) V '={a, b} 删除与a或b相关联的边 g a b c
(c) V '={a, b, c, f} 删除与c或f相关联的边 g
相关文档
最新文档