版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
旅行售货员问题
——计算复杂性理论介绍2023/5/241问题的描述
售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一次,最后回到驻地的路线,使总的路程(或总旅费)最小。
旅行售货员问题虽然易于被人理解,但其计算复杂度却是问题的输入规模的指数函数,是一个NP完全问题。2023/5/242问题的描述路线是一个带权图。图中各边的费用(权)为正数。图的一条周游路线是包括V中的每个顶点在内的一条回路。周游路线的费用是这条路线上所有边的费用之和。用图论的术语来描述旅行售货员问题:即在一个正权完全图中寻找一个具有最小权的哈密顿回路,对于此问题,由于完全图中必然存在哈密顿回路,目前可以用于求解的方法有枚举法,分枝限界法,这两种算法可以求得此问题的精确解,但到目前为止,还没有求解这一问题的有效算法,我们可以利用分支限界法,回溯法求解此问题的近似解,以求得与最优解最为接近的解。2023/5/243旅行售货员问题枚举法复杂度极高,可以求出精确解通过对问题的排列树的合理剪枝,大大缩减了问题需要求解的时间。可以求出精确解基于三角不等式性质等,进一步抽象求解过程,可以求出近似解,复杂度为多项式级别问题的精确解和近似解分支限界法NP问题近似算法回溯法
通过对排列树的剪枝,缩减问题需要的求解时间。可求精确解及近似解2023/5/244共有6条周游路线:(1,2,4,3,1)66(1,2,3,4,1)59(1,3,2,4,1)25(1,3,4,2,1)66(1,4,2,3,1)25(1,4,3,2,1)59设G=(V,E)是一个带权图。图中各边的权值为正数。图的一条周游路线是包括V中的每个顶点在内的一条回路。旅行售货员问题的解空间可以组织成一棵树,从树的根结点到任一叶结点的路径定义了图G的一条周游路线。周游路线的费用是这条路线上所有边的费用之和。旅行售货员问题要找出费用最小的周游路线。实例:4个城市n=4叶节点个数(周游线路)=(n-1)!枚举法6659256625592023/5/245从第一个城市到第二个城市有n-1种走法,从第二个城市到第三个城市有n-2种走法……因而共有(n-1)!种走法。若考虑v1v2…vnv1和v1
vn
vn-1…v2
v1是同一条回路,还共有(1/2)(n-1)!条不同的哈密顿回路。为了比较权的大小,对每条哈密顿回路要做n-1次加法,故加法的总数为(1/2)(n-1)(n-1)!。时间复杂度O(n!)
例如当有40个城市时,(1/2)(n-1)(n-1)!的近似值为3.77×10^47,假设一台计算机每秒完成1011次(百亿)次加法,将需要超过1.19×1029年才能完成所需的加法次数,显然是不可能的。算法效率2023/5/2461、有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。
2、回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。
3、回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含(剪枝过程),则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。生成问题状态的基本方法扩展结点:一个正在产生儿子的结点
活结点:一个自身已生成但其儿子还没有全部生成的结点
死结点:一个所有儿子已经产生的结点深度优先的问题状态生成法:如果对一个扩展结点R,一旦产生了它的一个儿子C,就把C当做新的扩展结点。在完成对子树C(以C为根的子树)的穷尽搜索之后,将R重新变成扩展结点,继续生成R的下一个儿子(如果存在)回溯法2023/5/247基本思想一.解空间树的动态搜索回溯法从根结点出发,按照深度优先策略遍历解空间树,搜索满足约束条件的解。初始时,根结点成为一个活结点,同时也称为当前的扩展结点。在当前扩展结点处,搜索向纵深方向移至一个新结点。这个新结点成为一个新的活结点,并成为当前的扩展结点。如果在当前的扩展结点处不能再向深方向移动,则当前的扩展结点就成为一个死结点。此时,应往回移动回溯至最近的一个活结点处,并使这个活结点成为当前的扩展结点。回溯法以这种工作方式递归地在解空间中搜索,直至找到所要求的解或解空间中已无活结点时为止。2023/5/248二.常用剪枝函数:用约束函数在扩展结点处剪去不满足约束的子树;用限界函数剪去得不到最优解的子树。为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(boundingfunction)来处死(剪枝)那些实际上不可能产生所需解的活结点,以减少问题的计算量。具有限界函数的深度优先生成法称为回溯法。回溯法=穷举+剪枝2023/5/249解空间树的动态搜索将图中n个顶点编号为1,2,…,n,以顶点1为起点,旅行回路描述为1,x1,x2,..,xn,1,其中x1,x2,..,xn为顶点2,3,4,…,n的1个排列,因此解空间大小为(n-1)!ABDHN2023/5/2410剪枝2023/5/2411算法描述旅行售货员问题的解空间是一棵排列树。开始时,x=[1,2,…,n]相应的排列树由x=[1:n]的所有排列构成。在递归算法Backtrack中,1.当i=n时,当前扩展节点是排列树的叶节点的父节点。①检测图G是否存在一条从顶点x[n-1]到顶点x[n]的边和一条从顶点x[n]到顶点1的边。②如果这两条边都存在,则找到一条旅行员售货回路。③此时,算法还需要判断这条回路的费用是否优于已找到的当前最优回流的费用bestc。④如果是,则必须更新当前最优值bestc和当前最优解bestx。2.当i<n时,当前扩展节点位于排列树的第i-1层。①图G中存在从顶点x[i-1]到顶点x[i]的边时,x[1:i]构成图G的一条路径,且当x[1:i]的费用小于当前最优值时算法进入树的第i层,②否则将剪去相应的子树。
2023/5/2412privatestaticvoidbacktrack(inti){ if(i==n){//当前扩展结点是排列树的叶结点的父结点 if(a[x[n-1]][x[n]]<max_value&&//顶点n-1和n之间有边a[x[n]][1]<max_value||
//顶点n到1之间有边cc+a[x[n-1]][x[n]]+a[x[n]][1]<bestc)){for(intj=1;j<=n;j++)bestx[j]=x[j];//得到最优解bestc=cc+a[x[n-1]][x[n]]+a[x[n]][1];//得到最优值}}else{//i<n,当前扩展结点位于第i-1层
cc:记录当前路径x[1:i]的费用a[][]:图G的邻接矩阵2023/5/2413for(intj=i;j<=n;j++)//搜索第i层的所有子树
//是否可进入x[j]子树?if(a[x[i-1]][x[j]]<max_value&&(bestc==max_value||cc+a[x[i-1]][x[j]]<bestc))
{//搜索子树swap(x,i,j);//交换x[i],x[j]的值cc+=a[x[i-1]][x[i]];backtrack(i+1);//进入下一层子树cc-=a[x[i-1]][x[i]];//还原cc的值swap(x,i,j);//还原x[i],x[j]的值}}}2023/5/2414Backtrack最坏情况下时间复杂度O((n-1)!)更新bestx时间复杂度O(n)
时间复杂度很高O(n!)
算法效率2023/5/24151.分支限界法基本思想
分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。在分支限界法中,每一个活结点只有一次机会成为扩展结点。①活结点一旦成为扩展结点,就一次性产生其所有儿子结点。在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。②此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程。这个过程一直持续到找到所需的解或活结点表为空时为止。
2.常见的两种分支限界法从活结点表中选择下一扩展结点的不同方式导致不同的(1)队列式(FIFO)分支限界法将活结点表组织成一个队列,并按队列的先进先出原则选取下一个结点为当前扩展结点(2)优先队列式分支限界法将活结点表组织成一个优先队列,并按优先队列中规定的结点优先级选取优先级最高的下一个结点为当前扩展结点
最大优先队列:使用最大堆,体现最大效益优先
最小优先队列:使用最小堆,体现最小费用优先分支限界法2023/5/24161.求解目标回溯法:找出解空间中满足约束条件的所有解分支限界法找出满足约束条件的一个解在满足约束条件的解中找出使某一目标函数值极大或极小的解分支限界法和回溯法一样都是在解空间上搜索问题解的算法2.搜索方式深度优先DFS回溯法:分支限界法广度优先BFS或最小损耗优先2023/5/2417C=301142662514592524算法描述:①
准备工作:建立小根堆,用于存储活动节点。计算每个顶点的最小出边,若存在某个顶点没有出边,则算法终止。初始化树根(顶点1)为第一个活动节点。
②判断节点是否是叶结点的父节点:是的话,则检查是否一定有最低耗费,若是加入小根堆;
③不是叶结点的父节点,则生成子节点,并判断子节点是否有可能取得最低耗费,若可能则加入小根堆;
④取出下一个节点作为活动节点,若该节点已经是叶结点,返回当前最低耗费值,即为最优旅行。若不是叶结点则循环2、3步。邻接矩阵2023/5/2418优先队列式分支限界法用极小堆存储活结点表E46DC30B被扩展后,它的三个儿子结点C,D,E被依次插入堆中D6C30D6C30JK1424E被扩展后,它的儿子结点J,K被依次插入当前堆中J14C30K24HJ1430K2411I26CKH1130J1424I26CD被扩展后,它的儿子结点H,I被依次插入当前堆中初始扩展结点为B,优先队列为空。2023/5/2419{};B{E,D,C};E{D,J,K,C};D{H,J,K,I,C};H{J,K,I,C};J{K,I,C};K{I,C};I{C};C{}.K被扩展后,得到可行解费用为59,高于当前最优解25H被扩展后,得到一条旅行售货员回路(1,3,2,4,1),相应的费用为25结点I本身的费用已高于当前最优解,故没必要扩展结点IIJ1430K2426CJ被扩展后,得到另一条费用为25的回路(1,4,2,3,1)K2426IC30I26C30C300结点C本身的费用也已高于当前最优解,故没必要扩展结点C此时,优先队列为空,算法终止。2023/5/2420NP问题近似算法从实际应用中抽象出的旅行售货员问题具有一些特殊性质。比如,费用函数c往往具有三角不等式性质,即对任意3个顶点u,v,w有c(u,v)<=c(u,v)+c(v,w)。当图G的顶点是平面上的点,且任意两顶点间的费用是这两点间的欧氏距离时,费用函数c具有三角不等式性质。可以证明,即使费用函数具有三角不等式性质,旅行售货员问题仍为NP完全问题。所以设计一个近似算法。当费用函数满足三角不等式时,该算法不会超过最优旅行售货员回路费用的2倍。在费用函数不一定满足三角不等式的一般情况下,不存在具有常数性能比的解TSP问题的多项式时间近似算法,除非P=NP。换句话说,若P≠NP,则对任意常数ρ>1,不存在性能比为ρ的解旅行售货员问题的多项式时间近似算法。
2023/5/2421NP问题近似算法voidapproxTSP(Graghg){(1)选择g的任意顶点r;(2)用Prim算法找出带权图g的一颗以r为根的最小生成树T;(3)前序遍历树T得到顶点表L;(4)将r加入到表L的末尾,按表L中顶点次序组成回路H,作为计算结果返回;}2023/5/2422NP问题近似算法(a)图G顶点集{abcdefgh)
(b)找到的最小生成树(MST)T完全遍历DFSabcbhbadefegeda
(c)对T作前序遍历的顺序abchdefga(d)L产生的哈密顿回路H取捷径生成解(e)G的一个最小费用旅行售货员回路2023/5/2423NP问题近似算法其中,a表示所给的图G顶点集;b表示由算法找到的一颗最小生成树T;c表示对树T所做的前序遍历访问各顶点的次序;d表示由T的前序遍历顶点表示L产生的哈密顿回路H;e表示图G的一个最小费用旅行售货员回路。
在b时,对T的完全遍历W={abcbhbadefegeda},还不是一个旅行售货员回路,它访问了图G中某些顶点多次。由于费用函数满足三角不等式,可以在W的基础上,从中删去已访问过的顶点,而不会增加旅行费用。若在W中删去顶点u和w间的一个顶点v,就用边(u,w)代替原来从u到w的一条路。反复用这个办法删去W中多次访问的顶点,可得到图G的一条旅行售货员回路H={abchdefga}。2023/5/2424总结(1)枚举法
枚举法是最差的一种算法,即将所有可能的结果都排列一次,并比较解与当前最优解的大小,因此其时间复杂度很高O(n!),在实际应用中当结点数很多时不可取。(2)回溯法
如果不考虑更新bestx所需的计算时间,则算法backtrack需要O
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业数据中心安全与防护指南(标准版)
- 小升初科学试卷及答案
- 企业市场营销管理规范手册
- 消防及应急培训题库答案
- 牧草栽培工春节假期安全告知书
- 讲解员节假日后复工安全考核试卷含答案
- 2025年会计事务所审计操作手册
- 海洋生物调查员春节假期安全告知书
- 酒店预订与入住管理流程
- 化妆培训课件封面设计图
- JCT 2126.1-2023 水泥制品工艺技术规程 第1部分:混凝土和钢筋混凝土排水管 (正式版)
- 高中地理选择性必修二知识点
- 航天禁(限)用工艺目录(2021版)-发文稿(公开)
- 人教版小学数学一年级下册全册同步练习含答案
- 加油站防投毒应急处理预案
- 闭合导线计算(自动计算表)附带注释及教程
- 项目1 变压器的运行与应用《电机与电气控制技术》教学课件
- 网店运营中职PPT完整全套教学课件
- 北师大版八年级数学下册课件【全册】
- 关于提高护士输液时PDA的扫描率的品管圈PPT
- 针入度指数计算表公式和程序
评论
0/150
提交评论