-算法设计讲稿.docVIP

  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文档。上传文档
查看更多
-算法设计讲稿.doc

算法讲稿 第二部分 算法设计的基本方法 我们在设计算法时并不都是一帆风顺的,尤其对比较复杂的大一点的问题,往往困惑该用什么方法去解决它。学过本章之后,读者一定会感到现实世界中的许多问题不再是杂乱无章的,也不再使你在决定如何解决它们时束手无策。因为,你已经能够根据问题的性质选择适当的解题方法。要解决的问题一定有其特点,在各个解题方法中,也会有某种设计策略更适宜于解决此类问题。算法设计方法是人们在长期实践中总结出的解题的宝贵经验,针对不同问题采用不同的策略。当然,允许某个问题可以有两个以上的策略来解决,也允许对某个问题组合几个策略来解决。 现在,人们已经认识到了算法设计在解决问题中的重要性,A.V.Aho认为,算法的研究是计算机科学的真正核心。确定算法离不开正确的程序设计方法,作为一个新兴的学科,算法设计与分析受到人们越来越大的重视,因为它直接关系到所设计出来的解决问题的算法以及程序的“质量”。一方面,没有正确的算法设计方法,在解决问题编写程序时不仅费时费力,而且容易差错;另一方面,对解决某个实际问题的多种方法,在我们权衡取舍时可借助算法分析提供出评估算法好坏的标准。我们还可以籍助算法分析的结果,避免实际执行那些因运行耗时巨大而不可实际运行的算法,以免造成计算机资源的浪费。 随着计算机理论的日益深入研究,人们已经越来越多地把注意力集中到程序的构成和分析方法上。说的更明确点,就是集中到由程序正文所描述的算法的结构上,一个算法的构成将由一系列仔细考虑研究的设计构思所组成。但是任何一种设计构思都是由设计者的技巧、气质和习惯甚至直觉而构成,算法设计是一种创造性的劳动。同样一个问题,素质不同的人将会有不同的处理结果。我们大家一定有许多成功地设计算法的经验,如果给出某个具体问题或许立即就能给出对应的解题方案,可能还不止一个;或许,你不成功的情况比起成功的情况会更多一些。 具体地说,算法设计是根据计算机能够执行的基本操作,用系统的方法来描述解决问题的策略机制的一种方法。在设计算法时、尤其对比较复杂的大一点的问题,往往困惑该用什么方法去解决它。 我们介绍了五种算法设计策略,读者通过对计算机科学中许多常见的和有代表性的算法的学习、研究,了解和掌握算法设计的一些主要方法,以便今后能独立地设计算法。另外,可以根据具体问题的要求,能够从已有的现成解题算法中选择出比较好的或比较可行的算法来。 2.1 递归技术与分治法 递归技术在计算机科学中是十分有用的重要的技术。在数学上,一个使用函数自身来定义自身的函数称为递归函数;在计算机程序设计语言中,直接或间接定义自身的定义称为递归定义,直接或间接调用自身的过程称为递归过程。一般说来,自身具有递归性质的数据结构、公式或算法,直接采用递归形式来描述较为合理,这样的描述简洁明快易于理解;而某些呈现明显的递归特征或未用递归形式给出的问题,若采用递归技术来描述或实现,能使算法更加易于理解更显得合理的话,也可用递归技术来处理。在我们所介绍的诸算法设计方法中,或许最重要的、应用最广泛的方法就是分治法。 2.1.1分治法一般方法 分治法的基本设计思想是,将一个大小规模为n的难以直接解决的问题分解成k个规模较小的子问题,这些子问题是互相独立的可单独求解的,解的难度也要小的多,并且,由这些小问题的解可以简单地构造出整个问题的解。如果需要,对这k个子问题还可以继续分解下去,直至可以对子问题直接求解时为止。分解时需要注意两点,一是子问题的解法与原问题的解法应是相同的,只是问题的大小不同;二是合并各个子问题的解便可以得到原问题的解。可以看到所谓的分治法就是“分而治之”,分解至可解时而解之。应用分治法逐步分解的过程,往往导致解题递归过程的产生。我们将上述的分治法解题思想用计算机程序形式地描述出来。分治法的形式算法设计模式如下述形式过程: int p,q,m /*1≤p≤q≤m*/ int dandc(p,q) { if (small(p,q)) return(g(p,q)); else { m=divide(p,q); /*p≤q*/ return(merge(dandc(p,m),dandc(m+1,q)); } } /* dandc*/ 图 2.1 分治法的形式算法dandc 此过程中的基本运算由一些没具体写明含义的其它过程来表示。过程使用了一个全程量数组a[n-1]来存放这n个输入数据。过程dandc是个类型为整型的函数过程,它最初由dandc(1, n)调用,返回的是整个问题的解;dandc(p, q)求解输入为a[p, q]情况的问题。small(p, q)判断输入数据q-p+1是否小到无须进一步细分就能直接算出其答案,若是,则调用能直接求出此数据量下的子问题解的函数g(p, q);若否,则调用分割函数

文档评论(0)

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

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

1亿VIP精品文档

相关文档