




已阅读5页,还剩66页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章回溯法,学习要点:理解回溯法的深度优先搜索策略理解剪枝函数(约束函数和限界函数)的作用掌握回溯法解题的算法框架(1)递归回溯的算法框架(2)迭代回溯的算法框架(3)蒙特卡罗方法进行效率分析通过应用范例学习回溯法的设计策略。(1)n-皇后问题(2)子集和数问题(3)图的着色(4)哈密顿环(5)0/1背包,章节内容:8.1一般方法8.2n-皇后8.3子集和数8.4图的着色8.5哈密顿环8.60/1背包,8.1回溯法的一般方法,回溯法是比贪心法和动态规划法更一般的方法。解为n-元组(x0,x1,.,xn-1)形式。通过搜索状态空间树来求问题的可行解(满足约束条件)或最优解(使目标函数取最大或最小值)。使用约束函数和限界函数来压缩需要实际生成的状态空间树的结点数。通常情况下,回溯法是为了找出满足约束条件的所有可行解。,问题的解空间,回溯法要求问题的解向量具有n-元组(x0,x1,xn-1)的形式,每个解分量xi从一个给定的集合Si取值。显式约束:规定每个xi取值的约束条件。(显式约束规定了问题的候选解集解空间),对于问题的一个实例,解向量满足显式约束条件的所有多元组,构成了该实例的一个解空间。,通常情况下,回溯法的求解目标是在状态空间树上找出满足约束条件的所有可行解.,隐式约束:给出了判定一个候选解是否为可行解的条件。为满足问题的解而对不同分量之间施加的约束。,目标函数(代价函数):衡量每个可行解的优劣,使目标函数取最大(或最小)值的可行解为问题的最优解。,例如(例8-1):对n个元素(a0,a1,an-1)进行排序,求元素下标(0,1,n-1)的一种排列X=(x0,x1,xn-1)。使(0in-1),一种方法:显式约束:xiSi,Si=0,1,.,n-1。此时解空间大小为nn。隐式约束:(0in-1),且xixj(ij),另一种方法:显式约束:xiSi,Si=0,1,.,n-1且xixj(ij)。此时解空间大小为n!。隐式约束:(0i=0)if(还剩下尚未检测的xk,使得xkT(x0,.,xk-1)/回溯到上一层,回溯法的效率分析,用蒙特卡罗(MonteCarlo)方法估计回溯法处理实例时,实际生成的结点数:在状态空间树中,从根开始随机选择一条路径(x0,x1,.,xn-1);假定搜索树中这条随机选出的路径上,代表部分向量(x0,x1,.,xk-1)的结点X处不受限制的孩子数目,和其他路径上与X同层的的结点不受限制的孩子数目一样,都是mk;则可以估计整个状态空间树上实际生成的结点数为:m=1+m0+m0m1+m0m1m2+.,回溯法的时间通常取决于:状态空间树上实际生成的那部分问题状态的数目(即:结点总数)。,程序8-3蒙特卡罗算法intEstimate(SType*x)intk=0,m=1,r=1;doSetTypeS=xk|xkT(x0,.,xk-1),当前总结点数只有根结点1个,本层结点数为1,解分量下标,8.2n-皇后问题,在nn格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在nn格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。,第一种显式约束观点:显式约束:xi=0,1,2,n-1隐式约束:当ij时,1)不同列:xixj2)不处于同一正、反对角线:|i-j|xi-xj|对应的解空间大小为:nn,第二种显式约束观点:显式约束:1)xi=0,1,2,n-12)不同列:xixj(ij)隐式约束:不处于同一正、反对角线:|i-j|xi-xj|(ij)对应的解空间大小为:n!,解向量:(x0,x1,xn-1),其中xi表示第i行的皇后所处的列号。,(采用第二种显式约束观点的)约束函数:当ij时,要求1)不同列:xixj2)不处于同一正、反对角线:|i-j|xi-xj|4-皇后问题状态空间树见P180图8-3(排列树),1)xi=0,1,2,n-12)不同列:xixj(ij),第一种显式约束观点:显式约束:xi=0,1,2,n-1隐式约束:当ij时,1)不同列:xixj2)不处于同一正、反对角线:|i-j|xi-xj|对应的解空间大小为:nn,第二种显式约束观点:显式约束:1)xi=0,1,2,n-12)不同列:xixj(ij)隐式约束:不处于同一正、反对角线:|i-j|xi-xj|(ij)对应的解空间大小为:n!,解向量:(x0,x1,xn-1),其中xi表示第i行的皇后所处的列号。,(采用第一种显式约束观点)设计约束函数:对0i,jk,当ij时,要求xixj且|i-j|xi-xj|可得程序8-4求n-皇后问题的全部可行解(见下页),xi=0,1,2,n-1,程序8-4n-皇后问题的回溯算法boolPlace(intk,inti,int*x)/约束函数(隐式)/判断当前第k行皇后是否可放在第i列位置for(intj=0;jk;j+)if(xj=i)|(abs(xj-i)=abs(j-k)returnfalse;/检查与前面已选定的0k-1行皇后是否冲突。若有皇后(j行xj列)/与当前皇后(k行i列)在同一列或斜线上,则冲突,返回false。returntrue;voidNQueens(intk,intn,int*x)/为第k行皇后选择可放置的列for(inti=0;in;i+)/显式约束(尝试所有可选列数0n-1)if(Place(k,i,x)/约束函数(隐式)xk=i;if(k=n-1)for(i=0;in;i+)coutxi“”;/输出一个可行解coutendl;elseNQueens(k+1,n,x);/深度优先进入下一层,若0n-1列均已检查完毕,则自然回溯至上层调用处。,程序8-4n-皇后问题的回溯算法boolPlace(intk,inti,int*x)/约束函数(隐式)/判断当前第k行皇后是否可放在第i列位置for(intj=0;jk;j+)if(xj=i)|(abs(xj-i)=abs(j-k)returnfalse;/检查与前面已选定的0k-1行皇后是否冲突。若有皇后(j行xj列)/与当前皇后(k行i列)在同一列或斜线上,则冲突,返回false。returntrue;voidNQueens(intk,intn,int*x)/为第k行皇后选择可放置的列for(inti=0;in;i+)/显式约束(尝试所有可选列数0n-1)if(Place(k,i,x)/约束函数(隐式)xk=i;if(k=n-1)for(i=0;in;i+)coutxi“”;/输出一个可行解coutendl;elseNQueens(k+1,n,x);/深度优先进入下一层,图8-6显示了图8-3中,4-皇后问题在得到第一个答案状态即终止时实际生成的那部分状态空间树。,图8-5显示了4-皇后问题得到第一个解的步骤:,思考题:请画出如程序8-4得到所有可行解才终止时,实际生成的状态空间树(由图8-3中来):,。?,时间分析,以程序8-4求解8-皇后问题为例,运用蒙特卡罗方法估计实际生成的结点数:如果随机生成的5条路径分别为:(1,3,0,2,4),(3,5,2,4,6,0),(0,7,5,2,6,1,3),(0,2,4,1,3)和(2,5,1,6,0,3,7,4)。选择(1,3,0,2,4)路径时,生成树上实际生成的结点数目为:(见图8-7a)1+8+8*5+8*5*4+8*5*4*3+8*5*4*3*2=1649同理,其他几条路径分别实际生成的结点数目为:(见图8-7b-e)769、1401、1977、2329。因此这5条随机路径实际生成的结点数平均值为1625。而8-皇后问题状态空间树的结点总数为:1+8+8*7+8*7*6+.+8*7*6*5*4*3*2*1=109601因此,需要实际生成的结点数目大约占总结点数的1.55%。,课外作业,如何修改P180程序8-4,使之在求得第一个可行解后算法终止?,若采用:可变长度k元组(x0,x1,.,xk-1),0kn表示解,元组的每个分量为入选正数的下标。显式约束为:xij|j是整数且0jn且xixi+1(0in-1)(条件xixi+1可以避免产生重复子集)隐式约束为:n=4时子集和数问题的(可变长度元组解)状态空间树见下页:,8.3子集和数,(例8-2)设有n=4个正数的集合W=w0,w1,w2,w3=(11,13,24,7)和正整数M=31,求W所有满足条件的子集,使得子集中的正数之和等于M。,问题描述:已知n个不同正数wi的集合,求该集合的所有满足条件的子集,使每个子集中正数的和等于一个给定的正数M。,图8-8子集和数问题(可变元组解)状态空间树,每个问题状态都是一个解状态,代表一个候选解元组。,若采用:固定长度n元组(x0,x1,.,xn-1)表示解,xi0,1,0in。(xi=0,表示wi未入选子集;xi=1,表示wi入选子集。)则显式约束为:xi0,1(0in-1)隐式约束为:n=4时子集和数问题的(固定长度元组解)状态空间树见下页:,图8-9子集和数问题(固定长度元组解)状态空间树,子集树,每个叶结点是一个解状态,代表一个候选解元组。非叶结点代表部分向量。,若条件满足,表示以(x0,x1,.,xk-1)为根的子树上可能包含答案结点。否则,对(x0,x1,.,xk-1)剪枝。,(采用固定长度元组解)在确定xk-1的取值(0或1)之前,对即将生成的结点(x0,x1,.,xk-1),应判断是否满足约束函数Bk(x0,x1,.,xk):,程序8-5(见下页)前置条件:(若wi已按非减次序排列)后置条件:在以(x0,x1,.,xk)为根的子树上搜索答案结点。,程序8-5子集和数的回溯算法voidSumOfSub(floats,intk,floatr,int*x,floatm,float*w)/s为已选择的元素和,r为剩余元素和,k为即将选择的元素下标/m为子集和数,w为权值元组,x为解元组xk=1;if(s+wk=m)/xk=1若得到一个可行解for(intj=0;j=m)/则沿右子树向下层搜索,由于进入最后一层结点时,必定满足前提条件:s+wn-1m且s+rm。而此时仅剩物品n-1可选,r=wn-1。因此必有s+wn-1=s+r=m。所以,只要进入最后一层结点,函数总能终止;否则不可能进入该层。因此,不用通过判断k是否大于n-1来终止程序。,因(s+wk)+(r-wk)=s+r值未变,因此省略判断。,(例8-3)设有n=6个正数的集合W=5,10,12,13,15,18和整数M=30,求W的所有元素之和为M的子集。,A,x0=1,0,0,73,5,1,68,15,2,58,5,2,58,15,3,46,15,4,33,17,3,46,B,5,3,46,5,4,33,0,1,68,10,2,58,0,2,58,10,3,46,10,4,33,12,3,46,12,4,33,12,5,18,C,0,3,46,13,4,33,0,4,33,A、B、C为三个答案状态(可行解),x0=0,x1=1,x1=0,x2=0,x3=0,x4=1,x2=0,x2=1,x3=1,x3=0,x2=0,x3=0,x1=1,x1=0,x2=1,x2=0,x3=1,x3=0,x3=0,x4=0,x5=1,作业,(例8-2)设有n=4个正数的集合W=11,13,24,7和正整数M=31,求W的所有元素之和为M的子集。,画出例8-2由SumOfSub算法实际生成的那部分状态空间树:,8.4图的着色,m-着色判定问题(m-colorabilitydecisionproblem):已知无向图G=(V,E)和m种不同的颜色,如果只允许使用这m种颜色对图G的结点着色,每个结点着一种颜色,问是否存在一种着色方案,使得图中任意相邻的两个结点都有不同的颜色。m-着色最优化问题(m-colorabilityoptimizationproblem):对给定的无向图G,求对图G的结点着色所需的最少颜色数m,使得图中任意两个相邻结点有不同的颜色。m称为图G的着色数(chromaticnumber)。,例如:,可用三种颜色着色,结点边上的数字代表颜色编号。,四色定理每幅(无飞地的)地图都可以用不多于4种颜色来着色,使得有共同边界的国家着不同的颜色。,一幅地图很容易用一个平面图G表示。(将地图的每个区域用图G的一个结点表示,若两个区域相邻,则相应的两个结点用一条边连接起来。)平面图的4-着色判定问题,平面图(planargraph):图的所有结点和边都能用某种方式画在一个平面上,且没有任何两条边相交。,一幅地图及其对应的平面图,采用n-元组(x0,x1,xn-1)表示图G的m-着色判定问题的解,并采用邻接矩阵表示无向图G=(V,E)。,显示约束:xi1,2,m,0in,表示结点i的颜色(xi=0表示没有可用的颜色)。隐式约束:如果边(i,j)E(即aij=1),ij,则xixj。解空间大小为mn。,n为平面图中的顶点个数,n=3,m=3的图的m-着色判定问题的状态空间树,约束函数:对所有顶点i和j(0i,jn,ij),若aij=1,则xixj。(1xi,xjm),颜色号,4个结点的图G,图G所有可能的3-着色方案,如:,m-着色算法实现,以深度优先方式生成状态空间树中的结点,寻找所有答案结点,即m-着色方案。搜索中使用约束函数剪去不可能包含答案结点的分枝。对给定的无向图G和m,列出图中结点所有可能的m-着色方案。图类MGraph用邻接矩阵表示图;函数mColoring为该类的公有成员函数;递归函数mColoring和NextValue为该类的私有成员函数。(NextValue为约束函数。),程序8-6图的m-着色算法templatevoidMGraph:mColoring(intm,int*x)mColoring(0,m,x);/从为x0分配颜色开始,(x0,.,xn-1)的初始值均为0,m-着色方案中指定的最多可用颜色数,程序8-6图的m-着色算法templatevoidMGraph:mColoring(intk,intm,int*x)/递归函数doNextValue(k,m,x);/(约束函数)每次为xk分配一个颜色,直到if(!xk)break;/xk已无适当颜色可选,则向上回溯if(k=n-1)/得到图G的一种m-着色方案for(inti=0;in;i+)coutxi;coutendl;elsemColoring(k+1,m,x);/深度优先搜索下一层,此时前k个结点已分配了颜色while(1);,程序8-6图的m-着色算法templatevoidMGraph:NextValue(intk,intm,int*x)/约束函数,每次为xk分配一个颜色/在1,m中为xk确定一个值最小的,且不与其邻接点冲突的颜色/颜色从1开始编号,若xk=0表示没有可用颜色doxk=(xk+1)%(m+1);/为xk尝试下一种颜色if(!xk)return;/直到尝试完所有m种颜色,没有可用的颜色为止for(intj=0;jk;j+)/检验当前选择的xk是否会造成冲突if(akj/xk与已选定的结点颜色x0xk-1无冲突,成功选择while(1);,算法的计算时间上界,由状态空间树的结点数确定。每个结点的处理时间即NextValue的执行时间O(mn)。因此:总时间为,8.5哈密顿环,哈密顿环(Hamiltonlancycle):连通图G=(V,E)中的一个回路,经过图中每个顶点,且只经过一次。,一个哈密顿环就是从某个结点v0开始,沿着图G的n条边环行的一条路径(v0,v1,.,vn-1,vn)。除v0=vn外,路径上其余结点各不相同。(vi,vi+1)E(0in)。它访问图中每个结点且仅访问一次,最后返回开始结点。,并不是每个连通图都存在哈密顿环!,图G1包含哈密顿环(0,1,7,6,5,4,3,2,0),图G2不包含哈密顿环,要确定一个连通图是否存在哈密顿环也没有容易的办法。,采用n-元组(x0,x1,xn-1)表示哈密顿环问题的解。,显示约束:xi0,1,n-1,0in,代表路径上一个结点的编号。隐式约束:xixj(0i,jn,ij),且(xi,xi+1)E(i=0,1,.,n-2),又(xn-1,x0)E。解空间大小为nn。,哈密顿环算法实现,求一个无向图或有向图的所有哈密顿环,并输出所有不相同的环。图类MGraph用邻接矩阵表示图;指定x0=0,即哈密顿环始终从顶点0开始,避免同一环被重复多次输出。因此公有成员函数Hamiltonian中以Hamiltonian(1,x)调用Hamiltonian私有递归函数;NextValue为约束函数。对最后一个结点xn-1,还需进一步要求(xn-1,x0)E,才能形成哈密顿环。,程序8-7哈密顿环算法templatevoidMGraph:Hamiltonian(int*x)Hamiltonian(1,x);/x0=0为约定的起始结点,不需选择。/因此从x1开始逐个选择x1xn-1的结点编号,(x0,.,xn-1)的初始值均为0,程序8-7哈密顿环算法templatevoidMGraph:Hamiltonian(intk,int*x)/递归函数doNextValue(k,x);/约束函数每次产生xk的下一个值,直到if(!xk)return;/xk已无可选值时向上回溯if(k=n-1)/哈密顿环中已包含图中所有的n个顶点,则输出该环for(inti=0;in;i+)coutxi;cout”0/n”;/哈密顿环的最后一个顶点,又回到起始点0elseHamiltonian(k+1,x);/深度优先搜索下一层,此时前k个结点编号已确定while(1);,程序8-7哈密顿环算法templatevoidMGraph:NextValue(intk,int*x)/约束函数,产生xk的下一个值/在1,n中选择路径上的下一个结点编号xk/满足(xk-1,xk)E,且xk与前k个已经选择的结点不同。doxk=(xk+1)%n;/产生xk的下一个值(结点编号)if(!xk)return;/直到尝试完所有n个结点,没有可选的结点编号为止if(axk-1xk)/若(xk-1,xk)是图中的一条边for(intj=0;jk;j+)/检验当前选择的xk与前k个结点是否相同if(xj=xk)break;/若xk与前k个结点有重复,尝试下一个结点if(j=k)/否则表示当前结点编号xk与前k个结点均不重复if(kn-1)|(k=n-1)/若xk的确可取,则取xk当前值/否则舍弃当前编号xk,尝试下一个结点while(1);,算法的计算时间上界估算,请参照图的着色问题!,8.60/1背包,n-皇后问题、子集和数问题、m-图着色问题、哈密顿环问题的求解目标都是求满足约束条件的全部可行解。0/1背包问题是最优化问题。,回溯法本质上是一种深度优先搜索状态空间树的算法。如果不引入剪枝函数(约束函数+限界函数),则是穷举算法。引入适当的限界函数,剪去已能确信不含最优答案结点的子树,使其成为一种启发式算法。,0/1背包问题是一个困难问题(难以设计最坏情况下可多项式时间求解的算法)。,显示约束:xi=1表示将第i件物品装入背包,xi=0表示第i件物品不装入背包。隐式约束:解空间大小为2n。解空间树为高度为n+1的满二叉树。,本节讨论采用固定长度元组解结构的0/1背包问题的回溯算法。0/1背包问题的解用n-元组表示:X=(x0,x1,.,xn-1)xi=0或1(0in),对左孩子(xk=1)起约束函数作用,可剪去不含可行解的分枝;对右孩子(xk=0)不需用约束函数判断,一定可行。,目标函数:,限界函数:状态空间树中任一结点X,若其上界函数值bp最优解值的下界估计值变量L,则可断定X子树上不含最优答案结点,可以剪去以X为根的子树。剪去不含最优解的分枝,上界函数:当前位于状态空间树的结点X处,cw为背包当前重量,cp为当前已装入背包物品的总收益,则贪心法求解剩余载重和剩余物品构成的一般背包问题(物品编号k+1,k+2,.,n-1,载重M-cw)最大收益为rp。则以X为根的子树上所有可能答案结点的目标函数值不可能超过bp=cp+rp,因此结点X的上界函数值为bp。,下界函数:变量L初值为0,遇到一个答案结点便计算该答案结点的收益值fp,且令L=maxL,fp。则L中始终保存迄今为止已经搜索到的答案结点中收益的最大值,0/1背包的最优解值必定大于等于L,因此最优解值的下界估计值为L。,例8-4设有0/1背包n=8,M=110,(w0,w1,.,w7)=(1,11,21,23,33,43,45,55),(p0,p1,.,p7)=(11,21,31,33,43,53,55,65)。按pi/wi非增排列,即pi/wipi+1/wi+1,(w0,w1,.,w7)=(1,11,21,23,33,43,45,55),(p0,p1,.,p7)=(11,21,31,33,43,53,55,65),M=110。,164.67,X,(w0,w1,.,w7)=(1,11,21,23,33,43,45,55),(p0,p1,.,p7)=(11,21,31,33,43,53,55,65),M=110。,164.67,163.81,(w0,w1,.,w7)=(1,11,21,23,33,43,45,55),(p0,p1,.,p7)=(11,21,31,33,43,53,55,65),M=110。,164.67,163.81,139,L=139,若得到最新可行解(到达状态空间树的第n+1层),则更新当前最优解下界值L。,164.67,163.81,139,L=139,向左走:更新值,bp值不变。用约束函数剪去不含可行解的分枝;向右走:更新bp的值,值不变。用限界函数bpL
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 遗传学课程内容更新与跨学科融合的创新模式
- 激励社会力量参与老年助餐服务的可行路径
- 心理健康课思维导图
- 石油化工企业经营管理方案
- 构建美育教育新生态的策略及实施路径
- 高中生自我控制与学业拖延的关系研究-学习投入的中介作用
- 大数据在旅游成本控制中的应用
- 关键岗位考试试题及答案
- 防暑安全教育试题及答案
- 刀工考试试题及答案
- DZ 0141-1994地质勘查坑探规程
- 2024 - 2025学年浙美版一年级下册美术期末考试试卷及答案
- 口腔合伙人合同协议书
- 2025年中国车载显示行业市场前景预测及投资价值评估分析报告
- DB32T3436-2018 智能信包箱运营管理服务规范
- 地下工程施工安全防范措施
- 商业银行领导力提升培训心得体会
- 校招中建八局面试题目及答案
- 高效规划优化工业园区的基础设施布局
- 新能源汽车基础知识培训课件
- 客户入厂安全培训
评论
0/150
提交评论