收藏 分享(赏)

第5章 回溯法3.ppt

上传人:jinchen 文档编号:9863044 上传时间:2019-09-12 格式:PPT 页数:23 大小:115.50KB
下载 相关 举报
第5章 回溯法3.ppt_第1页
第1页 / 共23页
第5章 回溯法3.ppt_第2页
第2页 / 共23页
第5章 回溯法3.ppt_第3页
第3页 / 共23页
第5章 回溯法3.ppt_第4页
第4页 / 共23页
第5章 回溯法3.ppt_第5页
第5页 / 共23页
点击查看更多>>
资源描述

1、5.8 图的m着色问题,给定无向连通图G和m种不同的颜色。用这些颜色为图G的各顶点着色,每个顶点着一种颜色。是否有一种着色法使G中每条边的2个顶点着不同颜色。这个问题是图的m可着色判定问题。若一个图最少需要m种颜色才能使图中每条边连接的2个顶点着不同颜色,则称这个数m为该图的色数。求一个图的色数m的问题称为图的m可着色优化问题。,如果图G能画在平曲面S上,使得任意两边互不交叉,则称G可嵌入曲面S。若图G可嵌入平面,则称G是可平面图或平面图,画出的无交叉边的图形称为图G的平面嵌入。,下面是三个平面图及其平面嵌入。,解向量:(x1, x2, , xn)表示顶点i所着颜色xi 可行性约束函数:顶点i

2、与已着色的相邻顶点颜色不重复。,void Color:Backtrack(int t) if (tn) sum+;for (int i=1; i=n; i+)cout xi ;cout endl;elsefor (int i=1;i=m;i+) xt=i;if (Ok(t) Backtrack(t+1); bool Color:Ok(int k) / 检查颜色可用性for (int j=1;j=n;j+)if (akj=1) ,复杂度分析图m可着色问题的解空间树中内结点个数是对于每一个内结点,在最坏情况下,用ok检查当前扩展结点的每一个儿子所相应的颜色可用性需耗时O(mn)。因此,回溯法总的时

3、间耗费是,5.9 旅行售货员问题,旅行售货员问题的提法是:某售货员要到若干城市去推销商品,已知各城市之间的路程(或旅费)。他要选定一条从驻地出发,经过每个城市一遍,最后回到驻地的路线,使总的路程(或总旅费)最小。,设G=(V,E)是一个带权图。图中各边的费用 (权)为一正数。图中的一条周游路线是包括V 中的每个顶点在内的一条回路。一条周游路线的 费用是这条路线上所有边的费用之和。 所谓旅行售货员问题就是要在图G中找出一条有 最小费用的周游路线。,1,2,4,3,1 1,3,2,4,1 1,4,3,2,1,旅行售货员问题的解空间树,template void Traveling:Backtrac

4、k(int i) if (i = n) if (axn-1xn != NoEdge ,复杂度分析 算法backtrack在最坏情况下可能需要更新当前最优解O(n-1)!)次,每次更新bestx需计算时间O(n),从而整个算法的计算时间复杂性为O(n!)。,5.10 圆排列问题,给定n个大小不等的圆c1,c2,cn,现要将这n个圆排进一个矩形框中,且要求各圆与矩形框的底边相切。圆排列问题要求从n个圆的所有排列中找出有最小长度的圆排列。例如,当n=3,且所给的3个圆的半径分别为1,1,2时,这3个圆的最小长度的圆排列如图所示。其最小长度为,float Circle:Center(int t) /

5、计算当前所选择圆的圆心横坐标float temp=0;for (int j=1;jtemp) temp=valuex;return temp; ,void Circle:Compute(void) / 计算当前圆排列的长度float low=0,high=0;for (int i=1;ihigh) high=xi+ri;if (high-lowmin) min=high-low; ,void Circle:Backtrack(int t) if (tn) Compute();elsefor (int j = t; j = n; j+) Swap(rt, rj);float centerx=Ce

6、nter(t);if (centerx+rt+r1min) /下界约束xt=centerx;Backtrack(t+1);Swap(rt, rj); ,复杂度分析 由于算法backtrack在最坏情况下可能需要计算O(n!)次当前圆排列长度,每次计算需O(n)计算时间,从而整个算法的计算时间复杂性为O(n+1)!),上述算法尚有许多改进的余地。例如,象1,2,n-1,n和n,n-1, ,2,1这种互为镜像的排列具有相同的圆排列长度,只计算一个就够了,可减少约一半的计算量。另一方面,如果所给的n个圆中有k个圆有相同的半径,则这k个圆产生的k!个完全相同的圆排列,只计算一个就够了。,连续邮资问题,

