算法回溯法学习.pptx





《算法回溯法学习.pptx》由会员分享,可在线阅读,更多相关《算法回溯法学习.pptx(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学习要点:理解回溯法的深度优先搜索策略理解剪枝函数(约束函数和限界函数)的作用掌握回溯法解题的算法框架(1)递归回溯的算法框架(2)迭代回溯的算法框架(3)蒙特卡罗方法进行效率分析通过应用范例学习回溯法的设计策略。(1)n-皇后问题(2)子集和数问题(3)图的着色(4)哈密顿环(5 5)0/10/1背包背包第1页/共71页章节内容:8.1 一般方法8.2 n-皇后8.3 子集和数8.4 图的着色8.5 哈密顿环8.6 0/1背包第2页/共71页8.1 回溯法的一般方法l回溯法是比贪心法和动态规划法更一般的方法。l解为n-元组(x0,x1,.,xn-1)形式。l通过搜索状态空间树来求问题的可行解
2、(满足约束条件)或最优解(使目标函数取最大或最小值)。l使用约束函数和限界函数来压缩需要实际生成的状态空间树的结点数。l通常情况下,回溯法是为了找出满足约束条件的所有可行解。第3页/共71页问题的解空间 回溯法要求问题的解向量具有n-元组(x0,x1,xn-1)的形式,每个解分量xi从一个给定的集合Si取值。l显式约束:规定每个xi取值的约束条件。(显式约束规定了问题的候选解集解空间)对于问题的一个实例,解向量满足显式约束条件的所有多元组,构成了该实例的一个解空间。通常情况下,回溯法的求解目标是在状态空间树上找出满足约束条件的所有可行解.l隐式约束:给出了判定一个候选解是否为可行解的条件。为满
3、足问题的解而对不同分量之间施加的约束。l目标函数(代价函数):衡量每个可行解的优劣,使目标函数取最大(或最小)值的可行解为问题的最优解。第4页/共71页例如(例8-1):对n个元素(a0,a1,an-1)进行排序,求元素下标(0,1,n-1)的一种排列X=(x0,x1,xn-1)。使 (0in-1)一种方法:l显式约束:x xi i S Si i,S Si i=0,1,.,n-1=0,1,.,n-1。此时。此时解空间大小为nn。l隐式约束:(0in-1)(0in-1),且,且x xi i x xj j(i(i j)j)另一种方法:l显式约束:x xi i S Si i,S Si i=0,1,.
4、,n-1=0,1,.,n-1且且x xi ixxj j(ij)(ij)。此时此时解空间大小为n!。l隐式约束:(0in-1)(0i=0)if(还剩下尚未检测的xk,使得xkT(x0,.,xk-1)&Bk(x0,.,xk)if(x0,x1,.,xk)是一个可行解)输出(x0,x1,.,xk);/输出可行解 k+;/深度优先进入下一层 else k-;/回溯到上一层 第12页/共71页回溯法的效率分析用蒙特卡罗(Monte Carlo)方法估计回溯法处理实例时,实际生成的结点数:在状态空间树中,从根开始随机选择一条路径(x0,x1,.,xn-1);假定搜索树中这条随机选出的路径上,代表部分向量(x
5、0,x1,.,xk-1)的结点X处不受限制的孩子数目,和其他路径上与X同层的的结点不受限制的孩子数目一样,都是mk;则可以估计整个状态空间树上实际生成的结点数为:m=1+m0+m0m1+m0m1m2+.回溯法的时间通常取决于:状态空间树上实际生成的那部分问题状态的数目(即:结点总数)。第13页/共71页程序8-3 蒙特卡罗算法int Estimate(SType*x)int k=0,m=1,r=1;do SetType S=xk|xkT(x0,.,xk-1)&Bk(x0,.,xk)=true;if(!Size(S)return m;/终止条件 r=r*Size(S);/r为本层中未受限结点总数
6、的估计值 m=m+r;/m为状态空间树中结点总数的估计值 xk=Choose(S);/从集合S中为xk随机选择一个值/由xk向下继续生成随机路径 k+;while(1);当前总结点数只有根结点1个本层结点数为1解分量下标第14页/共71页8.2 n-皇后问题在nn格的棋盘上放置彼此不受攻击的n个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在nn格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。1 2 3 4 5 6 7 812345678QQQQQQQQ第15页/共71页 第一种显式约束观点:l显式约束:xi=0,1,2,n
7、-1l隐式约束:当ij时,1)不同列:xixj 2)不处于同一正、反对角线:|i-j|xi-xj|对应的解空间大小为:nn 第二种显式约束观点:l显式约束:1)xi=0,1,2,n-1 2)不同列:xixj(ij)l隐式约束:不处于同一正、反对角线:|i-j|xi-xj|(ij)对应的解空间大小为:n!解向量:(x0,x1,xn-1),其中xi表示第i行的皇后所处的列号。第16页/共71页(采用第二种显式约束观点的)约束函数:当ij时,要求1)不同列:xixj2)不处于同一正、反对角线:|i-j|xi-xj|4-皇后问题状态空间树见P180 图8-3(排列树)1)xi=0,1,2,n-12)不
8、同列:xixj(ij)第17页/共71页 第一种显式约束观点:l显式约束:xi=0,1,2,n-1l隐式约束:当ij时,1)不同列:xixj 2)不处于同一正、反对角线:|i-j|xi-xj|对应的解空间大小为:nn 第二种显式约束观点:l显式约束:1)xi=0,1,2,n-1 2)不同列:xixj(ij)l隐式约束:不处于同一正、反对角线:|i-j|xi-xj|(ij)对应的解空间大小为:n!解向量:(x0,x1,xn-1),其中xi表示第i行的皇后所处的列号。第18页/共71页(采用第一种显式约束观点)设计约束函数:对0i,jk,当ij时,要求 xixj 且|i-j|xi-xj|可得程序8
9、-4 求n-皇后问题的全部可行解(见下页)xi=0,1,2,n-1第19页/共71页程序8-4 n-皇后问题的回溯算法bool Place(int k,int i,int*x)/约束函数(隐式)/判断当前第k行皇后是否可放在第i列位置 for(int j=0;jk;j+)if(xj=i)|(abs(xj-i)=abs(j-k)return false;/检查与前面已选定的 0k-1 行皇后是否冲突。若有皇后(j行 xj列)/与当前皇后(k行 i列)在同一列或斜线上,则冲突,返回false。return true;void NQueens(int k,int n,int*x)/为第k行皇后选择可
10、放置的列 for(int i=0;in;i+)/显式约束(尝试所有可选列数0n-1)if(Place(k,i,x)/约束函数(隐式)xk=i;if(k=n-1)for(i=0;in;i+)coutxi“”;/输出一个可行解 coutendl;else NQueens(k+1,n,x);/深度优先进入下一层 若0n-1列均已检查完毕,则自然回溯至上层调用处。第20页/共71页程序8-4 n-皇后问题的回溯算法bool Place(int k,int i,int*x)/约束函数(隐式)/判断当前第k行皇后是否可放在第i列位置 for(int j=0;jk;j+)if(xj=i)|(abs(xj-i
11、)=abs(j-k)return false;/检查与前面已选定的 0k-1 行皇后是否冲突。若有皇后(j行 xj列)/与当前皇后(k行 i列)在同一列或斜线上,则冲突,返回false。return true;void NQueens(int k,int n,int*x)/为第k行皇后选择可放置的列 for(int i=0;in;i+)/显式约束(尝试所有可选列数0n-1)if(Place(k,i,x)/约束函数(隐式)xk=i;if(k=n-1)for(i=0;in;i+)coutxi“”;/输出一个可行解 coutendl;else NQueens(k+1,n,x);/深度优先进入下一层
12、此处返回for循环中当前层,搜索剩余列。因此可输出所有可行解。第21页/共71页图8-6 显示了图8-3中,4-皇后问题在得到第一个答案状态即终止时实际生成的那部分状态空间树。011131312313911142192030218242916313022158BBBBBBBans第22页/共71页图8-5 显示了4-皇后问题得到第一个解的步骤:QQQQQQQQQQQQQQQQQQ第23页/共71页思考题:请画出如程序8-4得到所有可行解才终止时,实际生成的状态空间树(由图8-3中来):011131312313911142192030218242916313022158BBBBBBBans。?第
13、24页/共71页时间分析以程序程序8-48-4求解8-8-皇后问题皇后问题为例,运用蒙特卡罗方法估计实际生成的结点数:如果随机生成的5条路径分别为:(1,3,0,2,4)(1,3,0,2,4),(3,5,2,4,6,0)(3,5,2,4,6,0),(0,7,5,2,6,1,3)(0,7,5,2,6,1,3),(0,2,4,1,3)(0,2,4,1,3)和(2,5,1,6,0,3,7,4)(2,5,1,6,0,3,7,4)。选择(1,3,0,2,4)路径时,生成树上实际生成的结点数目为:(见图见图8-7 8-7 a a)1+8+8*5+8*5*4+8*5*4*3+8*5*4*3*2=164916
14、49同理,其他几条路径分别实际生成的结点数目为:(见图见图8-7 b-e8-7 b-e)769769、14011401、19771977、23292329。因此这5条随机路径实际生成的结点数平均值为16251625。而8-皇后问题状态空间树的结点总数为:1+8+8*7+8*7*6+.+8*7*6*5*4*3*2*1=109601109601因此,需要实际生成的结点数目大约占总结点数的1.55%1.55%。第25页/共71页课外作业如何修改修改P180 P180 程序程序8-48-4,使之在求得第一个可行解后算法终止求得第一个可行解后算法终止?第26页/共71页l l若采用:可变长度若采用:可变
15、长度k k元组元组(x(x0 0,x,x1 1,.,x,.,xk-1k-1),),0 0knkn表示解,元组的每表示解,元组的每个分量为个分量为入选正数的下标入选正数的下标。l l显式约束为显式约束为:x xi i j|j j|j是整数且是整数且0 0jjn n 且且 x xi ixxi+1i+1(0(0iin-1)n-1)(条件条件x xi ixxi+1i+1可以避免产生重复子集)可以避免产生重复子集)隐式约束隐式约束为:为:l ln=4n=4时子集和数问题的(时子集和数问题的(可变长度可变长度元组解)元组解)状态空间树状态空间树见下页:见下页:8.3 子集和数(例(例8-28-2)设有设有
16、n=4n=4个正数的集合个正数的集合W=wW=w0 0,w,w1 1,w,w2 2,w,w3 3=(11,13,24,7)=(11,13,24,7)和和正整数正整数M=31M=31,求,求WW所有满足所有满足条件的子集,使得子集中的正数之和等于条件的子集,使得子集中的正数之和等于MM。问题描述:已知n个不同正数wi的集合,求该集合的所有满足条件的子集,使每个子集中正数的和等于一个给定的正数M。第27页/共71页图8-8 子集和数问题(可变元组解)状态空间树03123331239813431022313161415612112357每个问题状态都是一个解状态,代表一个候选解元组。第28页/共71
17、页 若采用:固定长度若采用:固定长度n n元组元组(x(x0 0,x,x1 1,.,x,.,xn-1n-1)表示解,xi0,1,0in。(xi=0,表示wi未入选子集;xi=1,表示wi入选子集。)则显式约束显式约束为:x xi i 0,1 0,1 (0in-1)隐式约束隐式约束为:n=4时子集和数问题的(固定长度元组解)状态空间树状态空间树见下页:第29页/共71页图8-9 子集和数问题(固定长度元组解)状态空间树子集树每个叶结点是一个解状态,代表一个候选解元组。非叶结点代表部分向量。101101021826273031 2601611010412132917 140151011010567
18、11809110101920212425 22023103101第30页/共71页l若条件满足,表示以(x0,x1,.,xk-1)为根的子树上可能包含答案结点。l否则,对(x0,x1,.,xk-1)剪枝。(采用固定长度元组解)在确定xk-1的取值(0或1)之前,对即将生成的结点(x0,x1,.,xk-1),应判断是否满足约束函数Bk(x0,x1,.,xk):(n个正数wi已按非减次序排列)若约束函数Bk(x0,x1,.,xk)=True,则生成该结点,并进入考察(x0,x1,.,xk)子树的过程。第31页/共71页程序8-5(见下页)前置条件:(若wi已按非减次序排列)后置条件:在以(x0,x
19、1,.,xk)为根的子树上搜索答案结点。第32页/共71页程序8-5 子集和数的回溯算法void SumOfSub(float s,int k,float r,int*x,float m,float*w)/s为已选择的元素和,r为剩余元素和,k为即将选择的元素下标/m为子集和数,w为权值元组,x为解元组xk=1;if(s+wk=m)/xk=1若得到一个可行解 for(int j=0;j=k;j+)coutxj;coutendl;else if(s+wk+wk+1=m)&(s+wk+1=m)/xk=0,同时约束函数Bk+1为真 xk=0;SumOfSub(s,k+1,r-wk,x,m,w);/则
20、沿右子树向下层搜索 由于进入最后一层结点时,必定满足前提条件: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值未变,因此省略判断。第33页/共71页(例8-3)设有n=6个正数的集合W=5,10,12,13,15,18和整数M=30,求W的所有元素之和为M的子集。Ax0=10,0,735,1,6815,2,585,2,5815,3,4615,4,3317,3,46B5,3,465,4,330,1,6
21、810,2,580,2,5810,3,4610,4,3312,3,4612,4,3312,5,18C0,3,4613,4,330,4,33A、B、C为三个答案状态(可行解)x0=0 x1=1x1=0 x2=0 x3=0 x4=1x2=0 x2=1x3=1x3=0 x2=0 x3=0 x1=1x1=0 x2=1x2=0 x3=1x3=0 x3=0 x4=0 x5=1第34页/共71页作业(例8-2)设有n=4个正数的集合W=11,13,24,7和正整数M=31,求W的所有元素之和为M的子集。画出例8-2由SumOfSub算法实际生成的那部分状态空间树:第35页/共71页8.4 图的着色m-m-着
22、色判定问题着色判定问题(m-colorability decision problem):已知无向图无向图G=(V,E)G=(V,E)和mm种不同的颜色种不同的颜色,如果只允许使用这m种颜色对图G的结点着色,每个结点着一种颜色,问是否存在是否存在一种着色方案,使得图中任意相邻的两个结点都有不同的颜色。任意相邻的两个结点都有不同的颜色。m-m-着色最优化问题着色最优化问题(m-colorability optimization problem):对给定的无向图G,求对图G的结点着色 所需的最少颜色数最少颜色数mm,使得图中任意两个相邻结点有不同的颜色。mm称为图图G G的着色数的着色数(chro
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 回溯 法学

限制150内