ImageVerifierCode 换一换
格式:PPTX , 页数:148 ,大小:1.17MB ,
资源ID:1093914      下载积分:15 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1093914.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第6篇 分支限界法.pptx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第6篇 分支限界法.pptx

1、第6章 分枝-限界法,1,学习要点,理解分支限界法的剪枝搜索策略。掌握分支限界法的算法框架队列式(FIFO)分支限界法优先队列式分支限界法通过应用范例学习分支限界法的设计策略。单源最短路径问题装载问题;布线问题(4)0-1背包问题;最大团问题;旅行售货员问题电路板排列问题批处理作业调度问题,2,6.1分支限界法的基本思想,3,分支限界法与回溯法(1)求解目标:回溯法的求解目标是找出解空 间树中满足约束条件的所有解,而分支限界法 的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下 的最优解。(2)搜索方式的不同:回溯法以深度优先的方 式搜索解空间树,而分支限界法则以

2、广度优先 或以最小耗费优先的方式搜索解空间树。,6.1分支限界法的基本思想,4,分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机 会成为扩展结点。活结点一旦成为扩展结点,就 一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。此后,从活结点表中取下一结点成为当前扩 展结点,并重复上述结点扩展过程。这个过程一 直持续到找到所需的解或活结点表为空时为止。,6.1分支限界法的基本思想,5,两类常用的方法选择下一个E-结点:先进先出(FIFO):从活结点表中取出结点 的顺

3、序与加入结点的顺序相同。后进先出(LIFO):从活结点表中取出结点 的顺序与加入结点的顺序相反。优先队列式分支限界法按照优先队列中规定的优先级选取优先级 最高的节点成为当前扩展节点。,堆(Heap),优先级队列每次出队列的是优先权最高的元素优先级队列支持以下操作:找出一个具有最高优先级的元素 删除一个具有最高优先级的元素 添加一个元素到集合中,6,完全二叉树 数组表示,Ki K2i+1,&,K Ki2i+2,完全二叉树 数组表示,Ki K2i+1,&,K Ki2i+2,堆的定义,09,87,87,78,45650931,4578,65,5331,23,53,1723,17,自下向上逐步调整为最

4、小堆,将一组用数组存放的任意数据调整成堆,17781778,09,i,23,2345658709456587,5353i,8,53,53,17,17,23,094578,65,87,i,09,23,4578,65,87,i,9,53,09,23,174578,65,87,i,09,23,65,87,i,5309174578,10,53,17,17,09,4578,65,87,09,234578,65,87,i,11,i531723,53,17,23,4578,6517,87,i,4578,65,87,j,11,在堆中插入新元素11,53,j,11 23,23,09i09,最小堆的向上调整,12

5、,53,11,09,4578,65,87,09,174578,65,87,j11 17,53,23,i,23,17,j,i,13,53,11,23,65,31457887,在堆中删除根元素09,53,11,23,65,31457887,09,53,11,09,314578,65,87,23,14,53,23,11,314578,65,87,在堆中删除根元素09,53,15,23,11,314578,65,87,例1:,c=30,n=3时的0-1背包问题,w=20,15,15p=40,25,25E-结点和活结点 死结点,FIFO队列,XX,2040,3050,1525,1525,0,C,BC,E

6、G,F,E,G,16,例1:,c=30,n=3时的0-1背包问题,w=20,15,15p=40,25,25E-结点和活结点 死结点,LIFO队列,C,XX,2040,3050,1525,1525,0,BF,G,B,F,E,17,例1:,c=30,n=3时的0-1背包问题,w=20,15,15p=40,25,25E-结点和活结点 死结点,优先队列,2040,3050,1525,1525,0,XX,C,B,CE,GC,18,例2:旅行商问题,1,4,2,3,30,19,10,20,6,5,4,旅行线路(1,2,4,3,1)(1,3,2,4,1)(1,4,3,2,1),例2:旅行商问题:FIFO,(

7、1,2,3,4,1)(1,2,4,3,1)v=59v=66,(1,3,2,4,1)v=25,X,(1,4,2,3,1)V=25,1,4,2,3,30,10,20,6,5,4,(1,4,3,2,1)V=59 20,例2:旅行商问题:优先队列,1,4,2,3,30,10,20,6,5,4,(1,3,2,4,1)V=25,(1,4,2,3,1)V=25,X,X,X,21,6.2单源最短路径问题,1.问题描述下面以一个例子来说明单源最短路径问题:在下图所给的 有向图G中,每一边都有一个非负边权。要求图G的从源顶点 s到目标顶点t之间的最短路径。,22,6.2单源最短路径问题,23,2.算法思想解单源最

8、短路径问题的优先队列式分支限界法用一极 小堆来存储活结点表。其优先级是结点所对应的当前路长。算法从图G的源顶点s和空优先队列开始。结点s被扩展 后,它的儿子结点被依次插入堆中。此后,算法从堆中取 出具有最小当前路长的结点作为当前扩展结点,并依次检 查与当前扩展结点相邻的所有顶点。如果从当前扩展结点i 到顶点j有边可达,且从源出发,途经顶点i再到顶点j的所 相应的路径的长度小于当前最优路径长度,则将该顶点作 为活结点插入到活结点优先队列中。这个结点的扩展过程 一直继续到活结点优先队列为空时为止。,下图是用优先队列式分支限界法解有向图G的单源最 短路径问题产生的解空间树。其中,每一个结点旁边的 数

