算法设计与分析第5章 回溯法.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
算法设计与分析第5章 回溯法.ppt

0-1背包问题 回溯法解决01背包问题 1.解向量:一维数组 2.约束:取值范围,重量限制 3.解空间:子集树 4.代码实现 5.改进 1 2 3 4 9 8 15 14 5 请按任意键继续. . . 1 2 3 4 9 14 15 8 5 请按任意键继续. . . 1 2 3 4 15 8 9 14 5 请按任意键继续. . . 1 2 3 4 15 14 9 8 5 最大团问题(Maximum Clique Problem, MCP) 是图论中一个经典的组合优化问题,也是一类NP完全问题,在国际上已有广泛的研究,而国内对MCP问题的研究则还处于起步阶段,因此,研究最大团问题具有较高的理论价值和现实意义。 MCP问题是现实世界中一类真实问题,在市场分析、方案选择、信号传输、计算机视觉、故障诊断等领域具有非常广泛的应用 确定性算法:回溯法、分支限界法等, 启发式算法:如顺序贪婪启发式算法、遗传算法、模拟退火算法、禁忌搜索算法、神经网络算法等 旅行售货员问题 旅行商问题,即TSP问题(Travelling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。 旅行售货员问题 旅行售货员问题 TSP问题是一个NPC问题。Non-deterministic Polynomial complete problem 应用领域包括:如何规划最合理高效的道路交通,以减少拥堵;如何更好地规划物流,以减少运营成本;在互联网环境中如何更好地设置节点,以更好地让信息流动等 。 2010年10月25日,英国一项最新研究说,在花丛中飞来飞去的小蜜蜂显示出了轻易破解“旅行商问题”的能力 课堂练习 问题: 给定n个正整数wi和一个正整数m,在这n个正整数中找出一个子集,使得子集中的正整数之和等于m。 * 剪枝策略 程序中采用了一个比较简单的剪枝策略,即如 果剩余未考虑的顶点数加上团中顶点数不大于 当前解的顶点数,可停止继续深度搜索,否则继续深 度递归,程序代码如下: if(cn+n-ibestn) { x[i]=0;//设置标志 backtrack(i+1);//递归判断下一顶点 } * 递归结束条件 当搜索到一个叶结点时,即可停止搜索,此时 更新最优解和最优值,程序代码如下: if(in) { for(j=1;j=n;j++) bestx[j]=x[j]; bestn=cn; return; } 最大团问题 解空间:子集树 可行性约束函数:顶点i到已选入的顶点集中每一个顶点都有边相连。 上界函数:有足够多的可选择顶点使得算法有可能在右子树中找到更大的团。 private static void backtrack(int i) { if (i n) {// 到达叶结点 for (int j = 1; j = n; j++) bestx[j] = x[j]; bestn = cn; return; } // 检查顶点 i 与当前团的连接 boolean ok = true; for (int j = 1; j i; j++) if (x[j] == 1 !a[i][j]) {// i与j不相连 ok = false; break; } if (ok) {// 进入左子树 x[i] = 1; cn++; backtrack(i + 1); cn--; } if (cn + n - i bestn) {// 进入右子树 x[i] = 0; backtrack(i + 1); } }} 复杂度分析 最大团问题的回溯算法backtrack所需的计算时间显然为O(n2n)。 1 2 4 5 3 进一步改进算法的建议 选择合适的搜索顺序,可以使得上界函数更有效的发挥作用。例如在搜索之前可以将顶点按度从小到大排序。这在某种意义上相当于给回溯法加入了启发性。 定义Si={vi,vi+1,...,vn},依次求出Sn,Sn-1,...,S1的解。从而得到一个更精确的上界函数,若cn+Si=max则剪枝。同时注意到

文档评论(0)

qiaogao + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档