最新算法第5章课件ppt.ppt

最新算法第5章课件ppt.ppt

ID:62176229

大小:529.50 KB

页数:90页

时间:2021-04-20

最新算法第5章课件ppt.ppt_第1页
最新算法第5章课件ppt.ppt_第2页
最新算法第5章课件ppt.ppt_第3页
最新算法第5章课件ppt.ppt_第4页
最新算法第5章课件ppt.ppt_第5页
资源描述:

《最新算法第5章课件ppt.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、算法第5章通过应用范例学习回溯法的设计策略。(1)装载问题;(2)批处理作业调度;(3)符号三角形问题(4)n后问题;(5)0-1背包问题;(6)最大团问题;(7)图的m着色问题(8)旅行售货员问题(9)圆排列问题(10)电路板排列问题(11)连续邮资问题2有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法。回溯法回溯法的基本做法是搜索,或是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这种方法适用于解一些组合数相当大的问题。回溯法在问题的解空间树中,按深度优先策略,从

2、根结点出发搜索解空间树。算法搜索至解空间树的任意一点时,先判断该结点是否包含问题的解。如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。3递归回溯回溯法对解空间作深度优先搜索,因此,在一般情况下用递归方法实现回溯法。voidbacktrack(intt){if(t>n)output(x);elsefor(inti=f(n,t);i<=g(n,t);i++){x[t]=h(i);if(constraint(t)&&bound(t))backtrack(t+1);

3、}}7迭代回溯采用树的非递归深度优先遍历算法,可将回溯法表示为一个非递归迭代过程。voiditerativeBacktrack(){intt=1;while(t>0){if(f(n,t)<=g(n,t))for(inti=f(n,t);i<=g(n,t);i++){x[t]=h(i);if(constraint(t)&&bound(t)){if(solution(t))output(x);elset++;}}elset--;}}8迭代回溯用回溯法解题的一个显著特征是在搜索过程中动态产生问题的解空间。在任何时刻,算法只保存

4、从根结点到当前扩展结点的路径。如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。而显式地存储整个解空间则需要O(2h(n))或O(h(n)!)内存空间。9子集树与排列树遍历子集树需O(2n)计算时间遍历排列树需要O(n!)计算时间voidbacktrack(intt){if(t>n)output(x);elsefor(inti=0;i<=1;i++){x[t]=i;if(legal(t))backtrack(t+1);}}voidbacktrack(intt){if(t

5、>n)output(x);elsefor(inti=t;i<=n;i++){swap(x[t],x[i]);if(legal(t))backtrack(t+1);swap(x[t],x[i]);}}10装载问题有一批共n个集装箱要装上2艘载重量分别为c1和c2的轮船,其中集装箱i的重量为wi,且装载问题要求确定是否有一个合理的装载方案可将这n个集装箱装上这2艘轮船。如果有,找出一种装载方案。例如,当n=3,c1=c2=50,且w=[10,40,40]或者w=[20,40,40]11装载问题容易证明,如果一个给定装载问题有

6、解,则采用下面的策略可得到最优装载方案。(1)首先将第一艘轮船尽可能装满;(2)将剩余的集装箱装上第二艘轮船。将第一艘轮船尽可能装满等价于选取全体集装箱的一个子集,使该子集中集装箱重量之和最接近。由此可知,装载问题等价于以下特殊的0-1背包问题。用回溯法设计解装载问题的O(2n)计算时间算法。在某些情况下该算法优于动态规划算法。12装载问题算法设计:解空间:子集树可行性约束函数(选择当前元素):voidbacktrack(inti){//搜索第i层结点if(i>n){//到达叶结点if(cw>bestw)bestw=cw

7、;return;}if(cw+w[i]<=c){//搜索左子树x[i]=1;cw+=w[i];backtrack(i+1);cw-=w[i];}backtrack(i+1);//x[i]=0;}13装载问题改进算法:上界函数(不选择当前元素):当前载重量cw+剩余集装箱的重量r当前最优载重量bestwvoidbacktrack(inti){//搜索第i层结点if(i>n){bestw=cw;return;}r-=w[i];if(cw+w[i]<=c){//搜索左子树x[i]=1;cw+=w[i];backtrack(i

8、+1);cw-=w[i];}if(cw+r>bestw){//x[i]=0;搜索右子树backtrack(i+1);}r+=w[i];}14装载问题构造最优解:通过在类Loading中增加两个私有数据成员x和bestx。x用于记录从根至当前节点的路径;bestx记录当前最优解。15装载问题迭代回溯:数组x记录了解空间

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。