第9章 近似算法1_第1页
第9章 近似算法1_第2页
第9章 近似算法1_第3页
第9章 近似算法1_第4页
第9章 近似算法1_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第9章 近似算法2 迄今为止,所有的NP完全问题都还没有多项式时间算法。对于这类问题,通常可采取以下几种解题策略。(1)只对问题的特殊实例求解(2)用动态规划法或分支限界法求解 (3)用概率算法求解 (4)只求近似解(5)用启发式方法求解 9 NP完全问题的近似算法3n放弃寻求在多项式时间解决NP难问题n复杂度为指数级的算法仍存在改进空间 亚指数时间复杂度的算法。如n近似解:不要求解决优化问题P的算法一定产生最优解,但一定要产生一个与最优解非常相近的可行解。n得到问题P的近似解的算法称为问题P的近似算法。9 NP完全问题的近似算法49.1 近似算法的性能许多NP完全问题实质上是最优化问题。

2、若一个最优化问题的最优值为 c*,求解该问题的一个近似算法求得的近似最优解相应的目标函数值为 c,则将该近似算法的性能比近似算法的性能比定义为= 在通常情况下,该性能比是问题输入规模n的一个函数(n),即 (n)。cccc*,*maxcccc*,*max59.1 近似算法的性能近似算法的性能比近似算法的性能比定义适用于极小化问题和极大化问题。 对于一个极大化问题,0 c c*, 性能比表示最优值 c*比近似最优值 c 大多少倍。 对于一个极小化问题,00时,有|c*-c|/c* (n)定义3:近似算法是一个(n)近似算法,且对于常数,有(n) 定义4:A()是一个近似方案,当且仅当对于每个给定

3、的0和问题实例I, A()可产生一个满足|c*-c|/c* 的可行解,其中c*0.99.1 近似算法的性能定义5:一个近似方案是多项式时间近似方案,当且仅当对于任意固定的0,计算时间是问题规模的多项式时间.定义6:计算时间是问题规模和1/的多项式时间的近似方案是完全多项式时间近似方案.10例:背包问题:n=3,m=100,p1,p2,p3=20,10,19w1,w2,w3=65,20,35解 1,1,1 X 1,0,1最优解c* 1,1,0次优解c |c*-c|=9, |c*-c|/c*=0.3 对于所有实例I, 不存在常数k,使得|c*-c|k, 所以该近似算法不是绝对近似算法。9.1 近似

4、算法的性能平面图着色的例子n目前已知极少NP难的优化问题具有多项式时间绝对近似算法。其中之一是确定平面图形所需的最小着色数。Int Acolor(V,E) if (V=EMPTY) return 0; else if(E=EMPTY) return 1; else if( G is bipartite ) return 2; else return 4;1112平面图着色的例子 绝对近似算法的性能比为常数 确定平面图形G=(V,E)所需要的最小着色数。每个平面都是4可着色的。V=,图是0可着色的E =,图是1可着色的算法的复杂度为(|V|+|E|)最多程序存储问题nn 个程序和2 个存储设备。

5、nli 表示第i个程序所需要的存储空间,L表示每个存储设备的容量。void PStore (int l,int n, int L) /li=li+1 int i=1; for (int j=1;j=2,j+) int sum =0; while (sum+li)n) return; 13例: L=10,n=4,(l1,l2,l3,l4)=(2,4,5,6)近似解:l1,l2,L1; l3L2最优解:l1,l4L1; l2,l3L2定理:令 I 是多程序存储问题的实例,c*(I)为能存储在容量均为L的2个设备上的最大程序数,c(I)为PStore得到的存储程序数,那么|c*(I)-c(I)|=c

6、*(I), and令j是使 成立的最大取值,显然j=p-1, |c*(I)-c(I)|1,不存在性能比为的解旅行售货员问题的多项式时间近似算法。 cc*证明(反证法):假设存在一个近似算法A和常数,该算法可以用来在多项式时间内对哈密顿回路问题求解。322 一般一般的的旅行售货员问题旅行售货员问题首先把哈密顿回路问题转化为旅行商问题。设G是一个有n个顶点的任意图,G的每一条边赋予权重1G - G ,G为一个完全加权图任何两个无邻接的顶点之间加一条权重为n+1的边。如果G有一个哈密顿回路,它在G中的长度为n;即cc* 如果G不存在一个哈密顿回路,则G中的最短路径至少包含一条权重为n+1的边,因此:

