第十三章算法设计技术.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文档。上传文档
查看更多
第十三章算法设计技术

Mar.2007 wangweidong,school of computer science, Xidian University 第13章 算法设计技术 引言 1984年的图灵奖得主Niklaus Wirth “Programs = Algorithm + Data Structures” 算法是对特定问题求解步骤的一种描述。其基本特性为: 有穷性 确定性 可行性 输入 输出 一个好的算法应当具备以下特点: 正确性 可读性 健壮性 效率与低存储量需求 引言 当我们遇到一个问题时,首先需要设计算法,但是算法的设计并非一件容易的事情,它需要具备各方面的知识,同时还需要一些灵感。好在现实生活中并非每件事情的解决都要我们去传造出新的方法,很多事情前人们已经遇到,而且已经给出了很好的解决,因此首先掌握一些经典的算法思想不仅可以帮助我们解决现有的问题,而且也有助于我们在此基础上进行创造性的劳动。在学习的过程中我们应当仔细体会这些思想的奥妙。 引言 经常采用的算法设计技术主要有: 迭代法 穷举法 递归法 回溯法 分枝限界法 分治法 动态规划法 贪心法 迭代法 意大利数学家Fibonacci曾提出过一个有趣的问题: “设有一对新生兔子,从第三个月开始它们每月都生一对兔子。按照这个规律,并假设兔子没有死亡的,求一年后有多少对兔子。” 思路:首先我们根据已知条件来找规律 迭代法 迭代法 对于以上问题我们可以描述为 Fib(n)=Fib(n-1)+Fib(n-2) Fib(1)=Fib(2)=1 特点: 1)存在初值。 2)存在一个表达式。 3)求值的过程从初值开始,通过表达式不断的计算得出新值,新值是不断的通过旧值计算出来的。 我们称以上过程即为迭代过程。其思想就是由一个初值开始使用一个迭代表达式进行反复迭代,从而不断求出新值,直到求得需要的值。 迭代法 迭代过程的实现比较简单,常常使用循环结构生成效率极高的过程。 int fun(int n) { int i, fib, fib1, fib2; fib1=fib2=1; //初值 for (i=3; i=n; i++) //迭代条件:3 = i = n { fib = fib2 + fib1; fib2 = fib1; fib1 = fib; } return fib; } 穷举法 顾名思义就是将所有的情况全部列举出来的意思。 对于我们来说,穷举法似乎是一种“较笨”的算法,而且如果情况比较复杂,可能根本无法办到。 为什么还要提这种方法呢? 思路简单 很多情况下规律的寻找并不容易,有时可能无法找到。 穷举虽然对于人很麻烦易错,但是对于高速运算的计算机而言,实在是不在话下,而且重复机械计算正是计算机的特长。 穷举法 因此作为一种算法思想,加上计算机这种强大的计算工具,穷举也成为一种被人们经常使用的解决问题的方法。 举例 下棋程序中很多时候就是运用了穷举法则,每一步可能的走法及对应招数都被存储在海量存储器中,每下一步棋,电脑便依靠强大的计算速度查询海量存储器寻找对应的解决办法,然后猜测可能的结果,最终选定一步最好的走法。 求排列、组合问题 递归与分治 递归 定义:直接或间接地调用自身的过程称为递归过程。 递归与分治 递归的工作原理 递归与分治 递归三要素 1)问题形式:需要哪些输入参数?返回结果是什么? 2)递归规则:问题如何进行分解? 3)终结条件:什么情况下可以无须分解而直接求解? 递归与分治 分治 思想:将一个难以直接解决的大问题,分割成一些与原问题同类型的、规模小于原问题的子问题,然后各个击破,分而治之,最后再合并子问题的解从而得到原问题的解。 递归与分治 图例: 递归与分治 分治和递归的关系 由分治法产生的子问题往往是原问题的较小模式,这就为使用递归技术提供了方便。在这种情况下,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到很容易直接求出其解。这自然导致递归过程的产生。 分治与递归像一对孪生兄弟,经常同时应用在算法设计之中,并由此产生许多高效算法。 递归与分治 分治法所能解决的问题一般具有以下几个特征: 该问题的规模缩小到一定的程度就可以容易地解决; 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质 利用该问题分解出的子问题的解可以合并为该问题的解; 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。 递归与分治 分治法举例 Hanoi塔问题 问题描述:设a,b,c是3个塔座。开始时,在塔座a上有一叠共n个圆盘,这些圆盘自下而上,由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求将塔座a

文档评论(0)

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

分享好文档!

1亿VIP精品文档

相关文档