9、字表示该结点所对应的当前路长。,24,6.2单源最短路径问题,2.算法设计static floata/图G的邻接矩阵 static float dist/源到各顶点的距离static int p/源到各顶点的路径上的前驱顶点 HeapNode/最小堆元素int i;/顶点编号float length;/当前路长,25,while(true)/搜索问题的解空间 for(int j=1;j=n;j+)if(aenode.ijFloat.MAX_VALUE)&(enode.length+aenode.ijdistj),/顶点i到顶点j可达,且满足控制约束distj=enode.length+ceno

10、de.ij;p j=enode.i;/加入活结点优先队列,HeapNode node=new HeapNode(j,distj);heap.put(node);/取下一扩展结点if(heap.isEmpty()break;else enode=(HeapNode)heap.removeMin();,顶点i和j间有边,且此 路径长小于原先从原点 到j的路径长,26,实例:,优先队列:,1,11,10,9,8,7,6,5,4,3,2,1 2 3 4 5 6 7 8 9 10 111 0 2 3 4 2 3 4 5,6 7 8 9 10 11 27,优先队列:,1,结点1到其它结点:,2,3,6,7

11、,10,9,7,7,5,6,3,4,10,7,7,9,9,9,10,9,11,28,优先队列:,1,经过结点2到其它结点:,2,3,6,7,10,9,7,7,5,6,3,4,10,7,7,9,9,9,10,9,11,29,优先队列:,1,经过结点3到其它结点:,2,3,6,7,10,9,7,7,5,6,3,4,10,7,7,9,9,9,10,9,11,30,X,优先队列:,1,经过结点4到其它结点:,2,3,6,7,10,9,7,5,6,3,10,7,7,9,9,9,10,9,11,31,X,4X7,优先队列:,1,经过结点6到其它结点:,2,3,6,7,10,9,7,5,3,10,7,7,9

12、,9,9,10,9,11,32,X,4X7,6X,优先队列:,1,经过结点7到其它结点:,2,3,6,7,10,9,7,5,3,10,7,7,9,9,9,10,9,11,33,X,4X7,6X,X,优先队列:,1,经过结点10到其它结点:,2,3,6,7,10,9,7,5,3,10,7,7,9,9,9,9,11,34,X,4X7,6X,X,10X,6.2单源最短路径问题,复杂度分析计算时间为 O(n!)。需要空间为 O(n2)。,35,6.3 装载问题,问题描述有一批共n个集装箱要装上2艘载重量分别为C1和C2的轮船,其中集装箱i的重量为wi,且装载问题要求确定是否有一个合理的装载方案可将这n

13、个集装 箱装上这2艘轮船。如果有,找出一种装载方案。如果一个给定装载问题有解,则采用下面的策略可得到最优 装载方案。首先将第一艘轮船尽可能装满;(2)将剩余的集装箱装上第二艘轮船。,36,6.3 装载问题,cw:扩展结点所对应的载重量,37,2.算法描述目标:寻找第一条船的最大装载方案。解空间:子集树。数据结构:queue:存放活结点队列,队列中的元素值表示活结点对应的 当前载重量。元素值为-1,表示队列已到达解空间树同一层 结点的尾部。bestw:当前最优载重量。i:表示扩展结点所处的层,6.3 装载问题,2.队列式分支限界法maxLoading算法的while循环中,首先检测当前扩展结点的

14、左 儿子结点是否为可行结点。如果是则将其加入到活结点队列 中。然后将其右儿子结点加入到活结点队列中(右儿子结点一 定是可行结点)。2个儿子结点都产生后,当前扩展结点被舍 弃。活结点队列中的队首元素被取出作为当前扩展结点,由 于队列中每一层结点之后都有一个尾部标记-1,故在取队首 元素时,活结点队列一定不空。当取出的元素是-1时,再判 断当前队列是否为空。如果队列非空,则将尾部标记-1加入 活结点队列,算法开始处理下一层的活结点。,maxLoading算法的时间和空间复杂性均为:O(2n),38,2.队列式分支限界法,while(true)/搜索子集树/检查左儿子结点if(cw+wi=c)/xi

15、=1 enQueue(cw+wi,i);/右儿子结点总是可行的enQueue(cw,i);/xi=0 cw=(Integer)queue.remove().intValue();/取下一扩展结点 if(cw=-1)/同层结点尾部if(queue.isEmpty()return bestw;queue.put(new Integer(-1);/同层结点尾部标志 queue.remove().intValue();/取下一扩展结点 i+;/进入下一层,39,rivatestatic void enQueue(int wt,int i)/将活结点加入到活结点队列中 if(i=n)/可行叶结点,if(

16、wt bestw)bestw=wt;else/非叶结点 queue.put(new Integer(wt);,40,cw+w4c1 x,A,B,C,1,cw=0,cw=8,Hcw=10,cw=8,bestw=11,cw=8cw+w2c1 x,Ecw+w3c1,bestw=10N,O,cw+w4c1,cw=8,P,0cw=0,F,cw=8,I,cw+w3c1J,L,cw=0Gcw+w3c1,M,cw+w4c1,cw=6,R,Qcw=11,K,cw=8,void backtrack(int i)/搜索第i层结点if(i n)/到达叶结点if(cwbestw)bestw=cw;return;if(cw+wi=c)/搜索左子树cw+=wi;backtrack(i+1);cw-=wi;/搜索右子树,backtrack(i+1);,例:假定n=4,w=8,6,2,3,c1=12,41,2.队列式分支限界法,例:假定n=4,w=8,6,2,3,c1=12,bestw:0,i=1,cw=0,A,42,2.队列式分支限界法,例:假定n=4,w=8,6,2,3,c1=12,bestw:0,i=1,cw=0

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1