- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第二章 算法分析 【定义】一个算法是解决某一类问题的步骤的描述。一般而言,算法应该符合以下五项要求: (1) 输入:它接受一些输入(有些情况下不需要输入); (2) 输出:至少产生一个输出; (3) 确定性:算法的每一步必须有充分明确的含义,不可以有歧义; (4) 有限性:算法是一个有限指令集,并一定在有限步骤之后终止; (5) 可行性:算法的每一步必须在计算机能处理的范围之内。 ? 另外,算法的描述可以不依赖于任何一种计算机语言以及具体的实现手段。可以用自然语言、流程图等方法来描述。 ? 但是,用某一种计算机语言进行伪码描述往往使算法容易被理解,本书即采用C语言的部分语法作为描述算法的工具。 算法定义 〖例〗 选择法排序:把n个整数从小到大排序。 思想:从余下的未排序的部分整数中,挑选最小整数放在前面已排序部分的后面. 如何进行排序? 哪里? void SelectionSort ( int List[], int N ) { /* 将N个整数List[0]...List[N-1]进行非递减排序 */ for ( i = 0; i N; i ++ ) { MinPosition = ScanForMin( List, i, N–1 ); /* 从List[i]到List[N–1]中找最小元,并将其位置赋给MinPosition */ Swap( List[i], List[MinPosition] ); /* 将未排序部分的最小元换到有序部分的最后位置 */ } } 选择排序 = 找最小整数 + 交换至合适位置. 算法例子 ? 具体衡量、比较算法优劣的指标主要有两个: ? 空间复杂度S(n) ——根据算法写成的程序在执行时占用存储单元的长度。这个长度往往与输入数据的规模有关。空间复杂度过高的算法可能导致使用的内存超限,造成程序非正常中断。 算法复杂度 ? 时间复杂度 T(n) ——根据算法写成的程序在执行时耗费时间的长度。这个长度往往也与输入数据的规模有关。时间复杂度过高的低效算法可能导致我们在有生之年都等不到运行结果。 ? 什么是“好”的算法? ○ 例1.2 的实现函数PrintN的递归算法S(n)太大。 ○ 例1.3 的秦九韶算法的T(n)比较小。 算法复杂度 ? 例1.2 的实现函数PrintN的递归算法的S(n)太大: S(n) = c · n 其中:n是需要打印的整数的个数,是变量; c是1个单位的内存空间占用存储单元的长度,为固定常数。 ? 例1.3的秦九韶算法的T(n)比较小: T1(n) = c · n 其中:n是多项式的阶数,是变量; c是执行1次加法和乘法需要的时间,为固定常数。 ? 而简单直接算法的T(n)比较大: T2(n) = c1n2+c2n , 其中:n是多项式的阶数,是变量; c1是执行1/2次乘法需要的时间; c2是执行1次加法和1/2次乘法需要的时间,都是固定常数。 算法复杂度 ? 我们经常关注下面两种复杂度: ? 最坏情况复杂度: Tworst(n) ? 平均复杂度: Tavg(n) ? 显然: Tavg(n) ≤ Tworst(n)。 对 Tworst(n) 的分析往往比对 Tavg(n)的分析容易。 ? 如果: 程序A执行了(3n+4)步, 程序B执行了(2n+2)步, A一定比B慢吗? ? No! ? Why? 复杂度的渐进表示法 ? 如何来“度量”一个算法的时间复杂度呢? ? 首先,它应该与运行该算法的机器和编译器无关; ? 其次,它应该与要解决的问题的规模 n 有关; (有时,描述一个问题的规模需要多个参数) ? 再次,它应该与算法的“1步”执行需要的工作量无关! ? 所以,在描述算法的时间性能时,人们只考虑宏观渐近性质,即当输入问题规模 n“充分大”时,观察算法复杂度随着 n 的“增长趋势”: 当变量n不断增加时,解决问题所需要的时间的增长关系。 ? 比如:线性增长 T(n) = c·n 即问题规模n增长到2倍、3倍……时,解决问题所需要的时间T(n)也是增长到2倍、3倍……( 与c无关 ) ? 平方增长: T(n) = c·n2 即问题规模n增长到2倍、3倍……时,解决问题所需要的时间T(n)增长到4倍、9倍…… ( 与c无关 ) ? 引入下面几种数学符号: [定义1.1] T (n) = O(f(n)) 表示存在常数c 0, n0 0 , 使得当 n ≥ n0 时有 T (n) ≤ c f(n) ?
您可能关注的文档
- 湖南省六校联盟2017届高三年级联考语文试卷.doc
- 湖南省2012年对口招生考试计算机应用类综合试题卷.doc
- 湖南梨资源介绍.pptx
- 湖南省农村环境综合整治工作验收细则.doc
- 湖南省常德市2014年中考物理试题(word解析.doc
- 湖南省怀化市2015年高三第二次模拟考试文综地理1.doc
- 湖南省建设工程施工作业劳务分包合同.doc
- 温爱丽专题讲座.pptx
- 湖南省2017届高考数学研讨会:正确处理数学概念解析与解题训练的关系(共35张PPT).ppt
- 湖南省益阳市箴言中学2015-2016学年高一下学期期末综合练习 物理(一).doc
- 湘教版初一地理期末考前回扣.ppt
- 湘潭大学 数据结构实验1 实验报告 源代码 线性表基本操作.doc
- 湘教版-八下地理-第八章第2节台湾.ppt
- 湘教版地理八年级下册《第四节-交通运输业》精品课件.ppt
- 湘潭大学 数据结构 课件 ppt Ch05 Hashing.ppt
- 湘教版七年级地理(上)第二章地球的面貌2.2世界的海陆分布课件(共41张PPT).ppt
- 湘潭大学 数据结构 课件 ppt Ch07 Sorting 排序算法.ppt
- 湛江市2016届普通高考测试题(一)(物理)含答案.doc
- 湘潭大学 数据结构实验7 实验报告 源代码 查找和排序算法.doc
- 湘教版必修一《地形对聚落的影响》.pptx
原创力文档


文档评论(0)