旅行售货员m01重点.ppt

  1. 1、本文档共26页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
示例2:旅行售货员问题 问题描述 设有n个城市组成的交通图,一个售货员从住地城市出发,到其它城市各一次去推销货物,最后回到住地城市。假定任意两个城市i,j之间的距离dij(dij=dji)是已知的,问应该怎样选择一条最短的路线? 定义问题的解空间 解的形式(x1,x2,…,xn) 令n个城市组成的集合为S={1,2,…,n} ,则x1=1,xi∈S-{x1,x2, …,xi-1},i=2, …,n。 确定解空间的组织结构 n=4的旅行售货员问题的解空间树 有哪些信誉好的足球投注网站解空间 设置约束条件; 用二维数组c[][]存储无向带权图的邻接矩阵,如果c[i][j]≠∞表示城市i和城市j有边相连,能走通。 设置限界条件 clbestl,cl的初始值为0,bestf的初始值为+∞。 cl:当前已走过的城市所用的路径长度 bestl:表示当前找到的最短路径的路径长度 有哪些信誉好的足球投注网站过程:以右图为例说明 有哪些信誉好的足球投注网站树 算法描述 Backtrack(int i) { if (i == n) { if (a[x[n-1]][x[n]] != NoEdge a[x[n]][1] != NoEdge (cc + a[x[n-1]][x[n]] + a[x[n]][1] bestc || bestc == NoEdge)) { for (int j = 1; j = n; j++) bestx[j] = x[j]; bestc = cc + a[x[n-1]][x[n]] + a[x[n]][1];} } else { for (int j = i; j = n; j++)// 是否可进入x[j]子树? if (a[x[i-1]][x[j]] != NoEdge (cc + a[x[i-1]][x[i]] bestc || bestc == NoEdge)) {// 有哪些信誉好的足球投注网站子树 Swap(x[i], x[j]); cc += a[x[i-1]][x[i]]; Backtrack(i+1); cc -= a[x[i-1]][x[i]]; Swap(x[i], x[j]);} } } 算法分析 判断限界函数需要O(1)时间,在最坏情况下有1+(n-1)+ (n-1)(n-2)+…+(n-1)+…+2≤n(n-1)!个结点需要判断限界函数,故耗时O(n!); 在叶子结点处记录当前最优解需要耗时O(n),在最坏情况下会有哪些信誉好的足球投注网站到每一个叶子结点,叶子结点有(n-1)!个,故耗时为O(n!)。 旅行售货员问题的回溯算法所需的计算时间为O(n!)+O(n!)= O(n!)。 示例1:图的m着色问题 问题描述 给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。 定义问题的解空间 解的形式:(x1, x2, … , xn) xi的取值范围:xi=1,2,…,m 组织解空间 满m叉树,树的深度为n 有哪些信誉好的足球投注网站解空间 约束条件:和已经确定颜色且有边相的顶点颜色不相同。 限界条件:(×) 有哪些信誉好的足球投注网站过程 (以右图为例,给定m=3) 有哪些信誉好的足球投注网站树 无向连通图 关键代码分析 Backtrack(int t) { if (tn) { sum++; for (int i=1; i=n; i++) cout x[i] ; cout endl; } else for (int i=1;i=m;i++) { x[t]=i; if (Ok(t)) Backtrack(t+1); } } Ok(int k) {// 检查颜色可用性 for (int j=1;j=n;j++) if ((a[k][j]==1)(x[j]==x[k])) return false; return true; } 算法分析 计算限界函数需要O(n)时间,需要判断限界函数的结点在最坏情况下有1+m+m2+ m3+……+mn-1=(mn-1)/(m-1)个,故耗时O(nmn); 在叶子结点处输出着色方案需要耗时O(n),在最坏情况下会有哪些信誉好的足球投注网站到每一个叶子结点,叶子结点有mn个,故

文档评论(0)

美洲行 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档