7、c=(n+1)+(n-1) c*339.4 0-1背包问题的近似算法物品重量w价值p价值/重量1440102742635255431240-1背包问题的贪婪算法:1 对于给定的物品,计算价值重量比ri=vi/wi,i=1,2,n。2 按比率的降序,对物品排序。3 如果列表中的当前物品能够装入背包,装入;否则处理下一个。例:背包的承重量W等于10,解:4,5,(最优解)349.4 0-1背包问题的近似算法物品重量w价值p价值/重量11222ww1例:背包的承重量W2,解:1Sa: 2S*: w P(n)= Sa/ S* =w/2 没有上界贪婪算法不是总能产生一个最优解!增强贪婪算法:只包含具有最

8、大价值、并能够装进背包的单个物品。 =235连续背包问题的贪婪算法物品重量w价值p价值/重量144010274263525543124连续背包问题的贪婪算法:1 对于给定的物品,计算价值重量比ri=vi/wi,i=1,2,n。2 按比率的降序,对物品排序。3 如果列表中的当前物品能够装入背包,装入并处理下一个。否则取出它能够装满背包的最大部分。36近似方案0-1背包问题存在一些多项式时间的近似方案,它们都是用参数来调节的系列算法,可以得到满足任意预定义精度的近似解Sak:对于任何规模为n的实例来说,c(Sak)/ c(S*) 1+1/k379.5 集合覆盖问题的近似算法 集合覆盖问题是一个最优

9、化问题。集合覆盖问题的一个实例X,F由一个有限集X及 X 的一个子集族 F 组成。子集族 F 覆盖了有限集X。也就是说 X中每一元素至少属于F中的一个子集,即X= 。对于F 中的一个子集CF,若C中的X的子集覆盖了X,即X= ,则称C覆盖了X。集合覆盖问题就是要找出F中覆盖X的最小子集C*,使得 |C*|=min |C|C F 且C覆盖X FSSFSS389.5 集合覆盖问题的近似算法集合覆盖问题举例:用用1212个黑点表示集个黑点表示集合合X X。F=S1,S2,S3,S4,SF=S1,S2,S3,S4,S5,S6,5,S6,,如图所示。,如图所示。容易看出,对于这容易看出,对于这个例子,最

10、小集合个例子,最小集合覆盖为:覆盖为:C=S3,S4,S5,C=S3,S4,S5,。 399.5 集合覆盖问题的近似算法集合覆盖问题近似算法贪心算法 算法的循环体最多算法的循环体最多执行执行min|X|min|X|,|F|F|次。次。而循环体内的计算显然而循环体内的计算显然可在可在O(|X|F|)O(|X|F|)时间内完时间内完成。因此,算法的计算成。因此,算法的计算时间为时间为O(|X|F|min|X|O(|X|F|min|X|,|F|)|F|)。由此即知,该算。由此即知,该算法是一个多项式时间算法是一个多项式时间算法。法。 Set greedySetCover (X,F) U=X; C=;

11、 while (U !=) 选择F中使|SU|最大的子集S; U=U-S; C=CS; return C; 解:c=s1,s3,s4,s5409.6 子集和问题的近似算法 问题描述:设子集和问题的一个实例为S,t。其中,S=x1,x2,xn是一个正整数的集合,t是一个正整数。子集和问题判定是否存在S的一个子集S1,使得:txSx1411 子集和问题的指数时间算法int exactSubsetSum (S,t) int n=|S|; L0=0; for (int i=1;i=n;i+) Li=mergeLists(Li-1,Li-1+Si); 删去Li中超过t的元素; return max(Ln

12、);算法以集合算法以集合S=xS=x1 1,x x2 2,x xn n 和目标和目标值值t t作为输入。算法作为输入。算法中用到将中用到将2 2个有序表个有序表L1L1和和L2L2合并成为一合并成为一个新的有序表的算个新的有序表的算法法mergeListsmergeLists(L1,L2)(L1,L2)。 421 子集和问题的指数时间算法Pi: x1,x2,xi 的所有可能的子集和,即Pi中的一个元素是 x1,x2,xi 的一个子集和。P0=0Pi=Pi-1(Pi-1+xi),i=1,2,, n| Pi |=2i例子:S=1,4,5 P0=0 P1=0,1 P2=0,1,4,5 P3=0,1,

