湘潭大学 数据结构 课件 ppt Ch02 Algorithm Analysis.ppt

湘潭大学 数据结构 课件 ppt Ch02 Algorithm Analysis.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 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) ?

文档评论(0)

整理王 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档