版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
回溯法第四章主讲人:杨圣云E-mail:yang@回溯法的思想回溯法是属于搜索法的一类算法,主要特点是在可能解空间的搜索过程中,根据某个条件回溯,再开启新的搜索,如此不断的重复,直至找到满足要求的一个解或所有解。回答以下四个问题:1、如何构建可能解空间?2、采用什么样的搜索过程?3、回溯条件是什么?4、什么是满足要求和终止条件?回溯法的简单示例简单全排列问题:对于集合
S={1,2,3}
,求它的三个元素的全排列。请先思考以下问题:1、如何构建可能解空间?一种可能解空间{X1,X2,X3}其中X1,X2,X3是集合S的任一元素。2、什么样的搜索过程?用三个for嵌套搜索这个可能解空间。3、回溯条件是什么?只要X1、X2、X3有两个相同就回溯(或者开启新的搜索)。4、什么是满足要求?X1、X2、X3不相同且前面没出现与他们一样的序列。回溯法的简单示例简单全排列问题:对于集合
S={1,2,3}
,求它的三个元素的全排列。intmain(){intnums[]={1,2,3};for(inti=0;i<3;i++){for(intj=0;j<3;j++){if(j==i)continue;for(intk=0;k<3;k++){if(k==i||k==j)continue;
//输出一个序列:nums[i],nums[j],nums[k]阅读这个代码段,思考并回答前面四个问题。通过简单示例理解算法思想!回溯法:求解全排列问题的框架简单全排列问题:对于集合
S={1,2,3…,n}
,求它的n个元素的全排列。请先思考以下问题:1、如何构建可能解空间?2、什么样的搜索过程?3、回溯条件是什么?4、什么是满足要求?新问题:有没有n变化,但代码不变的框架?for嵌套方式的代码,会因n变化而变化。回溯法:求解全排列问题的框架简单全排列问题:对于集合
S={1,2,3…,n}
,求它的n个元素的全排列。for嵌套方式的代码,会因n变化而变化。新问题:有没有n变化,但代码不变的框架?多叉树的深度优先遍历框架是一种好的不变框架!回溯法:求解全排列问题的框架简单全排列问题:对于集合
S={1,2,3…,n}
,求它的n个元素的全排列。多叉树的深度优先遍历框架是一种好的不变框架!对四个问题的回答:1、多叉树表示可能解空间。2、DFS进行搜索。3、回溯即对树的剪枝。4、满足要求即访问到叶子节点。回溯法:求解全排列问题的框架代码voidbacktrack(std::vector<int>&permutation){//如果当前的排列已经包含了所有的元素,那么就找到了一个新的排列if(permutation.size()==m){results.push_back(permutation);return;}//满足条件-4for(size_ti=0;i<nums.size();i++){//多叉树中同一层的兄弟节点-1,2if(visited[i]){continue;}//剪枝:开始搜索此节点的右兄弟,没有则父节点的右兄弟,如此逐级搜索-3visited[i]=true;permutation.push_back(nums[i]);
backtrack(permutation);//继续搜索它的子树,递归地生成剩余元素的所有排列-1,2visited[i]=false;//回溯,撤销前面的选择-3permutation.pop_back();//开始搜索此节点的右兄弟,没有则父节点的右兄弟,如此逐级搜索-3}}//理解并记住这个代码框架与四个问题的对应部分!!回溯法:求解组合问题现实世界的问题中,还有一大类问题,它们的最终解与元素顺序无关,但与是否包含某些元素有关,这类算法问题被称为是组合问题。简单示例:对于集合
S={1,2,3,...,N},求解集合S的所有可能组合(集合S的所有子集)。依照回溯法框架:构造可能解树、DFS遍历这棵树、回溯剪枝、终止条件?回溯法:求解组合问题依照回溯法框架:构造可能解树、DFS遍历这棵树、回溯、设置终止条件。构造具体问题的可能解树是一个难点,但在代码中这棵树是不存在的!回溯法:求解组合问题的框架代码voiddfs(intindex){
if(index==S.size()){result.push_back(currentSubset);return;}////如果索引等于集合的长度,返回结果//选择不包括当前元素在子集中dfs(index+1);//二叉树空节点的子树//选择包括当前元素在子集中currentSubset.push_back(S[index]);//二叉树实节点的子树dfs(index+1);//回溯:移除最后一个元素,回到它的父节点currentSubset.pop_back();}};//理解并记住这个代码框架代码与四个问题的对应部分!!回溯法:N-皇后问题N-皇后问题,其中需要在棋盘上安排皇后,使得它们互不攻击。这个问题的解决方案涉及到皇后的所有可能排列,并且每种排列都需要通过回溯法来检验是否有效!典型的多叉排列树表示可能解空间。回溯法:0-1背包问题0-1背包问题,它要求在不超过背包最大承重的情况下,从一系列具有不同重量和价值的物品中选择出最优组合。结果与元素的排列顺序无关,典型的组合问题,解空间树是一棵完全二叉树。回溯条件?终止条件?回溯法:物流派送问题已知n个城市的全连通矩阵T,要找出一个最短的可能物流派送路线,使得派送者访问每个城市一次并返回原始城市。排列问题?组合问题?20回溯法:物流派送问题排
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度高端住宅室内外清洁保养服务合同3篇
- 2024年度青海省公共营养师之四级营养师能力提升试卷A卷附答案
- 2024年度青海省公共营养师之二级营养师押题练习试卷B卷附答案
- 2024石材行业节能环保技术研发与应用合同3篇
- 2024年度陕西省公共营养师之二级营养师题库检测试卷B卷附答案
- 2025年度仓储物流场地租赁合同(含仓储管理服务)4篇
- 2025版环保设施运营维护管理承包合同范本4篇
- 二零二五年度企业进口货物代理报关合同范本3篇
- 二零二五年度企业园区门卫劳务派遣合同4篇
- 二零二五年度生态环保型绿化材料供应与施工合同4篇
- 钳工考试题及参考答案
- 移动商务内容运营(吴洪贵)任务五 引发用户共鸣外部条件的把控
- 工程造价专业职业能力分析
- 医药高等数学知到章节答案智慧树2023年浙江中医药大学
- 冲渣池施工方案
- 人教版初中英语八年级下册 单词默写表 汉译英
- 学校网络信息安全管理办法
- 中国古代文学史 马工程课件(下)21第九编晚清文学 绪论
- 2023年铁岭卫生职业学院高职单招(语文)试题库含答案解析
- 2205双相不锈钢的焊接工艺
- 2023年全国高中数学联赛江西省预赛试题及答案
评论
0/150
提交评论