《算法设计与分析分支限界法第六章幻灯片.ppt》由会员分享,可在线阅读,更多相关《算法设计与分析分支限界法第六章幻灯片.ppt(45页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、算法设计与分析分支限界法第六章第1页,共45页,编辑于2022年,星期一2023/4/141计算机算法设计与分析树搜索的一般形式SearchTree(Space T)ok=0;L=T.initial;while(!ok|L)a=L.first;if(a is goal)unfinish=false else Control-put-in(L,Sons(a);三种搜索方法的不同就在三种搜索方法的不同就在于存放待考察的结点的表于存放待考察的结点的表L的控制方式不同:的控制方式不同:DFS(回溯法回溯法)是栈;是栈;WFS是队列;是队列;BFS是队列中的元素排序。是队列中的元素排序。第2页,共45页
2、,编辑于2022年,星期一2023/4/142计算机算法设计与分析分支限界法基本思想分支限界法就是最佳优先(包括广度优先)的搜索法。其基本思想是:将要待考察的结点按其优劣排序,优先搜索好结点。于是便有了两个问题:(1)如何知道结点的优劣?(2)在回溯法中,表L中结点的层次分明,因而路径也分明。但是这里排序会打乱表L中结点的层次,那又如何找回解的路径呢?第3页,共45页,编辑于2022年,星期一2023/4/143计算机算法设计与分析分支限界法基本思想分支限界法就是最佳优先(包括广度优先)的搜索法。其基本思想是:将要待考察的结点按其优劣排序,优先搜索好结点。于是便有了两个要点:(1)需要构造评价
3、结点优劣的评价函数。(2)需要能够重新构造解的路径,也就是搜索的路径。第4页,共45页,编辑于2022年,星期一2023/4/144计算机算法设计与分析评价函数的构造评价函数要能够提供一个评定候选扩展结点的方法,以便确定哪个结点最有可能在通往目标的最佳路径上。一个评价函数f(d)通常由两个部分构成:从开始结点到d的已有耗损值g(d),和再从d到达目标的期望耗损值h(d)。即:f(d)=g(d)+h(d)。通常g(d)的构造较易,h(d)的构造较难。第5页,共45页,编辑于2022年,星期一2023/4/145计算机算法设计与分析搜索路径的构造在回溯法中,每次仅考察一条路径,因而只需要构造这一条
4、路径即可:前进时记下相应结点,回溯时删去最末尾结点的记录。这比较容易实现。在分支限界法中,是同时考察若干条路径,那么又该如何构造搜索的路径呢?往前看,前程无数!往回看,来路一条。每个结点只要记住其前驱结点就行了!第6页,共45页,编辑于2022年,星期一2023/4/146计算机算法设计与分析搜索路径的构造为此,只需要对每一个扩展的结点d,建立三个信息:(1)该结点的名称d;(2)它的评价函数值f(d);(3)指向其前驱的指针p;即表示为d,f(d),p。这样一旦找到目标,即可以很方便地逆向构造出该路径。第7页,共45页,编辑于2022年,星期一2023/4/147计算机算法设计与分析Open
5、表与Closed表搜索中,表L用来保存准备扩展的结点,即下一步的结点。把表L称为Open表。此外,为了构造解的路径,还需要一个表来保存已经搜索过的结点,即已经走过的结点。此表被称为Closed表。故任意结点d必是:dOpen&dClosed;dClosed|d Open。结点结点d尚未被尚未被考察。考察。结点结点d已经已经被考察。被考察。第8页,共45页,编辑于2022年,星期一2023/4/148计算机算法设计与分析分支限界法的一般算法初始化:计算起点s的f(s);s,f(s),nil放入Open;while(Open)从Open中取出p,f(p),x(f(p)为最小);if(f(p)U)将
6、p,f(p),x放入Closed;if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d有二种情况:dOpen&dClosed;dClosed|d Open。若结点若结点d尚未被考察,则尚未被考察,则将将d,f(d),p插入到插入到Open中中。若若f(p)U,则剪,则剪去该路径。去该路径。第9页,共45页,编辑于2022年,星期一2023/4/149计算机算法设计与分析分支限界法的一般算法初始化:计算起点s的f(s);s,f(s),nil放入Open;while(Open)从Open中取出p,f(p),x(f(p)为最小);if(f(p)U)将p,f(p),x放入Cl
7、osed;if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d有二种情况:dOpen&dClosed;dClosed|d Open。若结点若结点d已被考察,则说明这次是通过另一条路已被考察,则说明这次是通过另一条路径到达到径到达到d。设。设d原来评价为原来评价为f(d),将其与新的评,将其与新的评价价f(d)比较。若新评价更好,则删去旧的,将新比较。若新评价更好,则删去旧的,将新的插入到的插入到Open中;否则丢弃。中;否则丢弃。第10页,共45页,编辑于2022年,星期一2023/4/1410计算机算法设计与分析分支限界法的一般算法初始化:计算起点s的f(s);s,
8、f(s),nil放入Open;while(Open)从Open中取出p,f(p),x(f(p)为最小);if(f(p)U)将p,f(p),x放入Closed;if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d if(dClosed&dOpen)将d,f(d),p 插入到Open中 else if(f(d)f(d)删去旧结点并将d,f(d),p重新插入到Open中。第11页,共45页,编辑于2022年,星期一2023/4/1411计算机算法设计与分析分支限界法求单源最短路径单源最短路径问题的评价函数的构造:g(d)定义为从源s到结点d所走的路径长度:g(d)=g(p)
9、+Cpd,这里p为d的前驱结点,Cpd为p到d的距离。h(d)定义为0。于是f(d)=g(d)。源s的评价函数f(s)=0。评价函数的下界为0;上界初始时为,以后不断用取得的更短路径的长度来替代。第12页,共45页,编辑于2022年,星期一2023/4/1412计算机算法设计与分析分支限界法求最短路径举例12543102050100301060赋权图G初始时,将源1,0,0放入Open,Closed为空。Open表1,0,0Closed表取出1,0,0放入Closed;生成其后继2,10,1、4,30,1和5,100,1,并依序放入Open。1,0,05,100,14,30,12,10,1取出
10、2,10,1放入Closed;生成其后继3,60,2,并依序插入Open。2,10,13,60,24,30,1取出4,30,1放入Closed;生成其后继3,50,4和5,90,4,修订Open中已有的两个结点并依序排列。4,30,15,90,43,50,4取出3,50,4放入Closed;生成其后继2,100,3和5,60,3,前者因劣于Closed中的2,10,1而被抛弃,后者修订了Open中的5,90,4。3,50,45,60,3取出5,60,3,因其已经是目标结点,算法成功并终止。依据逆向指针可得最短路径为1435。第13页,共45页,编辑于2022年,星期一2023/4/1413计算
11、机算法设计与分析界限(Bounding)评价函数f(d)关系着算法的效率乃至成败。因为在大多数问题中f(d)只是个估计值,所以单靠f(d)是不够的。通常还要设计它的上下界函数U(d)和L(d)。L(d)f(d)U(d)。所谓分支限界法就是通过评价函数及其上下界函数的计算,将状态空间中不可能产生最佳解的子树剪去,减少搜索的范围,提高效率。因而更准确的称呼应是“界限剪支法”第14页,共45页,编辑于2022年,星期一2023/4/1414计算机算法设计与分析用分支限界法求TSPTSP是求排列的问题,不是仅找一条路径而已。因而需要对分支限界法的一般算法作些修改:(1)待扩展结点若已在本路径上,则不再
12、扩展,但若是在其他路径上出现过,则仍需要扩展。为此,用一个表L来存储该路径出现的结点,即将d,f(d),p改为d,f(d),*L。该结点是否已经出现过,可查该结点是否已经出现过,可查Closed表或者表或者Open表。但是要查它出现在哪条路径上,就表。但是要查它出现在哪条路径上,就颇费周章了。颇费周章了。这个这个L该怎么做?该怎么做?第15页,共45页,编辑于2022年,星期一2023/4/1415计算机算法设计与分析用分支限界法求TSPTSP是求排列的问题,不是仅找一条路径而已。因而需要对分支限界法的一般算法作些修改:(1)待扩展结点若在本路径上已经出现,则不再扩展,但若是在其他路径上出现过
13、,则仍需要扩展。为此,用一个表L来存储该路径出现的结点。(2)新结点,无论其优劣,既不影响其它路径上的结点,也不受其它路径上的结点的影响。(3)若考察结点的评价值超过上界值,则可以剪去。这实际上是剪去了这一支。L可设计为数组可设计为数组Ln,初始值都为,初始值都为n;每加入新;每加入新结点结点i,则,则Li=p,这里,这里p是是i的前驱结点。若的前驱结点。若Li n,则则i已在此路径中。这样结点已在此路径中。这样结点i的插入时的插入时间和判定时间都为常量。间和判定时间都为常量。第16页,共45页,编辑于2022年,星期一2023/4/1416计算机算法设计与分析分支限界法的一般算法初始化:计算
14、起点s的f(s);s,f(s),nil 放入Open;while(Open)从Open中取出p,f(p),x(f(p)为最小);if(f(p)U)将p,f(p),x放入Closed;if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d if(dClosed&dOpen)将d,f(d),p 插入到Open中 else if(f(d)f(d)删去旧结点并将d,f(d),p重新插入到Open中。不失一般性,令不失一般性,令0为起点,为起点,U为上界值:为上界值:Initialization:U=;Open=Closed=;计算计算f(0);产生空表产生空表L;/L0=0,n
15、,n Put-ordered-in(Open,0,f(0),*L);/把把0,f(0),*L)按序放入按序放入Open表中。表中。/第17页,共45页,编辑于2022年,星期一2023/4/1417计算机算法设计与分析分支限界法的一般算法Initialization;while(Open)从Open中取出p,f(p),x (f(p)为最小);if(f(p)U)将p,f(p),x放入Closed;if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d if(dClosed&dOpen)将d,f(d),p 插入到Open中 else if(f(d)f(d)删去旧结点并将d,
16、f(d),p重新插入到Open中。*L此处改为表此处改为表L。第18页,共45页,编辑于2022年,星期一2023/4/1418计算机算法设计与分析分支限界法的一般算法Initialization;while(Open)从Open中取出p,f(p),*L(f(p)为最小);if(f(p)U)将p,f(p),x放入Closed;if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d if(dClosed&dOpen)将d,f(d),p 插入到Open中 else if(f(d)f(d)删去旧结点并将d,f(d),p重新插入到Open中。此句可以不要了。此句可以不要了。因为
17、每条通路上考察过的因为每条通路上考察过的结点放在表结点放在表L中了。中了。Closed表表L不不再需要了。再需要了。第19页,共45页,编辑于2022年,星期一2023/4/1419计算机算法设计与分析分支限界法的一般算法Initialization;while(Open)从Open中取出p,f(p),*L(f(p)为最小);if(f(p)U)if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d if(dClosed&dOpen)将d,f(d),p 插入到Open中 else if(f(d)f(d)删去旧结点并将d,f(d),p重新插入到Open中。如何知道如何知道p
18、是目标?是目标?如果如果L中已有中已有n个结点了,则个结点了,则p是目标。是目标。那又如何知道那又如何知道L中已有中已有n个结点了?个结点了?第20页,共45页,编辑于2022年,星期一2023/4/1420计算机算法设计与分析分支限界法的一般算法Initialization;while(Open)从Open中取出p,f(p),*L(f(p)为最小);if(f(p)U)if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d if(dClosed&dOpen)将d,f(d),p 插入到Open中 else if(f(d)f(d)删去旧结点并将d,f(d),p重新插入到Op
19、en中。L中存放的是每个结点的前驱,故可用中存放的是每个结点的前驱,故可用L0作计数作计数器。初始化时器。初始化时L0=1;之后每加入一个结点,;之后每加入一个结点,L0+。当。当L0=n,则已达目标。,则已达目标。第21页,共45页,编辑于2022年,星期一2023/4/1421计算机算法设计与分析分支限界法的一般算法Initialization;while(Open)从Open中取出p,f(p),*L(f(p)为最小);if(f(p)U)if(p是目标)成功返回 else 产生p的后继d并计算f(d);对每个后继d if(dClosed&dOpen)将d,f(d),p 插入到Open中 e
20、lse if(f(d)f(d)删去旧结点并将d,f(d),p重新插入到Open中。所以,这里应改为:所以,这里应改为:if(L0=n)S=p,f(p),*Lp;U=f(p)else /这里变量这里变量S用于存放解。用于存放解。/第22页,共45页,编辑于2022年,星期一2023/4/1422计算机算法设计与分析分支限界法的一般算法Initialization;while(Open)从Open中取出p,f(p),*L(f(p)为最小);if(f(p)U)if(L0=n)S=p,f(p),*Lp;U=f(p)else 产生p的后继d并计算f(d);对每个后继d if(dClosed&dOpen)
21、将d,f(d),p 插入到Open中 else if(f(d)f(d)删去旧结点并将d,f(d),p重新插入到Open中。因为因为TSP要考察每一条通要考察每一条通路,只要这条通路没走完,路,只要这条通路没走完,就要继续考察。就要继续考察。扩展结点扩展结点p:对:对p的每个后继结点的每个后继结点d,若,若d不不在在L中,则中,则计算计算f(d);若若f(d)U,则生成则生成d,f(d),*Ld并将其按序放入并将其按序放入Open表中表中;第23页,共45页,编辑于2022年,星期一2023/4/1423计算机算法设计与分析扩展结点p扩展结点p需要做的事情有:对p的每个后继结点d,若d不在L中,
22、则计算f(d);若f(d)U,则生成d,f(d),*Ld并将其按序放入Open表中。什么样的结点是什么样的结点是p的的后继结点?后继结点?令代价矩阵为令代价矩阵为Cnn。若。若Cpd ,则则d是是p的后的后继结点。继结点。即:即:for(d=1,d n,d+)if(Cpd )。0是起点,无需考虑。是起点,无需考虑。if(Ld=n)then把这两个把这两个if 写在一起。写在一起。第24页,共45页,编辑于2022年,星期一2023/4/1424计算机算法设计与分析扩展结点p扩展结点p需要做的事情有:对p的每个后继结点d,若d不在L中,则计算f(d);若f(d)U,则生成d,f(d),*L并将其
23、按序放入Open表中。for(d=1,d n,d+)if(L(d)=n&Cpd )then V=f(d);/调用评价函数计算调用评价函数计算f(d)/if(V U)生成生成Ld;Ld=L d;Put-ordered-in(Open,d,f(d),*Ld)需要为需要为d生成一个其自生成一个其自有的路径表有的路径表Ld。将将p的路径表的路径表L插入插入p的的后继结点后继结点d之后再赋值之后再赋值给给Ld。最后将新扩展结点最后将新扩展结点d按按序放入序放入Open表中表中。第25页,共45页,编辑于2022年,星期一2023/4/1425计算机算法设计与分析扩展结点pDevelop(p,f(p),*
24、L)for(d=1,d n,d+)if(L(d)=n&Cpd )then V=f(d);/调用评价函数计算f(d)/if(V U)生成Ld;Ld=L d;Put-ordered-in(Open,d,f(d),*Ld)第26页,共45页,编辑于2022年,星期一2023/4/1426计算机算法设计与分析分支限界法的一般算法Branch-bounding-for-TSP(n,*C)Initialization;while(Open)从Open中取出p,f(p),*L(f(p)为最小);if(f(p)U)if(L0=n)S=p,f(p),*Lp;U=f(p)else Develop(p,f(p),*
25、Lp;第27页,共45页,编辑于2022年,星期一2023/4/1427计算机算法设计与分析分支限界法求TSP举例设有向图G=(V,E)的边的代价矩阵为C=cij。若没有有向边E,则定义cij=且规定cii=。不失一般性,设周游路线均以顶点1为起点。左下为一个有向图G的代价矩阵C。25 40 31 27 5 17 30 2519 15 6 1 9 50 24 622 8 7 10 l评价函数f(d)为1到d的代价减去已经过的边数。l初始时f(1)=0;lf(d)=f(p)+cpd 1,这里p是d的前驱。第28页,共45页,编辑于2022年,星期一2023/4/1428计算机算法设计与分析分支限
26、界法求TSP的搜索 25 40 31 27 5 17 30 2519 15 6 1 9 50 24 622 8 7 10 102243394305262340453548523333243542793535453246437234946242843584286找到了一条周游路线153421,其长度为95。这不是最短周游路线,需要修改上界后继续搜索。第29页,共45页,编辑于2022年,星期一2023/4/1429计算机算法设计与分析评价函数影响搜索效率前面的搜索的效率不高,几乎要搜索全部的状态空间。其原因是评价函数性能不好以及上下界的估计太低。要提高搜索效率,就必须要提高评价函数的性能,并精确
27、上界的估计值。为了设计求解TSP问题的更好的评价函数,先定义其代价矩阵的归约矩阵和约数。第30页,共45页,编辑于2022年,星期一2023/4/1430计算机算法设计与分析归约矩阵以及约数给定代价矩阵C,从C的任何行i(或列i)的各元素中减去此行(或此列)的最小元素的值r(i)(或r(i),称为对i行(或i列)的归约。将C的各行和各列都归约后的矩阵称为C的归约矩阵。数r=in r(i)+in r(i),即各行最小元素的值之和加上各列最小元素之和,称为C的约数。第31页,共45页,编辑于2022年,星期一2023/4/1431计算机算法设计与分析例子中的归约矩阵和约数计算前面例子中的归约矩阵及
28、其约数如下:25 40 31 27 5 17 30 2519 15 6 1 9 50 24 622 8 7 10 先做行归约:25 40 31 27 5 17 30 2519 15 6 1 9 50 24 622 8 7 10 r(1)=25 0 15 6 2r(2)=5 0 12 25 20r(3)=118 14 5 0r(4)=6 3 44 21 0r(5)=715 1 0 3 第32页,共45页,编辑于2022年,星期一2023/4/1432计算机算法设计与分析例子中的归约矩阵和约数计算前面例子中的归约矩阵及其约数如下:25 40 31 27 5 17 30 2519 15 6 1 9
29、50 24 622 8 7 10 再做列归约:25 40 31 27 5 17 30 2519 15 6 1 9 50 24 622 8 7 10 r(1)=25 0 15 6 2r(2)=5 0 12 25 20r(3)=118 14 5 0r(4)=6 3 44 21 0r(5)=715 1 0 3 r(1)=r(2)=r(3)=r(5)=0r(4)=3322 047约数 r=47。归约矩阵归约矩阵这个约数这个约数r是什么呢?是什么呢?第33页,共45页,编辑于2022年,星期一2023/4/1433计算机算法设计与分析约数是周游路线代价的下界定理:设C是图G的代价矩阵,P是周游路线,则P
30、的代价,即P cij=r+P cij,式中C=cij是C的归约矩阵,r为约数。证明:由归约矩阵的构造可知:cij=cij r(i)r(j),即cij=cij+r(i)+r(j)。任何周游路线包含n条边并且对应在C中的每行每列有且仅有一条边。于是 Pcij=P(cij+r(i)+r(j)=r+Pcij。原来约数原来约数r r是图是图G的任何一条周游路线的任何一条周游路线的代价的下界的代价的下界!第34页,共45页,编辑于2022年,星期一2023/4/1434计算机算法设计与分析用约数定义期望函数h(d)既然约数是周游路线长度的下界,可以考虑用约数来定义期望函数h(d):对开始结点1,令g(1)
31、=0,h(1)=r,f(1)=r。若从结点1选择了一条边,不妨设边,则令g(2)=f(1)+从1到2的距离l,显然l应该是c12,而不应该再是c12了。那么h(2)=?自然可以想到h(2)是从2开始的路线的下界r2。是否可用类似求r一样去求新的约数r2呢?第35页,共45页,编辑于2022年,星期一2023/4/1435计算机算法设计与分析求新的约数r2可以。要先将边和所有边和边都删去,即置c12、c1k和ck2为。设Cp为路线上点p的归约矩阵。从p选择边所得点d的归约矩阵Cd和约数rd为:先将Cp中的cpd,cpk和ckd都置为,这里1kn,即删去这些边;依照求归约矩阵C的方法对Cp进行行归
32、约和列归约,便得到了Cd和rd。因为边因为边已走过,所以不可能再已走过,所以不可能再走边走边和边和边了。了。第36页,共45页,编辑于2022年,星期一2023/4/1436计算机算法设计与分析新的评价函数f(d)不失一般性,将图G中结点标记为1n,并设0为起点。将图G的代价矩阵C的约数r和归约矩阵C分别为起点0的约数r1和归约矩阵C1。对任意路线上结点d,定义其评价函数为:f(d)=g(d)+h(d),其中:g(d)=f(p)+Cppd,这里p为d的前驱结点,并规定g(1)=0;h(d)=rd。两点在两点在p的归约矩阵中的代价的归约矩阵中的代价第37页,共45页,编辑于2022年,星期一20
33、23/4/1437计算机算法设计与分析用新的评价函数求TSP下面用新的评价函数求前面的例子,我们已经求得了它的归约矩阵C和约数r=47。0 15 3 2 0 12 22 2018 14 2 0 3 44 18 015 1 0 0 1472g(2)=47+0=470 10801512h(2)=12+3=15f(2)=47+15=62623 0 15 3 2 0 12 22 2018 14 2 0 3 44 18 015 1 0 0 g(3)=47+15=62 04313h(3)=1f(3)=63634类似地可求出 f(4)=51。515类似地可求出 f(5)=50。50下面优先扩展的是结点5。2
34、此时C2是在C5的基础上进行。右边就是C5。0 12 22 18 14 2 3 44 18 0 0 0 g(2)=50+0=5001601503h(2)=17f(2)=67673类似地计算出f(3)=68684类似地计算出f(4)=8181下面扩展f(4)=51的结点4。并用同样方法计算它们的评价函数值。2121369464154 下面要扩展的结点 是f(2)=62的结点2。右边是其对应的归 约矩阵C2。2 0 10 815 2 0 0 18 012 0 0 3g(3)=62+0=62;对C2进行归约,得h(3)=0;于是f(3)=62。62对结点2的另外两个儿子进行同样的计算,得:f(4)=
35、84,f(5)=72。484572下面对f(3)=62的结点3进行扩展。它有两个后继结点。345对结点4,g(4)=62+2=64。0h(4)=12,于是f(4)=64+12=7676对结点5,g(5)=62+0=62。15 2 0 0 012 0 h(5)=0,于是f(5)=62+0=6262对结点5(f(5)=62)再进行扩展。54g(4)=62+0=62,h(4)=0,f(4)=62。62结点4是目标结点,找到了第一条路线。4这条路线的长度为62,以其为上界。其余未扩展的结点的评价函数值均超过上界,因而不再需要扩展了。于是找到了一条最短的周游路线:123541。C1C2C1r3的计算仍然
36、要用的计算仍然要用C1,故恢复,故恢复为为C1。下面与此相类似,不再。下面与此相类似,不再演示。演示。第38页,共45页,编辑于2022年,星期一2023/4/1438计算机算法设计与分析评价函数的程序设计对任意路线上结点d,定义其评价函数为:f(d)=g(d)+h(d),其中:g(d)=f(p)+Cppd,这里p为d的前驱结点,并规定g(1)=0;h(d)=rd。其中用到了d的前驱结点p的归约矩阵Cp。因此,评价函数的计算中需要用到的参数有:p、f(p)、Cp和d,计算的结果有f(d)和Cd。注意到Cp是与路径有关的,因此在p,f(p),*L中应增加Cp,改为p,f(p),*L,*Cp。第3
37、9页,共45页,编辑于2022年,星期一2023/4/1439计算机算法设计与分析评价函数的数据结构1、输入数据:考察的结点d:int d;前驱结点p:int p;前驱结点p的评价函数值:int fp;前驱结点p的归约矩阵:Cpnn;2、输出数据:结点d的评价函数值;前驱结点d的归约矩阵:Cdnn;第40页,共45页,编辑于2022年,星期一2023/4/1440计算机算法设计与分析评价函数的计算过程评价函数的计算如下:1、g(d)=f(p)+Cppd;2、根据Cp计算约数rd和归约矩阵Cdnn;3、f(d)=g(d)+rd。将Cd赋值为Cp;将Cd的第p行和第d列都置为;对Cd求归约数rd并
38、进行归约。将求代价矩阵的约数和将求代价矩阵的约数和归约矩阵的计算单独作归约矩阵的计算单独作为一个子程序。为一个子程序。此举是为了初始化。此举是为了初始化。可融入可融入和和中中实现。实现。第41页,共45页,编辑于2022年,星期一2023/4/1441计算机算法设计与分析TSP分支限界法的再修改Branch-bounding-for-TSP(n,*C)需要做如下修改,以适应评价函数的计算:1、结点的数据结构中应增加其对应的归约矩阵,即改为p,f(p),*L,*Cp。2、初始化时要增加C的约数r和及其规约矩阵的计算。3、在扩展结点p的工作中,应该在计算f(d)之前,为d生成其规约矩阵的空间。第4
39、2页,共45页,编辑于2022年,星期一2023/4/1442计算机算法设计与分析分支限界法的效率从TSP问题的计算可看出,分支限界法搜索的状态空间为O(2n)。对每个结点的计算时间为O(n2)。因此在最坏情况下,分支限界法计算TSP的时间复杂性为O(n22n)。显然,用分支限界法计算TSP的空间复杂性为O(n22n)。因为对每个结点需要n2的空间。第43页,共45页,编辑于2022年,星期一2023/4/1443计算机算法设计与分析对评价函数的讨论分支限界法总耗时为O(n22n),它与回溯法、动态规划法等在时间复杂性上没有本质的区别。然而,如果评价函数选择得好,采用分支限界法可能有一个小得多
40、的常数因子。好的评价函数应该有一个尽可能高的下界估计和一个尽可能低的上界估计,从而使得搜索空间能够得到有效的压缩,从而提高效率。在理论上可以证明好的评价函数所搜索的结点不会多于坏的评价函数所搜索的结点。第44页,共45页,编辑于2022年,星期一2023/4/1444计算机算法设计与分析分支限界法小结分支限界法是最佳优先(包括广度优先在内)的搜索法,也是一种较为通用的算法。其搜索的控制是采用有序的队列,即每次优先搜索评价函数值最小的结点,从而希望较快地找到最佳的路径或排列。与其它算法相比,时间复杂性无本质区别。但好的评价函数可有小的常数,提高了效率。评价函数应该能正确有效地压缩状态空间。第45页,共45页,编辑于2022年,星期一2023/4/1445计算机算法设计与分析