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

C语言算法与数据结构简明教程1.ppt

  1. 1、本文档共128页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.1 基本概念和术语 1、数据 2、数据元素 数据项 数据对象 3、数据结构 结构 ①数据的逻辑结构 可描述为:S=(D,R),其中 D为数据对象,R为数据元素之间相互关系的集合。 ③数据的运算 是定义在数据的逻辑结构上的,但运算的具体实现与存储结构相关联。 常用的运算有:查找、插入、删除、更新和排序。 4、数据类型:是一个值的集合和定义在该值集合上运算的集合。 5、抽象数据类型:抽象数据组织和与之相关操作。可看成是数据的逻辑结构及定义在其上的运算。 1.2 算法的描述 1、算法:是为实现某个计算过程而规定的基本动作的执行序列。 特性: 有穷性:必须在执行有限步后结束; 确定性:算法的每一步必须是确切地定义的; 可行性:算法的每一个基本运算可用以实现的基本运算执行有限次来实现的。 输入:有0个和多个输入; 输出:有1个和多个输出; 1.3 算法分析基础知识 一、 概述 1、判断算法的好坏的标准: 正确性 可读性 健壮性 效率 2、确定算法效率的方法:事后测量和事先估算事先估算算法代价增长率的上界 (1)空间代价度量 例:float sum(float a[ ],const int n) {float x=0.0; for(int i=0;in;i++)s+=a[i]; return s;} 固定部分:程序指令代码、常数、简单变量、定长成分(如数组元素、结构成分、对象的数据成员等)变量所占空间。 可变部分:尺寸与实例特性有关的成分变量所占空间、递归栈所用空间、通过 new 和 delete 命令动态使用空间等。 若空间大小与n有关,可以找出其函数关系,动态存储分配的空间需求应具体分析。 (2) 时间代价度量 用统计算法中语句执行的单位时间来度量其运行时间。 约定:计算不含调用语句的表达式值为1个单位时间. 列表法统计算法运行时间。 例1:非递归求和程序 float sum(float a[ ], int n) {float s=0.0; for(int i=0;in;i++)s+=a[i]; return s;} 非递归求和程序计算程序步数表 3、算法渐进时间复杂度 用“大O表示法”描述算法分析结果. 设f(n)和T(n)是定义在正数集合上,当且仅当存在正整数c和n0,使得对所有的n≥n0,都满足T(n)≤cf(n).当n充分大时,随n的增加,如果函数T(n)存在一个增长的上界cf(n),则算法的渐近时间复杂度为O(f(n)),记为T(n)=O(f(n))。 4、 算法渐进空间复杂度 设S(n)是问题规模n的空间函数,算法的渐近空间复杂度为O(f(n)),记为S(n)=O(f(n))。 例1.1 设T(n)=3n3+n2,证明T(n)=O(n3)。 因为存在n0=1,c=4,当n≥1时,有3n3+n2≤4n3,所以T(n)=O(n3)。 算法复杂度包括时间复杂度和空间复杂度, 较常见的算法复杂度有: O(1)(常量阶),非0正常数都属于常量阶; O(n),O(n2),O(nk)(多项式阶); O(log2n),O(nlog2n)(对数阶); O(2n),O(en)(指数阶). 二、 算法执行时间分析例子。 例1.2 在含n个正整数的一维数组中查找最大值的算法如下: 语句行 int max(int *a,int n)语句频度 1?????? {int s=0; 1 2?????? for(i=0;in;i++) n+1 3??????? if(a[i]s) s=a[i]; n 4??????? return s;} 1 算法执行时间为: T(n)=2n+3=O(n) 例1.4 求矩阵a中所有下三角元素之和的算 法如下: 语句行 float sum(float **a,int n) 语句频度 1 {int i,j; float s=0.0; 1 2 for(i=0;in;i++) n+1 3 for(j=0;j=i;j++) n(n+3)/2 4 s+=a[i][j]; n(n+1)/2 5

文档评论(0)

大漠天下 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档