第十三章回溯法讲述.ppt

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

heyichao@sjzue.edu.cn 回溯法解旅行商问题 1、从解空间A出发,有哪些信誉好的足球投注网站B,C,F,L;在叶子节点上记录找到的周游路线:1,2,3,4,1;费用是59; 2、从L返回到F处,因为F没有扩展节点,继续回溯至C,节点C成为新的扩展节点,选择另一分支,G、M,路线是:B C G M,此时的费用是66,大于1的解,舍弃; 3、算法继续返回G C B,B有有分支节点,继续探测D分支,D H N,费用25,小于1的费用,将1的结果舍掉。 4、从节点N算法返回至H D,然后从D开始纵深有哪些信誉好的足球投注网站至O,费用是96,舍掉。 通过按照这种思路进行有哪些信誉好的足球投注网站,最终得到周游路线是 1 3 2 4 1 费用是:25 。 避免无效有哪些信誉好的足球投注网站的方法: 1、使用约束函数在扩展节点处剪去不符合约束的子树; 2、用限界函数剪去得不到最优解的子树。 以上称为:剪枝函数 生成问题状态的基本方法 扩展结点:一个正在产生儿子的结点称为扩展结点 活结点:一个自身已生成但其儿子还没有全部生成的节点称做活结点 死结点:一个所有儿子已经产生的结点称做死结点 深度优先的问题状态生成法:如果对一个扩展结点R,一旦产生了它的一个儿子C,就把C当做新的扩展结点。在完成对子树C(以C为根的子树)的穷尽有哪些信誉好的足球投注网站之后,将R重新变成扩展结点,继续生成R的下一个儿子(如果存在) 宽度优先的问题状态生成法:在一个扩展结点变成死结点之前,它一直是扩展结点 回溯法:为了避免生成那些不可能产生最佳解的问题状态,要不断地利用限界函数(bounding function)来处死那些实际上不可能产生所需解的活结点,以减少问题的计算量。具有限界函数的深度优先生成法称为回溯法 回溯法的基本思想 (1)针对所给问题,定义问题的解空间; (2)确定易于有哪些信誉好的足球投注网站的解空间结构; (3)以深度优先方式有哪些信誉好的足球投注网站解空间,并在有哪些信誉好的足球投注网站过程中用剪枝函数避免无效有哪些信誉好的足球投注网站。 用回溯法解题的一个显著特征是在有哪些信誉好的足球投注网站过程中动态产生问题的解空间。在任何时刻,算法只保存从根结点到当前扩展结点的路径。 如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为O(h(n))。 递归回溯 回溯法对解空间作深度优先有哪些信誉好的足球投注网站,因此,在一般情况下用递归方法实现回溯法。 void backtrack (int t) //t表示递归深度 { if (tn) output(x); //n表示控制递归深度,有哪些信誉好的足球投注网站至 叶子节点,输出合理解 else for (int i=f(n,t);i=g(n,t);i++) { //从起始编号树到末尾有哪些信誉好的足球投注网站 x[t]=h(i);//在当前扩展节点处x[t]的第i个可选值 if (constraint(t)bound(t)) backtrack(t+1); //如果当前扩展节点的约束条件满足要求,则针对其下一层继续回溯;} } 参数t:表示递归深度,即当前扩展节点在解空间树的深度; n表示控制递归深度; tn:表示有哪些信誉好的足球投注网站至叶节点; f(n,t),g(n,t):分别表示在当前扩展节点处x[t]的第i个处未有哪些信誉好的足球投注网站过的子树的起始编号和终止编号。 constraint(t)、bound(t):当前扩展节点处的限界条件和分支条件; h(i):表示在当前扩展节点处x[t]的第i个可选值。 迭代回溯 采用树的非递归深度优先遍历算法,可将回溯法表示为一个非递归迭代过程。 void iterativeBacktrack () { int t=1; //有哪些信誉好的足球投注网站深度 while (t0) { if (f(n,t)=g(n,t)) //当前扩展节点子树起始值小于扩展节点的终值 for (int i=f(n,t);i=g(n,t);i++) { x[t]=h(i);//当前扩展结点处x[t]的第i个可选值 if (constraint(t)bound(t)) { if (solution(t)) output(x);//解合理,则输出 else t++; //还没有得到最后的解,继续深入有哪些信誉好的足球投注网站 } } else t- -; //回溯上层 } } 解题分析:

文档评论(0)

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

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

1亿VIP精品文档

相关文档