网站大量收购闲置独家精品文档,联系QQ:2885784924

[计算机软件及应用]chap01-绪论.ppt

  1. 1、本文档共93页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[计算机软件及应用]chap01-绪论

计算机与电子信息学院 秦亮曦 Niklaus Wirth简介 尼克劳斯·沃斯(Niklaus Wirth)教授,Pascal系列语言之父,世界闻名的计算机科学家。 Wirth先生个人主页:http://www.cs.inf.ethz.ch/~wirth/ 实际可行的复杂性 估计算法时间复杂度示例 例 1 {++x; s=0;} 将x自增看成是基本操作,则语句频度为1,即时间复杂度为O(1) 如果将s=0也看成是基本操作,则语句频度为2,其时间复杂度仍为O(1),即常量阶。 例 2、for(I=1;I=n;++I) {++x;s+=x;} 语句频度为:2n 其时间复杂度为:O(n) 即时间复杂度为线性阶。 估计算法时间复杂度示例 例 3、for(I=1;I=n;++I)     for(j=1;j=n;++j) {++x;s+=x;} 语句频度为:2n2  其时间复杂度为:O(n2) 即时间复杂度为平方阶。 估计算法时间复杂度示例 例 4 for(i=2;i=n;++i) for(j=2;j=i-1;++j) {++x; a[i,j]=x;} 语句频度为: 1+2+3+…+n-2=(1+n-2) ×(n-2)/2 =(n-1)(n-2)/2 =n2-3n+2 ∴时间复杂度为O(n2) 即此算法的时间复杂度为平方阶. 一个算法时间为O(1)的算法,它的基本运算执行的次数是固定的。因此,总的时间由一个常数(即零次多项式)来限界。而一个时间为O(n2)的算法则由一个二次多项式来限界。 和算法执行时间相关的因素: 1.算法选用的策略(如顺序查找或折半查找) 2.问题的规模(如求100以内还是1000以内的素数) 3.编写程序的语言(效率与实现语言的级别成反比) 4.编译程序产生的机器代码的质量 5.计算机执行指令的速度(时钟频率,CPU) 在算法策略确定和测试环境相同的情况下: 一个特定算法的“运行工作量” 的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。 假如,随着问题规模 n 的增长,算法执行时间的增长率和 f(n) 的增长率相同,则可记作: T (n) = O(f(n)) 称T (n) 为算法的(渐近)时间复杂度。 其中, O(f(n)) 表示与f(n)同阶, 记号O()称为大O记号, 读作“大欧” 。 定义1.1 大O表示法 若存在两个正的常数c和n0,对于任意n≥n0,都有T(n) ≤ c×f(n),则称: T(n)=O(f(n)) 例 5n + 4 = O(n) 100n + 6 = O(n) 10 n2 + 4n + 2 = O(n2) 6*2n + n2 = O(2n) 3n + 2 ? O(1) 定理1.1 若f(n)=amnm+am-1nm-1+?+a1n+a0是一个m次多项式,则f(n) = O(nm) 。 说明:在计算算法时间复杂度时,可以忽略所有低次幂和最高次幂的系数。 常见的复杂度有: 常数阶 O(1) 对数阶 O(log2n) 线性阶 O(n) 线性对数阶 O(nlog2n) 平方阶 O(n2) 立方阶 O(n3) 多项式时间算法 指数阶 O(2n)O(n!)O(nn) 指数时间算法 指数阶的算法效率极低,当问题规模n稍大时就无法使用。 常见函数的增长率 2n 0.5n3 5n2 100n 200log2n 25nlog2n 下一页中的表列出了在每秒10亿个程序步的计算机上时间复杂性为f(n)的算法运行所需要的时间。 从实际可行的角度考虑,对于合理大的n(例如,n100),只有复杂性较小(如,n,nlog2n,n2,n3)的算法是实用的。即使计算机的速度再提高1000倍,表中时间也只不过缩小1000倍。在这种情况下,当n=100时,n10个程序步的运行时间是3171年,2n个程序步的运行时间是4?1013年。 可见,如果一个算法的时间复杂性过高,当n大于一定值时,再快的计算机也无法在实际可行的时间内完成其运行。 如何估算 算法的时间复杂度? 执行一个算法的时间复杂度,即算法中每条语句在计算机上执行的时间总和,大致上可以认为它等于计算机执行一种基本操作(基本操作由一组语句组成。)所需

文档评论(0)

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

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

1亿VIP精品文档

相关文档