计算机算法设计与分析 第6章.ppt
《计算机算法设计与分析 第6章.ppt》由会员分享,可在线阅读,更多相关《计算机算法设计与分析 第6章.ppt(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第6章 分支限界法1学习要点学习要点理解分支限界法的剪枝搜索策略。掌握分支限界法的算法框架(1)队列式(FIFO)分支限界法(2)优先队列式分支限界法 通过应用范例学习分支限界法的设计策略。(1)单源最短路径问题(2)装载问题;(3)布线问题(4)0-1背包问题;(5)最大团问题;(6)旅行售货员问题(7)电路板排列问题(8)批处理作业调度问题26.1 分支限界法的基本思想分支限界法的基本思想分支限界法与回溯法分支限界法与回溯法(1)求解目标:)求解目标:回溯法的求解目标是找出解空间树中满足约束条回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的
2、一件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。个解,或是在满足约束条件的解中找出在某种意义下的最优解。(2)搜索方式的不同:)搜索方式的不同:回溯法以深度优先的方式搜索解空间树,回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。36.1 分支限界法的基本思想分支限界法的基本思想 分支限界法常以广度优先或以最小耗费(最大效益)优先的方分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。式搜索问题的解
3、空间树。此后,从活结点表中取下一结点成为当前扩展结点,并重复上此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。空时为止。在分支限界法中,每一个活结点只有一次机会成为扩展结点。在分支限界法中,每一个活结点只有一次机会成为扩展结点。活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结
4、点被加入活结点表中。余儿子结点被加入活结点表中。46.1 分支限界法的基本思想分支限界法的基本思想常见的两种分支限界法常见的两种分支限界法(1 1)队列式队列式(FIFO)FIFO)分支限界法分支限界法 按照队列先进先出(按照队列先进先出(FIFOFIFO)原则选取下一个节点原则选取下一个节点为扩展节点。为扩展节点。(2 2)优先队列式分支限界法)优先队列式分支限界法 按照优先队列中规定的优先级选取优先级最高的节按照优先队列中规定的优先级选取优先级最高的节点成为当前扩展节点。点成为当前扩展节点。56.2 单源最短路径问题单源最短路径问题1.问题描述问题描述 下面以一个例子来说明单源最短路径问题
5、:下面以一个例子来说明单源最短路径问题:在下图所给的有在下图所给的有向图向图G G中,每一边都有一个非负边权。要求图中,每一边都有一个非负边权。要求图G G的从源顶点的从源顶点s s到目到目标顶点标顶点t t之间的最短路径。之间的最短路径。66.2 单源最短路径问题单源最短路径问题1.问题描述问题描述 下图是用优先队列式分支限界法解有向图下图是用优先队列式分支限界法解有向图G G的单源最短路径问的单源最短路径问题产生的解空间树。其中,每一个结点旁边的数字表示该结点所对题产生的解空间树。其中,每一个结点旁边的数字表示该结点所对应的当前路长。应的当前路长。76.2 单源最短路径问题单源最短路径问题
6、2.算法思想算法思想 解单源最短路径问题的优先队列式分支限界法用一极小堆来解单源最短路径问题的优先队列式分支限界法用一极小堆来存储活结点表。其优先级是结点所对应的当前路长。存储活结点表。其优先级是结点所对应的当前路长。算法从图算法从图G G的源顶点的源顶点s s和空优先队列开始。结点和空优先队列开始。结点s s被扩展后,它被扩展后,它的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当的儿子结点被依次插入堆中。此后,算法从堆中取出具有最小当前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相前路长的结点作为当前扩展结点,并依次检查与当前扩展结点相邻的所有顶点。如果从当前扩展结点邻的所有
7、顶点。如果从当前扩展结点i i到顶点到顶点j j有边可达,且从源有边可达,且从源出发,途经顶点出发,途经顶点i i再到顶点再到顶点j j的所相应的路径的长度小于当前最优的所相应的路径的长度小于当前最优路径长度,则将该顶点作为活结点插入到活结点优先队列中。这路径长度,则将该顶点作为活结点插入到活结点优先队列中。这个结点的扩展过程一直继续到活结点优先队列为空时为止。个结点的扩展过程一直继续到活结点优先队列为空时为止。86.2 单源最短路径问题单源最短路径问题3.剪枝策略剪枝策略 在在算算法法扩扩展展结结点点的的过过程程中中,一一旦旦发发现现一一个个结结点点的的下下界界不不小小于当前找到的最短路长,
8、则算法剪去以该结点为根的子树。于当前找到的最短路长,则算法剪去以该结点为根的子树。在在算算法法中中,利利用用结结点点间间的的控控制制关关系系进进行行剪剪枝枝。从从源源顶顶点点s s出出发发,2 2条条不不同同路路径径到到达达图图G G的的同同一一顶顶点点。由由于于两两条条路路径径的的路路长长不不同同,因因此此可可以以将将路路长长长长的的路路径径所所对对应应的的树树中中的的结结点点为为根根的的子子树树剪去。剪去。96.2 单源最短路径问题单源最短路径问题 while(true)for(int j=1;j=n;j+)if(cE.ijinf)&(E.length+cE.ijdistj)/顶点顶点i到
9、顶点到顶点j可达,且满足控制约束可达,且满足控制约束 distj=E.length+cE.ij;prevj=E.i;/加入活结点优先队列加入活结点优先队列 MinHeapNode N;N.i=j;N.length=distj;H.Insert(N);try H.DeleteMin(E);/取下一扩展结点取下一扩展结点 catch(OutOfBounds)break;/优先队列空优先队列空 顶点顶点i i和和j j间有边,且此间有边,且此路径长小于原先从原点路径长小于原先从原点到到j j的路径长的路径长 106.3 装载问题装载问题1.问题描述问题描述有一批共个集装箱要装上有一批共个集装箱要装上
10、2 2艘载重量分别为艘载重量分别为C1C1和和C2C2的轮船,其中集的轮船,其中集装箱装箱i i的重量为的重量为WiWi,且且装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上装载问题要求确定是否有一个合理的装载方案可将这个集装箱装上这这2 2艘轮船。如果有,找出一种装载方案。艘轮船。如果有,找出一种装载方案。容容易易证证明明:如如果果一一个个给给定定装装载载问问题题有有解解,则则采采用用下下面面的的策策略略可可得得到到最优装载方案。最优装载方案。(1)(1)首先将第一艘轮船尽可能装满;首先将第一艘轮船尽可能装满;(2)(2)将剩余的集装箱装上第二艘轮船。将剩余的集装箱装上第二艘轮船。
11、116.3 装载问题装载问题2.队列式分支限界法队列式分支限界法 在在算算法法的的whilewhile循循环环中中,首首先先检检测测当当前前扩扩展展结结点点的的左左儿儿子子结结点点是是否否为为可可行行结结点点。如如果果是是则则将将其其加加入入到到活活结结点点队队列列中中。然然后后将将其其右右儿儿子子结结点点加加入入到到活活结结点点队队列列中中(右右儿儿子子结结点点一一定定是是可可行结点行结点)。2 2个儿子结点都产生后,当前扩展结点被舍弃。个儿子结点都产生后,当前扩展结点被舍弃。活活结结点点队队列列中中的的队队首首元元素素被被取取出出作作为为当当前前扩扩展展结结点点,由由于于队队列列中中每每一
12、一层层结结点点之之后后都都有有一一个个尾尾部部标标记记-1-1,故故在在取取队队首首元元素素时时,活活结结点点队队列列一一定定不不空空。当当取取出出的的元元素素是是-1-1时时,再再判判断断当当前前队队列列是是否否为为空空。如如果果队队列列非非空空,则则将将尾尾部部标标记记-1-1加加入入活活结结点点队队列,算法开始处理下一层的活结点。列,算法开始处理下一层的活结点。126.3 装载问题装载问题2.队列式分支限界法队列式分支限界法while(true)/检查左儿子结点检查左儿子结点 if(Ew+wi=c)/xi=1 EnQueue(Q,Ew+wi,bestw,i,n);/右儿子结点总是可行的右
13、儿子结点总是可行的 EnQueue(Q,Ew,bestw,i,n);/xi=0 Q.Delete(Ew);/取下一扩展结点取下一扩展结点 if(Ew=-1)/同层结点尾部同层结点尾部 if(Q.IsEmpty()return bestw;Q.Add(-1);/同层结点尾部标志同层结点尾部标志 Q.Delete(Ew);/取下一扩展结点取下一扩展结点 i+;/进入下一层进入下一层 136.3 装载问题装载问题3.算法的改进算法的改进 节点的左子树表示将此集装箱装上船,右子树表示不将节点的左子树表示将此集装箱装上船,右子树表示不将此集装箱装上船。设此集装箱装上船。设bestwbestw是当前最优解
14、;是当前最优解;ewew是当前扩展结点是当前扩展结点所相应的重量;所相应的重量;r r是剩余集装箱的重量。则当是剩余集装箱的重量。则当ew+rew+r bestwbestw时,时,可将其右子树剪去,因为此时若要船装最多集装箱,就应该可将其右子树剪去,因为此时若要船装最多集装箱,就应该把此箱装上船。把此箱装上船。另外,为了确保右子树成功剪枝,应该在算法每一次进另外,为了确保右子树成功剪枝,应该在算法每一次进入左子树的时候更新入左子树的时候更新bestwbestw的值。的值。146.3 装载问题装载问题3.算法的改进算法的改进/检查左儿子结点检查左儿子结点 Type wt=Ew+wi;/左儿子结点
15、的重左儿子结点的重量量 if(wt bestw)bestw=wt;/加入活结点队列加入活结点队列 if(i bestw&i 0;j-)bestxj=bestE-LChild;bestE=bestE-parent;176.3 装载问题装载问题5.优先队列式分支限界法优先队列式分支限界法 解装载问题的优先队列式分支限界法用最大优先队列存储解装载问题的优先队列式分支限界法用最大优先队列存储活结点表。活结点活结点表。活结点x x在优先队列中的优先级定义为从根结点到结在优先队列中的优先级定义为从根结点到结点点x x的路径所相应的载重量再加上剩余集装箱的重量之和。的路径所相应的载重量再加上剩余集装箱的重量
16、之和。优先队列中优先级最大的活结点成为下一个扩展结点。以优先队列中优先级最大的活结点成为下一个扩展结点。以结点结点x x为根的子树中所有结点相应的路径的载重量不超过为根的子树中所有结点相应的路径的载重量不超过它的优它的优先级先级。子集树中叶结点所相应的载重量与其优先级相同。子集树中叶结点所相应的载重量与其优先级相同。在优先队列式分支限界法中,一旦有一个叶结点成为当前在优先队列式分支限界法中,一旦有一个叶结点成为当前扩展结点,则可以断言该叶结点所相应的解即为最优解。此时扩展结点,则可以断言该叶结点所相应的解即为最优解。此时可终止算法。可终止算法。186.4 布线问题布线问题1.算法思想算法思想
17、解解此此问问题题的的队队列列式式分分支支限限界界法法从从起起始始位位置置a a开开始始将将它它作作为为第第一一个个扩扩展展结结点点。与与该该扩扩展展结结点点相相邻邻并并且且可可达达的的方方格格成成为为可可行行结结点点被被加加入入到到活活结结点点队队列列中中,并并且且将将这这些些方方格格标标记记为为1 1,即从起始方格,即从起始方格a a到这些方格的距离为到这些方格的距离为1 1。接接着着,算算法法从从活活结结点点队队列列中中取取出出队队首首结结点点作作为为下下一一个个扩扩展展结结点点,并并将将与与当当前前扩扩展展结结点点相相邻邻且且未未标标记记过过的的方方格格标标记记为为2 2,并并存存入入活
18、活结结点点队队列列。这这个个过过程程一一直直继继续续到到算算法法搜搜索索到到目目标标方方格格b b或或活活结结点点队队列列为为空空时时为为止止。即即加加入入剪剪枝枝的的广广度度优优先先搜索。搜索。196.4 布线问题布线问题Position offset4;offset0.row=0;offset0.col=1;/右右 offset1.row=1;offset1.col=0;/下下 offset2.row=0;offset2.col=-1;/左左 offset3.row=-1;offset3.col=0;/上上定义移动方向的定义移动方向的相对位移相对位移 for(int i=0;i=m+1;i
19、+)grid0i=gridn+1i=1;/顶部和底部顶部和底部 for(int i=0;i=n+1;i+)gridi0=gridim+1=1;/左翼和右翼左翼和右翼设置边界的围墙设置边界的围墙206.4 布线问题布线问题for(int i=0;i NumOfNbrs;i+)nbr.row=here.row+offseti.row;nbr.col=here.col+offseti.col;if(gridnbr.rownbr.col=0)/该方格未标记该方格未标记 gridnbr.rownbr.col =gridhere.rowhere.col+1;if(nbr.row=finish.row)&(
20、nbr.col=finish.col)break;/完成布线完成布线 Q.Add(nbr);找到目标位置后,可以通过回溯方法找到这条最短路径。找到目标位置后,可以通过回溯方法找到这条最短路径。216.5 0-1背包问题背包问题算法的思想算法的思想 首先,要对输入数据进行预处理,将各物品依其单位首先,要对输入数据进行预处理,将各物品依其单位重量价值从大到小进行排列。重量价值从大到小进行排列。在下面描述的优先队列分支限界法中,节点的优先级在下面描述的优先队列分支限界法中,节点的优先级由已装袋的物品价值加上剩下的最大单位重量价值的物品由已装袋的物品价值加上剩下的最大单位重量价值的物品装满剩余容量的价
21、值和。装满剩余容量的价值和。算法首先检查当前扩展结点的左儿子结点的可行性。算法首先检查当前扩展结点的左儿子结点的可行性。如果该左儿子结点是可行结点,则将它加入到子集树和活如果该左儿子结点是可行结点,则将它加入到子集树和活结点优先队列中。当前扩展结点的右儿子结点一定是可行结点优先队列中。当前扩展结点的右儿子结点一定是可行结点,仅当右儿子结点满足上界约束时才将它加入子集树结点,仅当右儿子结点满足上界约束时才将它加入子集树和活结点优先队列。和活结点优先队列。当扩展到叶节点时为问题的最优值。当扩展到叶节点时为问题的最优值。226.5 0-1背包问题背包问题上界函数上界函数while(i=n&wi=cl
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机算法设计与分析 第6章 计算机 算法 设计 分析
限制150内