第五章._回溯法.pptVIP

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

* 0-1背包问题(0-1Knapsack Problem ) 设有n个物体和一个背包,物体i的重量为wi价值为pi背包的载荷为M, 若将物体i(1? i ?n,)装入背包,则有价值为pi . 目标是找到一个方案,使得能放入背包的物体总价值最高 算法设计与分析 回溯法 若取W= (20,15, 15), P= (40,25, 25), C=30 例 题 有限离散问题总可以用穷举法求得问题的全部. 例如 取N=3 , 问题所有可能的解为(解空间): (0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1) 可表示为一棵3层的完全正则二叉树 时间复杂性: O(2n) 求解过程相当于在树中搜索 满足条件的叶结点. 第五章. 回溯法 (Back traiking) 设问题的解可表示为n元组(x1, x2,… xn), xi?si , si为有限集, n元组的子组(x1, x2,… xi) in 应满足一定的约束条件D. 设已有满足约束条件的部分解(x1, x2,… xi), 添加xi+1 ?si+1, 若(x1, x2,… xi ,xi+1 )满足约束条件, 则继续添加xi+2 ; 若所有可能的xi+1 ?si+1均不满足约束条件,则去掉xi , 回溯到(x1, x2,… xi-1), 添加尚未考虑过的xi , 如此反复进行,直到(x1, x2,… xk) k?n满足所有的 约束条件或证明无解. 5.1 基本思想 算法设计与分析 回溯法 E={ (x1, x2,… xn), xi ?si , si为有限集 }称为问题的解空间. 约束条件 隐约束:元组的分量间满足函数关系f(x1,...xn) 显约束:每个xi 的范围都给定的约束.满足显约束的全体向量构成解空间. 例 题 算法设计与分析 回溯法 1.子集树:当解向量为不定长n元组时 , 树中从根至每一结点的路径 集合构成解空间.树的每个结点称为一个解状态,有儿子的结点称为 可扩展结点,叶结点称为终止结点, 若结点v对应解状态(x1, x2,… xi), 则其儿子对应扩展的解状态(x1, x2,… xi, xi+1 ).满足所有约束条件的 解状态结点称为回答结点. 2.排序树:当解向量为定长n元组时, 树中从根至叶结点的路径的集合 构成解空间.树的每个叶结点称为一个解状态. 解空间树构造: 搜索按深度优先策略从根开始, 当搜索到任一结点时,判断该点是否 满足约束条件D(剪枝函数),满足则继续向下深度优先搜索,否则跳过 该结点以下的子树(剪枝),向上逐级回溯. 搜索过程: 求解过程可表示为在一棵解空间树 作 深度优先搜索. 0-1背包问题 设有n个物体和一个背包,物体i的重量为wi价值为pi背包的载荷为M, 若将物体i(1? i ?n,)装入背包,则有价值为pi . 目标是找到一个方案,使得能放入背包的物体总价值最高 算法设计与分析 回溯法 设N=3, W=(20,15,15), P=(40, 25, 25), C=30 例 题 x1=1 2 3 x2=2 3 3 x3=3 A B C D E F G H 子集树 排序树 Procedure BACKTRACK(n); {k:=l; repeat if TK (x1,x2,...xK-1 )中的值未取遍 then { xK:=TK (x1,x2,..., x K-1 )中未取过的一个值; if BK (x1, x2, ..., x K) then //状态结点(x1,...xk)被激活 if k=n then output(x1, x2, ..., xk) //输出一个回答结点 e1se k:=k + l;} //深度优先 e1se k:=k-l; //回溯 until k=0; end;{BACKTRACK} 算法模式 回溯法解题步骤: 1).针对所给问题,定义问题的解空间 2).确定解空间结构. 3).以深度优先方式搜索解空间. 算法设计与分析 回溯法 递归回溯 算法设计与分析 回溯法 void Backtrack(int t) { if (t n) Output(x); else for (int i = f(n,t);i =g(n,t) ;i ++) x[t] = h(i); if (Constraint(t)Bound(t)

文档评论(0)

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

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

1亿VIP精品文档

相关文档