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

[计算机]2005241095-ch01.ppt

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

第一章 绪论 相关教学计划: 时间复杂度的估算 为了估算给定算法的时间复杂度,需要求出算法中基本操作的重复执行次数。多数情况下,基本操作是最深层循环体中的原操作,其重复执行次数和包含它的语句的频度相同。 语句的重复执行次数 for (i=2; i=n; ++i) for (j=2; j=i-1; ++j){ ++x; a[i][j]=x;} 例 语句 ++x 的频度: 1+2+…+(n-2) = (n-1)(n-2)/2 T(n) = O((n-1)(n-2)/2) ? 1 2 (n-1)(n-2)/2 n2 lim n?? = ? 1 2 3 2 n2 - n+1) = O(n2) = O( 时间复杂度的估算 提示一:多数情况下,可以把算法中语句的最高频度的量级作为算法的时间复杂度。 提示二:如果算法的时间复杂度随数据集的不同而不同,一般依据最坏的情况进行估算;也可在某个约定(如等概率)下讨论算法的平均时间复杂度。 提示三:对于较复杂的算法,可以将它分割成容易估算的几个部分分别进行估算,然后利用大O的求和法则得到整个算法的时间复杂度。 提示四:问题的规模有时需用两个参数 描述,如m?n 矩阵的处理,两个有序线性 表的合并等。此时算法的时间复杂度 T(m,n)=O(f(m,n)) 时间复杂度的估算 例: 起泡排序算法 void bubble_sort( int a[ ], int n ) { // 将a中整数序列重新排列成自小至大有序的整数序列 for ( i=n-1,change=TRUE; i=1change; --i ) { change=false; for ( j=0; ji; ++j ) if ( a[j]a[j+1] ) { a[j]?a[j+1]; change=TRUE; } } }// bubble_sort 起泡排序算法分析 排序算法基本操作: 关键字的比较,记录的移动(记录的交换) 最小比较次数: n-1 最大比较次数: 最小交换次数: 最大交换次数: 0 (n-1)+(n-2)+…+1=n(n-1)/2 n(n-1)/2 最坏情况下的时间复杂度:O(n2) 算法的空间复杂度(space complexity)是算法所需存储空间的量度,记作 它表示: 随着问题规模 n 的增大,算法运行所需存储量的增长率与函数 f(n)的增长率相同。 S(n) = O( f (n) ) 1.4.4 算法的存储空间需求 空间复杂度分析的重点是辅助变量所占空间—— 辅助存储量(附加空间)。 若所需辅助存储量为常数,则称相应算法为原地工作。 算法的存储量包括: 1.输入数据所占空间 2.程序本身所占空间 3.辅助变量所占空间 1.熟悉各名词术语的含义,掌握其 基本概念。 2.掌握类C 语言的特点和算法书写 规范。 本章学习要点 3.掌握计算语句频度的方法和估算 算法时间复杂度的基本技术。 抽象数据类型按其构成情况可分为三种类型: 原子类型(Atomic Data Type) 该类型变量的值不可分解。如数位为100的长整数。 固定聚合类型(Fixed-aggregate Data Type) 该类型变量的值由确定数目的元素按某种结构组成。如静态查找表、哈希表等。 可变聚合类型(Variable-aggregate Data Type) 该类型变量的值由不确定数目的元素按某种结构组成。如线性表、二叉树、动态查找表等。 抽象数据类型是一个三元组 ADT= (D, S, P) 其中: D 是数据对象(性质相同的数据元素的有限集)。 S 是 D 上关系的有限集。 P 是对 D 的基本操作的有限集。 抽象数据类型的形式定义 抽象数据类型的定义格式: ADT 抽象数据类型名{ 数据对象:〈数据对象的定义〉 数据关系:〈数据关系的定义〉 基本操作:〈基本操作的定义〉 } ADT 抽象数据类型名 基本操作名(参数表) 初始条件:〈初始条件描述〉 操作结果:〈操作结果描述〉 其中,基本操作的定义格式为: 例: 定义一个抽象数据类型——三元组 ADT Triplet{ 数据对象:D={ e1,e2,e3 | e1,e2,e3?ElemSet } 数据关系:R1={e1,e2,e2,e3} 基本操作: InitTriplet( T,v1,v2,v3 ) 操作结果:构造了三元组 T,元素

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档