- 1、本文档共89页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一章 绪论部分数据结构.ppt
数据结构 1.1、什么是数据结构 1.2、基本概念和术语 1.3、算法的描述和分析 1.1、什么是数据结构 旅游交通网络图 1.2 基本概念和术语 1.3 算法的描述和分析 一、算法 二、算法的特性 三、算法设计的原则 四、算法效率的衡量方法和准则 五、算法的存储空间需求 六、算法的描述 七、类C语言语法概要 八、算法的评价 八、算法的评价 1、执行算法所耗费的时间,即时间复杂度。 T(n)=O(f(n)) 2、执行算法所耗费的存储空间,其中主要考虑辅助存储空间的大小,即空间复杂度。记作 S(n)=O(f(n))其中,n为问题的规模(或大小)。 3、算法是否易读、是否容易转换成任何其它可运行的语言编制的程序以及是否易被测试等等。 四、算法效率的衡量方法和准则 通常有两种衡量算法效率的方法: 事后统计法 事前分析估算法 缺点: 1.必须先运行依据算法编制的程序; 2.所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优劣。 和算法执行时间相关的因素: 1.算法选用的策略 2.问题的规模 3.编写程序的语言 4.编译程序产生的机器代码的质量 5.计算机执行指令的速度 显然,同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的计算机上运行时,效率均不相同。这表明用绝对的时间单位衡量算法的效率是不合适的。撇开这些与计算机硬件、软件有关的因素,可以认为: 一个特定算法的“运行工作量”的大小,只依赖于问题的规模(通常用整数量n表示),或者说,它是问题规模的函数。 假如,随着问题规模 n 的增长,算法执行时间的增长率和 f(n) 的增长率相同,则可记作: T (n) = O(f(n)) 称T (n) 为算法的(渐近)时间复杂度。 如何估算 算法的时间复杂度? 算法 = 控制结构 + 原操作 (顺序、分支、循环)(固有数据类型的操作) 则算法的时间取决于两者的综合效果。为了便于比较同一问题的不同算法,通常的做法是,从算法中选取一种对于所研究的问题(或算法类型)来说是基本操作的原操作,以该基本操作重复执行的次数作为算法的时间度量。 算法的执行时间 = 原操作(i)的执行次数×原操作(i)的执行时间 算法的执行时间 与 原操作执行次数之和 成正比 从算法中选取一种对于所研究的问题来说是 基本操作 的原操作,以该基本操作 在算法中重复执行的次数 作为算法运行时间的衡量准则。语句重复执行的次数称为语句的频度。 由于算法的时间复杂度考虑的只是对于问题规模n的增长率,则在难以精确计算基本操作执行次数(或语句频度)的情况下,只需求出它关于n的增长率或阶即可。 例: ① ++x; O(1) 常量阶 ② for (i=1;i=n;i++) {++x;} O(n) 线性阶 ③ for (i=1;i=n;i++) for (j=1;j=n;j++) {++x;} O(n^2) 平方阶 还可能呈现的时间复杂度有:对数阶O(log n)、指数阶O(2n)等。 例1:两个矩阵相乘 void mult(int a[], int b[], int c[] ) { // 以二维数组存储矩阵元素,c 为 a 和 b 的乘积 for (i=1; i=n; ++i) for (j=1; j=n; ++j) { c[i,j] = 0; for (k=1; k=n; ++k) c[i,j] += a[i,k]*b[k,j]; } //for } //mult 基本操作: 乘法操作 时间复杂度: O(n3) 例2:选择排序 void select_sort(int a[], int n) { // 将 a 中整数序列重新排列成自小至大有序的整数序列。 } // select_sort 基本操作: 比较操作 时间复杂度: O(n2) j = i; // 选择第 i 个最小元素 for (k = i+1;
文档评论(0)