13、4,5,6,9,10432 子集和问题的完全多项式时间近似方案 基于算法exactSubsetSum,通过对表Li作适当的修整建立一个子集和问题的完全多项式时间近似方完全多项式时间近似方案案。 在对表Li进行修整时,用到一个修整参数,01。用参数修整一个表L是指从L中删去尽可能多的元素,使得每一个从L中删去的元素y,都有一个修整后的表L1中的元素z满足(1-)yzy。可以将z看作是被删去元素y在修整后的新表L1中的代表。相相对于y的相对误差不超过。442 子集和问题的完全多项式时间近似方案 例子:例子:若=0.1,且L=10,11,12,15,20,21,22,23,24,29,则用对L进行修

14、整后得到:L1=10,12,15,20,23,29。其中被删去的数:11由10来代表,21和22由20来代表,24由23来代表。 452 子集和问题的完全多项式时间近似方案对有序表L修整算法List trim(L,) int m=|L|; L1=L1; int last=L1; for (int i=2;i=m;i+) if (last(1-)*Li) 将Li加入表L1的尾部; last=Li; return L1; 子集和问题近似方案int approxSubsetSum(S,t,) n=|S|; L0=0; for (int i=1;i=n;i+) Li=Merge-Lists(Li-1,

15、Li-1+Si); Li=Trim(Li,/n); 删去Li中超过t的元素; return max(Ln); 46例子:S=, t=308, =0.2, = /n=0.05L1=L1=L1=L2=L2=L2=L3=L3=L3=L4=L4=L4= c*=104+102+101=30747算法 approxSubsetSum性能分析:1. 算法的近似解是S的一个子集和,它关于最优解的相对误差不超过预先给定的误差界 。2. 算法的计算时间是关于输入规模 n 和1/的多项式。3. 算法approxSubsetSum的计算时间为O(n2/ )4. 是一个完全多项式时间近似格式489.7 独立任务的调度

16、近似问题:在m(m2)个相同的机器上对n个任务实现最小完成时间调度。一个非常简单的调度规则可以产生完成时间与最优调度非常接近的调度。定义:LPT调度(最长处理时间):只要机器处于空闲状态就为其分配一个任务,该任务是所有未分配任务中执行时间最长的,若两个任务的执行时间的长度一样,可采用任意的方式解决。499.7 独立任务的调度例子:m=3, n=6,(t1,t2,t3,t4,t5,t6)=(8,7,6,5,4,3)LPT调度P116P225P3346 7 8 11该调度为最优调度。c*=ti/3=11509.7 独立任务的调度例子:m=3,n=7,(t1,t2,t3,t4,t5,t6,t7)=(

17、5,5,4,4,3,3,3)LPT调度: 最优调度:P1157P226P3344 5 8 11 |c*-c|/c*=(11-9)/9=2/9LPT调度不总产生最优解。P113P224P3567 5 9 519.7 独立任务的调度定理:(Graham)在任务调度问题中,设实例I的最优m机器调度的完成时间是F*(I),该实例的LPT调度的完成时间是F(I),则有:|F*(I)- F(I)|/ F*(I)1/3-1/3m该定理建立了任务调度的LPT规则,它是1/3-1/3m近似规则。 1/3-1/3m是LPT规则在最坏情况下的界52例子:n=2m+1, ti= 2m - (i+1)/2, i=1,2

18、,2mLPT调度: 最优调度:Pm-2m-2m+3Pm-1m-1m+2Pmmm+1. 当m=10,最坏情况下的误差界为0.3Pm-2m-2m+1Pm-1m-1mPm2m-12m2m+1P112m2m+1P222m-1P332m-2 3m-1 4m-1 P112m-2P222m-3P332m-4 3m539.7 独立任务的调度 多项式时间近似方案对于 m 个机器调度 n 个任务的问题,可以利用LPT规则得到一个(1/3-1/3m)近似算法。这一问题还存在一个多项式时间近似方案,该方案依赖于以下调度规则:(1)令k为一个指定的固定整数(2)获取k个最长任务的最优调度(3)利用LPT规则对剩下的n-k个任务进行调度54 例子: m=2,n=6, (t1,t2,t3,t4,t5,t6)=(8,6,5,4,4,1),k=44个任务的最优调度 所有任务的调度 所有任务的最优调度1423最长的4个任务的最优调度时间为12,剩下任务用LPT规则c=15, c*=14121462351512345614559.7 独立任务的调度定理:(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论