王子琪、谭裕韦、刘丽颖课件.pptVIP

  1. 1、本文档共20页,可阅读全部内容。
  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文档。上传文档
查看更多
王子琪、谭裕韦、刘丽颖 递归与回溯 我们有时会碰到一些题目,它们既不能通过建立数学模型解决,又没有现成算法可以套用,或者必须遍历所有状况才可以得出正确结果。 这时,我们就必须采用搜索算法来解决问题。 搜索算法按搜索的方式分有两类,一类是深度优先搜索,一类是广度优先搜索。而对于深度优先搜索来说,我们需要使用到的一个技术就是递归与回溯。 “和最小”题目描述 设有一个长度为N的数字串,要求使用K个加号将它分成K+1个部分,找出一种分法,使得这K+1个部分的和能够为最小。 有一个数字串:312, 当N=3,K=1时会有以下两种分法: 1) 3+12=15 2) 31+2=33 这时,符合题目要求的结果是:3+12=15 搜索策略 题目要求的就是在每个数字之间:或者填加号,或者什么都不填。根据这个要求,我们可以从头开始扫描整个数字串,逐个考察是否要填加号,然后检查下一个数字间的位置,直到最后一个数字。 下面是一个例子和它的状态树 数字7629需要插入2个加号 这是一棵完整的搜索树。 结点内表示当前处理的状态,每向后处理一个空位即深入一层。 我们可以看到,在最后的所有叶子结点中,有三个黄色的结点是满足条件的。 7+6+2+9 7 7+6 76 7+6+2 7+62 76+2 762 7+62+9 7+629 76+2+9 76+29 7629 762+9 7+6+29 7和6之间不添加加号 7和6之间添加一个加号 迷宫问题 给出一个迷宫的地图,有一些格子中有障碍,问从起点到终点的最短路径,并输出所有的最短路径。 回溯法解题思路 1、?这个方向有路可走,我没走过,?往这个方向前进 2、?是死胡同,往回走,回到上一个路口 3、?重复第一步,直到找着出口 但是 回溯法的缺点暴露无遗: 搜索耗时极巨,无法忍受。 那么 我们可否提前判断我们前进的方向是否可能得到最优解呢?如果可以的话,搜索效率岂不是能够提高了吗 答案就是: 剪枝! 关于剪枝 剪枝的概念,其实就跟走迷宫避开死胡同差不多.。若我们把搜索的过程看成是对一棵树的遍历,那么剪枝顾名思义,就是将树中的一些“死胡同”,不能到达我们需要的解的枝条“剪”掉,以减少搜索的时间。 搜索算法,绝大部分需要用到剪枝。 然而,不是所有的枝条都可以剪掉,这就需要通过设计出合理的判断方法,以决定某一分支的取舍。 在设计判断剪枝条件的时候,就需要有一定的方法。? 最优性剪枝 又称为上下界剪枝 一种重要的搜索剪枝策略 记录当前得到的最优值 如果当前结点已经无法产生比当前最优解更优的解时,可以提前回溯 回到加号题 儿子结点的数一定比父亲大 即搜索树深度越深得到的解越大 满足最优性剪枝的条件 我们可以记录当前得到的解的最小值 如果当前得到的和值已经超过保存的最小解,即不必再继续深入搜索,回溯。 再看搜索树 我们可以看到红色结点的子节点不可能有最优解 7 7+6 76 7+6+2 7+62 76+2 762 7+62+9 7+629 76+2+9 76+29 7629 762+9 7+6+2+9 7+6+29 最优性剪枝结果 结点数大大减少。 7 7+6 76 7+6+2 7+62 7+6+2+9 7+6+29 可行性剪枝 除最优性剪枝外,另一种重要的搜索剪枝策略 判断继续搜索能否得出答案,如果不能直接回溯 再看搜索树 对于图中蓝色结点。后面能够插入’+’的位置已经少于未用完’+’的数量,肯定不可能有解。 对于这种结点,其子节点不可能有解,可以回溯。 这个节点的加号不可能有解,可以进行可行性剪枝 7 7+6 76 7+6+2 7+62 76+2 762 7+62+9 7+629 76+2+9 76+29 7629 762+9 7+6+2+9 7+6+29 迷宫问题 最优性剪枝 我们可以将每一次搜索出的路径长度与上界比较(初始下界=∞),不断降低上界,一旦出现路径长超出上界而仍未到达目标点,则放弃该搜索进程。 因为就算继续搜索下去,这一条路径也必然比其他路径长,不是最优解。 总结 深度优先搜索的程序简洁易懂,空间需求也比较低,但是这种方法的时间复杂度往往是指数级的,倘若不加优化,其时间效率简直无法忍受;所以,如何用正确的方法对程序进行优化,就成为搜索算法编程中最关键的一环。那么,剪枝就是搜索优化中最基本的方法之一。 总结 两种常用的剪枝方法: 最优性剪枝 适用范围:子结点的代价全部高于或低于父结点 又之称为多米诺性质。 可行性剪枝 根据题意作出判断是否继续搜索还有可能得到解 剪枝的原则 正确性 准确性 高效性 总结 在搜索算法中,几乎都需要采用程序优化,以减少时间复杂度。 而这里所说的两种剪枝方法,是最常见的优化方法之一。 然而,尽

文档评论(0)

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

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

1亿VIP精品文档

相关文档