版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章 回溯法,算法设计与分析,算法,设计与分析,主编 耿国华,本章内容,5.1 回溯法基础 5.1.1 回溯法的基本思想 5.1.2 回溯法的解空间 5.1.3 回溯算法实现 5.1.4 回溯法的基本步骤 5.1.5 回溯法实例运动员最佳配对问题 5.2 子集和问题 5.3 n皇后问题 5.4 连续邮资问题 5.5 哈密顿回路 5.6 本章小结,Chapter,5,引言,在程序设计中,有很多问题是无法运用某种公式推导或采用循环的方法来求解的。假如完成某一件事需要经过若干步骤,而每一步又都有若干种可能的方案供选择,完成这件事就有许多方法。当需要在其中找出满足条件的最优解时,无法根据某些确定的计
2、算法则,而是利用试探和回溯的搜索策略。具有限界函数的深度优先生成法称为回溯法,用该方法求解问题时会按选优条件向前搜索,即系统搜索一个问题的所有解或任一解,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,既带有系统性又带有跳跃性。,Chapter,5,因此,它也是一种选优搜索法,采用走不通就退回再走的搜索技术。回溯法的本质是先序遍历一棵状态树过程,不是遍历前预先建立,而是隐含在遍历过程中,使用它可以避免穷举式搜索,适用于解一些组合数相当大的问题。回溯算法比前面介绍的其它方法复杂, 但它是程序设计中最重要的基础算法之一。,5.1 回溯法基础,Chapter,5,
3、5.1.1 回溯法的基本思想 5.1.2 回溯法的解空间 5.1.3 回溯算法实现 5.1.4 回溯法的基本步骤 5.1.5 回溯法实例运动员最佳配对问题,5.1.1回溯法的基本思想,先定义问题的解空间,然后在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任一结点时,总是先判断该结点是否肯定包含问题的解。如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先的策略进行搜索。这种以深度优先的方式系统地搜索问题解的算法为回溯法,它适用于求解解空间较大的问题。整个试探搜索的过程是由计算机完成的,所以对于搜索试探要避免
4、重复循环,即要对搜索过的结点做标记。 可见,回溯法就是“试探着走”。如果尝试不成 功则退回一步,再换一个办法试试。反复进行 这种试探性选择与返回纠错过程,直到求出问 题的解为止。,Chapter,5,5.1.2 回溯法解空间,1.问题的解空间 (1)解空间概念 问题的解向量 问题的解空间 问题的可行解 问题的最优解 显约束 隐约束,Chapter,5,5.1.2 回溯法解空间,算法5.1 用回溯法搜索子集树的一般算法框架 void backtrack (int t) if (tn) output(x); else for (int i=0;i=1;i+) xt=i; if (legal(t)
5、backtrack(t+1); ,Chapter,5,(2)解空间子集树,5.1.2 回溯法解空间,算法5.2 用回溯法搜索排列树的算法框架 void backtrack (int t) if (tn) output(x); else for (int i=t;i=n;i+) swap(xt, xi); if (legal(t) backtrack(t+1); swap(xt, xi); ,Chapter,5,(3)解空间树排列树,5.1.2 回溯法解空间,2.生成问题解空间的基本状态 扩展结点 活结点 死结点 深度优先的问题状态生成法:如果对一个扩展结点R,一旦产生了它的一个儿子C,就把C当
6、做新的扩展结点。在完成对子树C(以C为根的子树)的穷尽搜索之后,将R重新变成扩展结点,继续生成R的下一个儿子(如果存在)。,Chapter,5,5.1.2 回溯法解空间,3.回溯法搜索 确定了解空间的组织结构后,回溯法就从开始结点(根结点)出发,以深度优先搜索的方式搜索整个解空间。这个开始结点就成为一个活结点,同时也成为当前的扩展结点。在当前的扩展结点处,搜索向纵深方向移至一个新结点。这个新结点就成为一个新的活结点,并成为当前扩展结点。如果在当前的扩展结点处不能再向纵深方向移动,则当前的扩展结点就成为死结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结点成为当前的扩展结点。回溯法
7、即以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已无活结点时为止。 剪枝函数 一是用约束函数 二是用限界法,Chapter,5,5.1.2 回溯法解空间,例5.2 0-1背包问题的解空间树及其搜索过程。 问题描述:物品种数n=3,背包容量C=20,物品价值(p1,p2,p3)=(20,15,25),物体重量(w1,w2,w3)=(10,5,15),求X=(x1,x2,x3)使背包价值最大? 问题分析: 0-1背包问题的解空间树及其搜索过程如图5-3所示。,Chapter,5,5.1.3 回溯算法实现,1.实现回溯法的算法 回溯法是对解空间树的深度优先搜索法,通常有两种实现的算
8、法。 递归回溯:采用递归的方法对解空间树进行深度优先遍历来实现回溯。 迭代回溯:采用非递归迭代过程对解空间树进行深度优先遍历来实现回溯。,Chapter,5,5.1.3 回溯算法实现,算法5.3 用递归实现回溯的框架 void backtrack (int t) if (tn) output(x); else for (int i=f(n,t);i=g(n,t);i+) xt=h(i); if (constraint(t) ,Chapter,5,2.递归回溯,5.1.3 回溯算法实现,算法5.4 用非递归迭代实现回溯的框架 void iterativeBacktrack () int t=1;
9、 while (t0) if (f(n,t)=g(n,t) for (int i=f(n,t);i=g(n,t);i+) xt=h(i); if (constraint(t) ,Chapter,5,3.迭代回溯,5.1.4 回溯法解决问题的基本步骤,(1)对所给定的问题,定义问题的解空间:子集树问题,排列树问题和其他因素; (2)确定状态空间树的结构; (3)以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。其中深度优先方式可以选为递归回溯或者迭代回溯。,Chapter,5,5.1.5 回溯法的例子运动员最佳配对问题,问题描述 设一个羽毛球队有男女运动员各n人,给定2个n*n 矩
10、阵P 和Q, 其中P ij表示男运动员i 和女运动员j 配对组成混合双打时的竞赛优势,Qij则是女运动员i 和男运动员j 配对组成混合双打时的竞赛优势。由于技术的配合和心理状态等各种因素的影响,一般Pij不一定与Qji相等。设计一个算法, 计算出男女运动员的最佳配对方法,使各组男女双方竞赛优势乘积的总和达到最大。,Chapter,5,5.1.5 回溯法的例子运动员最佳配对问题,例如:运动员最佳配对问题: 图5-4竞争优势Pij 图5-5 竞争优势Qij 图5-6 混合竞争优势Fij=Pij*Qij,Chapter,5,最优搭配为: 男1女1, 男2女2, 男3女3. 最优搭配下的最大优势乘积的
11、总和是56,5.1.5 回溯法的例子运动员最佳配对问题,1定义问题的解空间 运动员最佳配对问题,当男女运动员各n 人时,假设固定男运动员的顺序,那么该问题的求解就是对n个女运动员的全排列问题,所以其解空间可以组织成一棵n+1 层的排列树,其中最后一层的叶子标志着一种配对方案的形成,无实际意义。,Chapter,5,5.1.5 回溯法的例子运动员最佳配对问题,2确定解空间树的结构 从根结点出发到该排列树的任一叶结点对应了一个运动员的配对方案, 其中第i层结点表示第i个男运动员, 从第i 层结点到第i+1层接点的连线表示与第i 个男运动员相配对的女运动员j(j 为连线上的标号) 。 图5-7 n=
12、3时的解空间,Chapter,5,5.1.5 回溯法的例子运动员最佳配对问题,3搜索解空间树 在解空间树中,若当前的层数in 时,则说明已经找到了一个运动员配对方案, 此时只需判断其是否是最优解,设用变量 cc 存放各组男女运动员双方竞赛优势乘积的总和,用变量bestc最优值,即存放竞赛优势乘积总和的最大值,在搜索过程中,cc 和bestc 中存放相应的当前值与当前最优值,此时若ccbestc,则说明当前的最优方案已不再最优, 此时就用找到的方案来更新当前的最优方案;否则仍然保持以前的最优值。,Chapter,5,若i n且ccbestc,则按照深度优先的策略继续往下搜索,否则,回溯到该结点的
13、父结点。上述过程一直地进行下去,直到所有路径均被检查过,就可以得到一个最优方案。,5.1.5 回溯法的例子运动员最佳配对问题,void backtrack(int i) int j; if (i n) if (ccbestc) for (j=0;j=n;j+) bestxj=xj; bestc=cc; else for(j=i;j=n;j+) swap( ,Chapter,5,4算法的设计与实现,算法 5.5 解运动员最佳配对问题的递归回溯法,5.2子集和问题,本节内容 1.定义问题的解空间 2.确定解空间树的结构 3.搜索解空间树 4.算法的设计与实现,Chapter,5,5.2 子集和问题
14、,问题描述 给定n个不同的正数集W=w(i)|1in和正数M,子集和问题是要求找出正数集W子集S,使该子集中所有元素的和为M,即 。例如当n=4,(w1,w2,w3,w4)=(11,13,24,7),M=31,则满足要求的子集(11,13,7)和(24,7)。,Chapter,5,5.2 子集和问题 定义问题的解空间,子集和问题是从n个元素的集合中找出满足某种性质的子集,其相应的解空间树为子集树。该问题的另一种表示是,每个解的子集由这样一个n元组(x1,x2,.,xn)表示,其中xi0,1,1in。如果解中含有wi,则直xi=1,否则xi=0。例如前面实例的解可以表示为(1,1,0,1)和(0
15、,0,1,1)。,Chapter,5,5.2 子集和问题 确定解空间树的结构,图5-8的树显示了n=4的子集和数的问题的一种解空间结构。,Chapter,5,图5-8 子集和问题的解空间结构,5.2 子集和问题 搜索解空间树,3搜索解空间树 为解决该问题可以使用递归回溯的方法来构造最优解,设cs为当前子集和,在解空间树中进行搜索时,若当前层in时,算法搜索至叶节点,其相应的子集和为cs。当cs=c,则找到了符合条件的解。 当i n时,当前扩展结点Z是子集树的内部结点。该结点有xi=1和xi=0两个儿子结点。其左儿子结点表示xi=1的情形。 剪枝函数 (1)约束函数 (2)限界函数,Chapte
16、r,5,5.2 子集和问题 算法的设计与实现,void Subsum:backtrack(int i) if (in) if (cs =c) for(int j=1;j=len;j+) if(xj =1) cout w j“ ”;/输出结果 coutendl; return ; r -= wi;,Chapter,5,4.算法的设计与实现,算法 5.6 解运动员最佳配对问题的递归回溯法,5.2 子集和问题 算法的设计与实现,if (cs+wi=c) /检测右子树 xi = 0; backtrack(i+1); /深度优先遍历 ,递归处理右子树 r+= wi;/递归退层时:将该段加入剩余路径r中
17、return ; ,Chapter,5,5.3 n皇后问题,本节内容 1.定义问题的解空间 2.确定解空间树的结构 3.搜索解空间树 4.算法的设计与实现,Chapter,5,5.3 n皇后问题,问题描述 N 皇后问题,是一个古老而著名的问题,是回溯算法的典型例题,可以简单的描述为 :在N*N格的棋盘上摆放N个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法?,Chapter,5,5.3 n皇后问题 定义问题的解空间,1定义问题的解空间 以8皇后为例,可以用一棵树表示8皇后问题的解空间。假设皇后i放在第i行上,8皇后问题可以表示成8元组(X1,X2,
18、,X8),其中Xi(i=1,2,8)表示皇后i所放位置的列号,此时该问题的解空间为8 个8元组。加上隐式约束条件:没有两个Xi相同,且不存在两个皇后在同一条对角线上,因此问题的解空间进一步减小为8!。由于8皇后问题的解空间为8!种排列,因此我们将要构造一棵排列树。,Chapter,5,5.3 n皇后问题,5.3 n皇后问题 确定解空间树的结构,2.确定解空间树的结构 n=4时问题的一种空间树结构。,Chapter,5,5.3 n皇后问题 确定解空间树的结构,确定解空间树的结构 具有限界函数的4皇后问题的状态空间树,Chapter,5,5.3 n皇后问题 确定解空间树的结构,皇后问题的解示例,C
19、hapter,5,4皇后问题的解图示,5.3 n皇后问题 搜索解空间树,3搜索解空间树 解n后问题的回溯算法可描述如下:求解过程从空配置开始。在第1列的m列为合理配置的基础上,再配置第m+1列,直至第n列也是合理时,就找到了一个解。在每列上,顺次从第一行到第n行配置,当第n行也找不到一个合理的配置时,就要回溯,去改变前一列的配置。 用元组x1:n表示皇后问题的解,xi表示皇后i放在第i 行的第xi列上,用完全叉树表示解空间。,Chapter,5,剪枝函数设计:对于两个皇后A(i,j)、B(k,i) 两个皇后不同行:i不等于k; 两个皇后不同列:j不等于i; 两个皇后不同一条斜线 |i-k|j-
20、i|,即两个皇后不处于同一条y=x+a或y=-x+a的直线上,5.3 n皇后问题 算法设计和实现,算法 5.7 解N后问题的递归回溯算法 int Queen:queen(int t) if(tn ,Chapter,5,4.算法设计和实现,5.3 n皇后问题 算法设计和实现,算法 5.8 解N后问题的非递归迭代回溯算法 void Queen:queen(void) x1 = 0; int t = 1; while(t0) xt += 1; while(xt=n) ,Chapter,5,5.4 连续邮资问题,本节内容 1.定义问题的解空间 2.确定解空间树的结构 3.搜索解空间树 4.算法的设计与
21、实现,Chapter,5,5.4 连续邮资问题,问题描述 假设某国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许贴m张邮票。对于给定的n和m的值,给出邮票面值的最佳设计,在1张信封上贴出从邮资1开始,增量为1的最大连续邮资区间。,Chapter,5,5.4 连续邮资问题,什么是连续邮资区间? 一张信封上贴出从邮资为1开始,增量为1的连续邮资区间。 (所以第一个邮票面值必为1) e.g.:n=2, m=3时,如果面值分别为1和2,则可得到的邮资值为 16,连续邮资区间为1,6,6即为可得到的连续邮资最大值;如果 面值分别为1和3时,可得到的邮资为17和9,连续邮资区间为 1,7,7即为
22、连续邮资最大值。,Chapter,5,5.4 连续邮资问题 定义问题的解空间树,1定义问题的解空间树 用n元组stampsvalue1:n表示n种不同的邮票面值,并约定它们从小到大排列,该问题需要找出最大连续邮资区间,和组成最大成邮资值的各种邮票面值,即从包含n个元素的集合中找出满足某个条件的子集,所以构造的解空间树是一个子集树,Chapter,5,5.4 连续邮资问题 确定解空间树的结构,2确定解空间树的结构 以n=3,m=3为例:,Chapter,5,1层第,2层第,3层第,4层第,5.4 连续邮资问题 搜索解空间树,3搜索解空间树 在解空间树中, 若当前的层数in 时,表示已搜索至一个叶
23、结点,得到一个新的邮票面值设计方案stampsValue 1:n。如果该方案能贴出的最大连续邮资区间大于当前已找到的最大连续邮资区间maxValue,则更新当前最优值maxValue和相应的最优解bestValue。,Chapter,5,当i=n时,当前扩展结点Z是解空间中的一个内部结点。在该结点处stampsValue 1:i-1能贴出的最大连续邮资区间为r-1。因此,在结点Z处,stampsValuei的可取值范围是stampsValue i-1+1:r,从而,结点Z有r-stampsValue i-1个儿子结点。算法对当前扩展结点Z的每一个儿子结点,以深度优先方式递归的对相应的子树进行搜
24、索。,5.4 连续邮资问题 算法设计和实现,算法5.9 最大连续邮资区间的回溯算法 void Stamp: conStamps (int i,int r) for(int j=0;jn) if(r-1maxValue) maxValue=r-1; for(int j=1;j=n;j+) bestValue j=stampsValuej; return; ,Chapter,5,4.算法设计和实现,5.4 连续邮资问题 算法设计和实现,int *z=new int maxl+1; for(int k=1;k=maxl;k+) zk= stampsNum k; for(int h=stampsVal
25、uei-1+1;h=r;h+) if(stampsNum r-hm) stampsValuei=h; conStamps (i+1,r+1); /*递归回溯第i+1层结点*/ for(int k=1;k=maxl;k+) stampsNum k=zk; delete z; ,Chapter,5,5.5哈密顿回路,本节内容 1.定义问题的解空间 2.确定解空间树的结构 3.搜索解空间树 4.算法的设计与实现,Chapter,5,5.5哈密顿回路,问题描述 设G=(V,E)是一个有n个节点的有向图或无向图,一条哈密顿回路是通过图中每个节点仅且一次的回路 问:给定一个图,求其是否存在一条哈密顿回路。如果是,输出每一条回路;否则给出提示。,Chapter,5,5.5哈密顿回路,例如图:,Chapter,5,第一个图中存在回路:1,2,8,7,6,5,4,3,1 第二个图中不存在,5.5哈密顿回路 定义问题的解空间,1.定义问题的解空间 所给问题是从n个元素的集合中找出满足某种性质的排列,因此,解空间可以组成一颗排列树,节点总数为n!, 遍历它至多需要O(n!)的计算时间。,Chapter,5,5.5哈密顿回路 确定解空间树的结构,2.确定解空间树的结构 用数组xn表示该问题的一组解,xi表示在一个可能回路上第 i 此访问的节点号。规定x1=1,假定已经选完了x1到xk-1,1k
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025安徽芜湖凤鸣控股集团有限公司及下属子公司招聘工作人员及专业技术人员笔试历年常考点试题专练附带答案详解
- 2026北京理工大学事业编制相关岗位招聘考试备考题库及答案解析
- 2025天津渤海国有资本投资有限公司面向社会选聘风控审计部(法务部)副部长1人笔试历年典型考点题库附带答案详解
- 2025国家电投集团中国重燃招聘18人笔试历年备考题库附带答案详解
- 2024-2025学年度电梯考试过关检测试卷含完整答案详解(全优)
- 2024-2025学年园林绿化作业人员练习题必考附答案详解
- 2025四川绵阳交发大道新材料科技有限责任公司招聘员工测试笔试历年难易错考点试卷带答案解析
- 2024-2025学年全国统考教师资格考试《教育教学知识与能力(小学)》考试彩蛋押题附参考答案详解(综合卷)
- 2025四川川藏医药服务有限公司劳派1名销售内勤拟聘用笔试历年典型考点题库附带答案详解
- 2024-2025学年度执业药师综合提升测试卷附完整答案详解(历年真题)
- 人音版《采花》教学设计
- PCI围术期强化他汀治疗的获益和机制课件
- 西宁市湟水河城区段水生态综合治理工程建设项目环评报告
- JJG 539-2016数字指示秤
- GB/T 33365-2016钢筋混凝土用钢筋焊接网试验方法
- 辽宁盘锦浩业化工“1.15”泄漏爆炸着火事故警示教育
- GB/T 14536.6-2008家用和类似用途电自动控制器燃烧器电自动控制系统的特殊要求
- GB/T 1408.3-2016绝缘材料电气强度试验方法第3部分:1.2/50μs冲击试验补充要求
- 《乡风文明建设》(王博文)
- 《安娜·卡列尼娜》-课件-
- 《中级电工培训》课件
评论
0/150
提交评论