- 1、本文档共91页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第1章 张孝乃绪论
分治法 基本思想是:把一个规模较大的问题分成两个或多个较小的与原问题相似的子问题。首先对子问题进行求解,然后设法把子问题的解合并起来,得出整个问题的解,即对问题分而治之。如果一个子问题的规模仍然比较大,不能很容易地求得解,就可以对这个子问题重复地应用分治策略。 二分法检索就是用分治策略的典型例子。 回溯法 基本思想是:有一些问题,需要通过彻底搜索所有可能情况寻找一个满足某些预定条件的最优解。由于彻底搜索的运算量通常非常大,所以采取一步一步向前试探,当有多种选择时可以任意选择一种,只要目前可行就继续向前,一旦发现问题或失败就后退,回到上一步重新选择,借助于回溯技巧和中间增加判断,这样常常可以大大地减少搜索时间。 常见的迷宫问题以及八皇后问题都可以用回溯方法来解决。 动态规划法 与分治法相似都是把一个大问题分解为若干较小的子问题,通过求解子问题而得到原问题的解。 不同点是: 分治法每次分解的子问题数目比较少,子问题之间界限清楚,处理的过程通常是自顶向下进行; 动态规划法分解的子问题可能比较多,而且子问题相互包含,为了重用已经计算的结果,要把计算的中间结果全部保存起来,通常是自底向上进行。 在带权图中,求所有结点之间最短路径的Floyd算法(见第9章)就属于动态规划法。 分枝界限法 与回溯法相似,也是一种在表示问题解空间的树上进行系统搜索的方法。 所不同的是,回溯法使用了深度优先策略,而分枝界限法一般采用广度优先策略或者采用最大收益(或最小损耗)策略,并且利用最优解属性的的上下界来控制搜索的分枝。 最后一章,在讨论背包问题时,介绍了一个用分枝界限法设计的算法。 1.4.3 算法的精化 实现一个算法,就是要把设计者头脑中的算法思想转化成计算机中可以执行的程序。 对于一个比较复杂的算法,其实现的过程往往需要经过多次细化才能完成。习惯上,把这个过程称为算法的精化。 基本概念-类型 类型(type)是一组值(或者对象)的集合。 例如:布尔作为一种类型是由真(true)和假(false)两个值组成的集合; 布尔向量也可以作为一种类型,它的每个值是一个由true或false构成的向量。 基本概念-数据类型 数据类型(data type)通常是指在计算机(语言)中可以使用的一个类型,它不但包括这个类型的值的集合,还包括定义在这个类型上的一组操作。 例如:整数作为一个数据类型是指在计算机上所能表示的(不是数学意义上任意大小的)所有整数和语言中定义的对于这些整数的全部操作(整数的加、减、乘、除、取余等)。 基本概念-抽象数据类型 抽象数据类型(Abstract Data Type 简称为ADT)可以定义作具有一定行为(操作)的抽象(数学)类型。 它不关心类型中值的具体表示方式和数据类型中定义的各种操作的具体实现方法,是所有可能的值的具体表示和各种操作的具体实现的抽象。 意义和作用(1) 抽象数据类型的实质是抽象出了数据类型的使用要求,而把它的具体表示方式和运算的实现细节都隐藏起来。 抽象数据类型仅仅规定了数据类型应该具有的行为(操作)。一旦抽象数据类型被正确实现,就好像程序设计语言中所提供的数据类型那样,可以被自由使用。 意义和作用(2) 抽象数据类型支持数据类型的实现与使用分离的原则,允许独立地考虑数据类型的外部接口和内部的实现。 这使应用程序只要按抽象数据类型的接口统一其使用界面;可以不管其是否已经实现,也不管它是如何实现的。 对于系统的分解、设计、维护和修改均十分有利。 ?例1-抽象数据类型圆 ADT Circle is operations area 计算圆的面积 circumference 计算圆的周长 getRadius 获取圆的半径 setRadius 设置圆的半径 end ADT Circle 例2-集合抽象数据类型 ADT Set is Operations isEmpty 判断集合是否是空集合 add 给集合增加一个元素 remove 删除集合中的一个元素 isIn 判断一个元素是否在当前集合中 end ADT Set 1.3 数据结构 关于数据结构的研究,可以追溯到1972年C.A.R.Hoare奠基性的论文《数据结构笔记》;而现代计算机所大量采用的基本数据结构,最早的系统论述应归功于1973年D.E.Knuth的名著《计算机程序设计技巧》的问世。 为了学习和研究的方便,计算机科学家把常用的数据进行分类,总结出许多典型的数据结构。 1.3.1什么是数据结构 (通常)可以把数据结构理解为: 计算机中表示(存储)的、具有一定(逻辑)关系和行为的一组数据。
文档评论(0)