第5章 算法设计基本方法2汇.pptVIP

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

第5 章算法设计基本方法2 例:0-1背包问题… 设有3种物品,背包容量40公斤。物品1的重量30公斤,价值150元;物品2的重量20公斤,价值80元;物品3的重量10公斤,价值70元。 5.2 回溯法 “通用解题法”,是带优化的穷举法。 按深度优先策略,从根结点出发搜索解空间树。 对任意结点,先判断该结点是否包含问题的解。 若肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯; 否则,进入该子树,继续按深度优先搜索策略搜索。 解为叶子结点 这种以深度优先方式系统搜索问题解的算法称为回溯法,它适用于求解组合数较大的问题 回溯法 在回溯法中,并不是先构造出整棵状态空间树,再进行搜索,而是在搜索过程,逐步构造出状态空间树,即边搜索,边构造; 回溯法求问题的所有解时,要回溯到根,且根结点的所有子树都被搜索遍才结束。 在它求问题的一个解时,只要搜索到问题的一个解就结束。 回溯法 回溯法的使用 1、确定问题状态结构; 2、分析问题状态空间树; 3、确定深度搜索与回溯规则; 4、确定解状态判别规则; 5.2.2 回溯法的基本思想 从根结点出发,按照深度优先策略遍历解空间树,搜索满足约束条件的解。 先判断结点对应的部分解是否满足约束条件,或者是否超出目标函数的界,即判断该结点是否包含问题的(最优)解。 如果肯定不包含,则跳过对以该结点为根的子树的搜索,即所谓剪枝(Pruning); 否则,进入以该结点为根的子树,继续按照深度优先策略搜索。 回溯法的三个基本步骤 1)定义问题的解空间 2)确定易于搜索的解空间结构 3)深度优先搜索解空间,并在搜索过程中用剪枝函数避免无效搜索 5.2.5 回溯法示例1 子集和数问题 问题 给定由n个不同正数组成的集合W={wi},和正数M,求W中所有和等于M的子集的集合; 问题状态 可以设想,W中的每个数有选取和不选取两种可能,W的一个子集即为一个问题状态,可以表述为对每个元素选取或不选取的一个组合。 问题状态空间树 由空集开始,依次对每个元素进行选取和不选取两种选择,就可以得到W的全部子集,选取过程即可构成一棵状态空间树; 子集和数问题 按照回溯法思想,从状态树的根结点出发,做深度优先搜索; 为便于计算,将W中的正数按从小到大排序; 当在某一状态A下,依次尝试加入和不加入正数wi, 若∑A+wiM,则可停止对该结点的搜索; 若∑A+ ∑(wi…wn)M,则也可停止对该结点的搜索; 子集和数问题 算法如下: 设置辅助向量A[i],记录wi是否被选入; SW表示W的剩余和,SA表示选入项的总和; 初始化A[i] = -1,表示未被处理过, SW= ∑Wi, SA=0; 从w0开始,进行深度优先搜索: 检查是否得解以及是否需要继续对该结点进行搜索,如果需要,则 ①如果A[i]为-1(未被处理过),则尝试不选入wi: 置A[i] = 0,即:不选入wi; SW -= wi; A[++i] = -1; ②如果A[i]为0(未被选入),则尝试选入wi: 置A[i] = 1,即: 选入wi; SA += wi; A[++i] = -1; ③如果A[i]为1(已被选入),则退回上一项: A[i] = -1; SW += wi; SA -= wi; --i; 回溯法分析 约束集D性质:若 (x1…xi)满足D中所有约束(条件),则其子集(x1…xj) ji 也满足约束;反之,若(x1…xj)不能满足D中所有约束,则任何以(x1…xj)为前缀的i元组(x1…xi) ij也不能满足D中,不必再继续搜索问题的解。 回溯求解的效率在很大程度上依赖于:产生局部解(x1…xk)的时间;计算约束所需的时间;满足局部约束的解的个数; 通常可以应用重排原理,先搜索分支较少的局部解,在约束不满足时,可以裁剪去较多的搜索分支,从而提高搜索效率。 示例2:0-1背包问题 给定n个物品和一个背包。设物品i(1≤i≤n)的重量为wi,其价值为vi,背包最大承重量为Max。问,应该如何选择物品装入背包,才能使背包内物品的总价值最大?选择物品i时,要么全部装入,要么不装入,不能只装入物品i的一部分。 算法基本思想 如果到达叶子,返回最优解opt[];否则, 试探左子树:选取物品i,计算tw,tv;递归,取下一个物品; 回溯,舍去物品i,重新计算tw,tv; 试探右子树:递归,取下一个物品; 剪枝 约束条件 目标函数 设当前结点i,取该物品,则扩展左子树;舍去该物品,则扩展其右子树 若当前重量tw+wiMax,剪枝,跳过左子树 若当前价值+剩余物品的总价值当前最优价值bestv,则剪

文档评论(0)

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

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

1亿VIP精品文档

相关文档