7、假设国家发行了n种不同面值的邮票,并且规定每张信封上最多只允许贴m张邮票。连续邮资问题要求对于给定的n和m的值,给出邮票面值的最佳设计,在1张信封上可贴出从邮资1开始,增量为1的最大连续邮资区间。,例如,当n=5和m=4时,面值为(1,3,11,15,32)的5种邮票可以贴出邮资的最大连续邮资区间是1到70。,解向量:用n元组x1:n表示n种不同的邮票面值,并约定它们从小到大排列。x1=1是唯一的选择。 可行性约束函数:已选定x1:i-1,最大连续邮资区间是1:r,接下来xi的可取值范围是xi-1+1:r+1。,如何确定r的值? 计算X1:i的最大连续邮资区间在本算法中被频繁使用到,因此势必要

8、找到一个高效的方法。考虑到直接递归的求解复杂度太高,我们不妨尝试计算用不超过m张面值为x1:i的邮票贴出邮资k所需的最少邮票数yk。通过yk可以很快推出r的值。,回溯法效率分析,通过前面具体实例的讨论容易看出,回溯算法的效率在很大程度上依赖于以下因素: (1)产生xk的时间; (2)满足显约束的xk值的个数; (3)计算约束函数constraint的时间; (4)计算上界函数bound的时间; (5)满足约束函数和上界函数约束的所有xk的个数。 好的约束函数能显著地减少所生成的结点数。但这样的约束函数往往计算量较大。因此,在选择约束函数时通常存在生成结点数与约束函数计算量之间的折衷。,重排原理

9、,对于许多问题而言,在搜索试探时选取xi的值顺序是任意的。在其它条件相当的前提下,让可取值最少的xi优先。从图中关于同一问题的2棵不同解空间树,可以体会到这种策略的潜力。,图(a)中,从第1层剪去1棵子树,则从所有应当考虑的3元组中一次消去12个3元组。对于图(b),虽然同样从第1层剪去1棵子树,却只从应当考虑的3元组中消去8个3元组。前者的效果明显比后者好。,(a),(b),回溯法总结 编程解决问题的方法一般有两种: 1、可以用精确的数学公式或明确的算法语言来描述问题,如:幻方、验证数学猜想等。 2、在完成一件事情的过程中,要经过若干步骤,而每一个步骤又有若干种可能的分支,为了完成任务,必须

10、遵守一些规则,但这些规则又无法用精确的数学公式来描述。因此对这类问题常常采用探索的方法来解决,尝试所有的可能性。,在探索的过程中,经常会进入死胡同,当求解失败时,为了摆脱失败状态,必须退出死胡同,返回到死胡同的入口,可能是返回上一个步骤或返回上几个步骤,另求出路,这个返回的过程就是回溯退回到进入胡同时的状态。 当使用探索法解决问题时,往下探索一般使用递归方法进行,当递归不下去时,就需要进行回溯,另寻出路进行递归。所以,在使用探索算法时,递归与回溯经常是配合使用的。 当求解一个问题的多种解法时,当使用递归已经找到一种答案后,仍然可以在记录答案后,使用回溯,跳过该点,继续往下探索,寻找其它解法。,迷宫问题: 设有一个nn方格的迷宫,入口和出口分别在左上角和右上角。迷宫格子中分别放有0和1,0表示可通,1表示不通,迷宫走的规则如下图所示。即从,某点出发,可沿8个方向前进,前进方格中的数0表示可通过,为1时表示不可通过,如从入口开始,有两条路可走,即向右走或向右下走,当迷宫给出之后,找出一条从入口到出口的通路。,入口,X,Y,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报