第2章 基本的算法设计技术.ppt

  1. 1、本文档共23页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构与算法 作 者:胡明 王红梅 出版社:电子工业出版社 邮 箱:wanghm@mail.ccut.edu.cn 数据结构与算法 电子工业出版社 蛮力法 分治法 减治法 贪心法 动态规划法 本章的基本内容是: 第 2 章 基本的算法设计技术 蛮力法(Brute Force Method,也称穷举法)通常采用一定的策略依次处理待求解问题的所有数据,从而找出问题的解,是一种简单直接地解决问题的方法。例如,对于给定的整数a和非负整数n,计算an的值,最直接的想法就是把1和a相乘n次。 蛮力法常常直接基于问题的描述,所以是最容易应用的方法。但是,用蛮力法设计的算法其时间性能往往也是最低的。因此,蛮力法通常用来解决非常基本的问题。在本书中,有关线性表的基本操作、顺序查找算法、模式匹配BF算法、起泡排序、简单选择排序等算法都是蛮力法的应用实例。 蛮力法的设计思想 2.1 蛮力法 【问题】求解如图2-1所示数字谜。 【想法】将A、B、C依次试探每一个可能解,约束条件是满足等式关系ABB×B = ACBC。 【算法】注意到,A的穷举范围是1~9,B的穷举范围是2~9(因为乘法结果有进位,则B至少是2),C的穷举范围是0~9,算法用伪代码描述如下: 蛮力法的设计思想 2.1 蛮力法 蛮力法的设计思想 2.1 蛮力法 分治法的设计思想 2.2 分治法 分治者,分而治之也。分治法(Divide and Conquer Method)的设计思想是将一个难以直接解决的大问题,划分成一些规模较小的子问题,以便各个击破,分而治之。由分治法产生的子问题往往是原问题的较小模式,反复应用分治手段,可以使子问题与原问题类型一致而其规模却不断缩小,最终使子问题缩小到能够直接求解,这自然导致递归。分治与递归经常同时应用在算法设计之中,并由此产生许多高效的算法。 分治法的设计思想 2.2 分治法 一般来说,分治法的求解过程由以下三个阶段组成: (1)划分:把规模为n的原问题划分为k个规模较小的子问题。 (2)求解:各子问题的解法与原问题的解法通常是相同的,可以用递归的方法求解各个子问题,有时递归处理也可以用循环来实现。 (3)合并:把各个子问题的解合并起来,合并的代价因情况不同有很大差异,分治算法的有效性很大程度上依赖于合并的实现。 分治法的设计思想 2.2 分治法 2.2 分治法 【问题】输出如下所示N×N(1≤N≤10)的数字旋转方阵。 【想法】用二维数组 data[N][N]表示N×N的方阵,从外层向里层填数。 2.2 分治法 2.3 减治法 减治法的设计思想 减治法(Reduce and Conquer Method)在将原问题分解为若干个子问题后,利用了原问题的解与子问题的解之间的关系,这种关系通常表现为: (1)原问题的解只存在于其中一个较小规模的子问题中; (2)原问题的解与其中一个较小规模的解之间存在某种对应关系。 由于原问题的解与较小规模的子问题的解之间存在这种关系,所以,只需求解其中一个较小规模的子问题就可以得到原问题的解,无需对子问题的解进行合并,所以,严格地说,减治法应该是一种退化了的分治法。 2.3 减治法 减治法的三种类型 (1)减常量,算法每次迭代总是从实例规模中减去一个相同的常量,一般来说,这个常量等于一。 (2)减常数因子,算法每次迭代总是从实例规模中减去一个相同的常数因子,一般来说,这个常数因子等于二。 (3)减可变规模,算法每次迭代时减去的规模都是不同的。 2.3 减治法 【问题】在n枚外观相同的硬币中有一枚是假币,并且已知假币较轻。可以通过一架天平来任意比较两组硬币,从而得知两组硬币的重量是否相同,或者哪一组更轻一些,假币问题是要求设计一个高效的算法来找出这枚假币。 【想法】问题的解决是经过一系列比较和判断,最自然的想法就是一分为二。考虑不是把硬币分成两组,而是分成三组,可以获得了更少的比较次数。 这个递推式的解是T(n)=O(log3n)。 2.3 减治法 2.4 贪心法 贪心法(Greedy Method)是把一个复杂问题分解为一系列较为简单的局部最优选择,每一步选择都是对当前解的一个扩展,直到获得问题的完整解。 正如其名字一样,贪心法在解决问题的策略上目光短浅,只根据当前已有的信息做出选择,而且一旦做出了选择,不管将来有什么结果,这个选择都不会改变。 显然,贪心法的关键是设计合理的贪心选择策略。 例:付款问题。 2.4 贪心法 【问题】

文档评论(0)

***** + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档