- 1、本文档共64页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法分析与复杂度计算 主讲教师:徐红艳 课程简介 课程简介 人类使用计算机的目的:计算机作为工具,帮助人类求解问题。 算法设计的重点:把人类找到的求解问题的方法、步骤以过程化、形式化和机械化的形式表现出来,以便让计算机执行。 算法分析:是对一个算法需要多少计算时间和存储空间作定量的分析 ——复杂度计算。 1.1.1 用计算机求解问题的步骤 人在解决问题时有很大的灵活性,对于同一个问题,不同的人有不同的经验,会采用不同的方法,如何用计算机解决一个现实中的问题呢?虽然有很多不同的方法,但基本步骤是相同的。 1.1.1 用计算机求解问题的步骤 问题分析 数学模型建立 算法设计与选择 算法表示 算法分析 算法实现 程序调试 结果整理文档编制 1.1.1 用计算机求解问题的步骤 问题分析:准确、完整地理解和描述问题是解决问题的第一步。 数学模型建立:用计算机解决实际问题必须有合适的数学模型。 算法设计与选择:算法设计是指设计求解某一特定类型问题的一系列步骤,并且这些步骤是可以通过计算机的基本操作来实现的。 1.1.1 用计算机求解问题的步骤 算法分析:对算法的某些特定输入,估算该算法所需的内存空间和运行时间;其次是为了建立衡量算法优劣的标准,用以比较同一类问题的不同算法。通常将时间和空间的增长率作为衡量的标准。 1.1.1 用计算机求解问题的步骤 算法表示:对于复杂的问题,确定算法后可以通过图形准确表示算法。算法的表示方式很多如:算法流程图、盒图、PAD图和伪码(类似于算法设计语言)等。 算法实现:根据选用的程序设计语言,编写出计算机能够执行的程序。 1.1.1 用计算机求解问题的步骤 程序调试:算法测试的实质是对算法应完成任务的实验证实,同时确定算法的使用范围。测试方法一般有两种:白盒测试对算法的各个分支进行测试;黑盒测试检验对给定的输入是否有指定输出。 1.1.1 用计算机求解问题的步骤 结果整理文档编制:编制文档的目的是让人了解你编写的算法。 在这些步骤中,算法设计是解决问题的核心。其次是针对设计的算法进行复杂度分析。 1.1.2 算法及其要素和特性 算法的定义:算法是求解某一特定问题的一组有穷规则的集合。 算法的要素: 操作:算术运算、关系比较、逻辑运算、数据传送(I/O,赋值等) 控制结构:顺序、选择、循环控制(也称迭代) 数据结构:数据的逻辑结构及存储结构 1.1.2 算法及其要素和特性 算法的基本性质: 目的性:能完成赋予它的功能 分步性:由一系列计算机可执行的步骤组成 有序性:不可随意改变算法步骤的执行顺序 有限性:算法所包含的步骤是有限的。 操作性:算法总是对某些对象进行操作,使其状态改变,完成特定功能。 1.1.2 算法及其要素和特性 算法的基本特征 有穷性: 一个算法在执行有穷步之后必须结束,而且要求运行这些步骤的时间是人们可以接受的。 确定性:在任何条件下,算法都只有一条执行路径。 可行性:算法中描述的操作都可以通过已经实现的基本操作运算有限次实现。 输入:有零个或多个输入 输出:有一个或多个输出 1.1.3 算法设计及基本方法 算法设计的概念:其任务是对各类具体问题设计良好的算法。 算法设计应注意的问题 正确性(Correctness) 可读性(Readability) 健壮性(Rubustness) 高效率与低存储量需求 1.1.3 算法设计及基本方法 算法设计的基本方法 结构化方法——“自顶向下, 逐步求精” “自顶向下”是将复杂、大的问题划分为小问题。 “逐步求精”是将现实世界的问题经抽象转化为逻辑空间或求解空间的问题。 1.1.3 算法设计及基本方法 面向对象方法 对象=数据+对数据操作的代码实体 面向对象算法设计方法的过程包括以下步骤: ① 在给定的抽象层次上识别类和对象 ② 识别这些对象和类的语义 ③ 识别类和对象之间的关系 ④ 实现类和对象 1.1.3 算法设计及基本方法 本书采用的设计方法——结构化设计方法 自顶向下模块化分解过程 把一个较大的算法划分为若干子算法 每一个模块可继续划分为更小的子模块 直到用三种控制结构和具体操作表示算法 ※注:运用这种编程方法,考虑问题必须先进行整体分析。 1.1.3 算法设计及基本方法 模块划分的基本要求——简单性、独立性和完整性 模块的功能尽可能地单一化、明确化 模块间的联系及相互影响尽可能地小 模块的规模应当足够小,以便于调试 1.1.3 算法设计及基本方法 算法设计的基本方法 抽象:包括算法的抽象和数据抽象。 算法抽象是指算法的寻求(或开发)采用逐步求精、逐层分解的方法。 数据抽象也指在算法抽象的过程中逐步完善数据结构和引入新的数据及确定关于数
文档评论(0)