网站大量收购独家精品文档,联系QQ:2885784924

(算法分析的设计)第5章回溯法.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(算法分析的设计)第5章回溯法.ppt

* 说明 1 2 4 3 5 5 1 2 3 4 地图 相应的平面图 * 搜索子集树的一般算法 void backtrack( int t) { if(tn) output(x); else for(int i=0;i=1;i++) { x[t]=i; if(constrain(t)bound(t)) backtrack(t+1); } } * 旅行商问题(TSP) 1 3 2 4 20 30 10 6 5 4 4顶点的无向带权图 A B C D E F G L M H I N O J K P Q 1 3 4 2 3 4 3 2 4 2 3 2 2 3 4 4 n=4的TSP问题的解空间树(排列树) * 排列树 排列树 当所给问题是确定n个元素满足某种性质的排列时,相应的解空间树被称为排列树. 比如旅行商问题TSP * 搜索排列树的一般算法 void backtrack( int t) { if(tn) output(x); else for(int i=t;i=n;i++) { swap(x[t],x[i]); if (constrain(t)bound(t)) backtrack(t+1); swap(x[t],x[i]); } } * 提纲 两个有趣的问题 回溯法的算法框架 实例分析 回溯法的效率分析 本章小结 * 实例分析 旅行商问题 符号三角形问题 N皇后问题 最大团问题 图的m着色问题 圆排列问题 电路板排列问题 连续邮资问题 骑士巡游问题 * 旅行商问题 * 旅行商问题(TSP问题)P139 旅行商问题 问题描述:某销售商要到若干个城市去推销商品,已知各城市之间的路程(或费用)。要求为给旅行商选择一条从驻地出发的路径,经过每个城市一次,最后返回驻地,使得该路径(或总的旅费)最短(或最小)。 NP难问题 应用背景 物流 驻地 * 利用回溯法求解TSP问题 * 通过实例分析问题 1 3 2 4 20 30 10 6 5 4 4顶点的无向带权图 A B C D E F G L M H I N O J K P Q 1 3 4 2 3 4 3 2 4 2 3 2 2 3 4 4 n=4的TSP问题的解空间树(排列树) * 可能的周游路线 A B C D E F G L M H I N O J K P Q 1 3 4 2 3 4 3 2 4 2 3 2 2 3 4 4 n=4的TSP问题的解空间树(排列树) 对于n=4的TSP问题,其可能的周游路线有6条。 ——对于n=N的TSP问题,其可能的周游路线为(n-1)!条。 每个叶结点对应一条周游路线 * 回溯法的求解过程 A B C D E F G L M H I N O J K P Q 1 3 4 2 3 4 3 2 4 2 3 2 2 3 4 4 在结点L处记录所找到的周游路线(1-2-3-4-1),其费用为59 4 A B C D E F G L M H I N O J K P Q 1 3 4 2 3 3 2 4 2 3 2 2 3 4 4 由于F处已没有可扩展结点,所以算法继续向上回溯,F为死结点 * 回溯法的求解过程 4 A B C D E F G L M H I N O J K P Q 1 3 4 2 3 3 2 4 2 3 2 2 3 4 4 在结点M处记录所找到的周游路线(1-2-4-3-1),其费用为6659,所以舍弃该结点。 按上述搜索原则,对整个排列树进行遍历,共找到6条可能的周游路径,其中费用最少的周游路径为 1-3-2-4-1(其费用为25) * 剪枝函数的引入 剪枝函数的引入 目的:提高回溯法的搜索效率; 剪枝函数的设定: 采用当前已知的最短路径(为X)为标准,对于有n个结点的TSP问题来说,假设当前搜索第i层(1in)的某个结点E 如果当前路径长度<X,则以E为扩展结点继续向下一层搜索; 如果当前路径长度>=X,则表明以E为根结点的子树中不包含最优解,将以E为根结点的子树中所有结点都置为死结点,算法向E最近的祖先活结点回溯; * 回溯法的求解过程 4 A B C D E F G L M H I N O J K P Q 1 3 4 2 3 3 2 4 2 3 2 2 3 4 4 在结点I处记录所找到的周游路线(1-3-4),其费用为2625,所以舍弃该结点。I为根的子树不可能包含更优的解,剪去。 按上述搜索原则,对整个排列树进行遍历,共找到6条可能的周游路径,其中费用最少的周游路径为 1-3-2-4-1(其费用为25) * #include iostream.h #inclu

文档评论(0)

youngyu0329 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档