版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据结构(C语言版)
严蔚敏吴伟民编著南阳理工学院李冬梅什么是类C语言?
类C语言是介于伪码和C语言的一种描述工具.其语法基本上全部取自标准C语言,因而易于转化为C/C++的程序,但它是简化的,不严格的,不可以真正在计算机上运行,这主要反映在一下几点:可以采用伪码语言取代某些不必确切描述的语句或语句串.省略函数体中的简单变量的说明.输入/输出函数只说明输出什么,不考虑输入/输出的格式.强化赋值语句的功能.类C语言简要说明1.预定义常量和类型
格式:#define标识符字符串//函数结果状态代码
#defineTRUE1
#defineFALSE0
#defineOK1
#defineERROR0
#defineOVERFLOW-2
*
类C语言*类C语言
数据结构的表示(数据的存储结构)用C的类型定义(typedef)描述。数据元素类型约定为ElemType,由用户在使用该数据类型时自行定义typedefintElemType;//Status
是函数的类型,其值是函数结果状态代码
typedefintStatus;
基本操作的算法都用以下形式的函数描述:
函数类型函数名(函数参数表){
//算法说明
语句序列
}//函数名
除了函数的参数需要说明类型外,算法中使用的辅助变量可以不作变量说明,必要时对其作用给予注释。一般而言,a、b、c、d、e等用作数据元素名,i、j、k、l、m、n等用作整型变量名,p、q、r等用作指针变量名。当函数返回值为函数结果状态代码时,函数定义为Status类型。为了便于算法描述,除了值调用方式外,增添了C++语言的引用调用的参数传递方式。在形参表中,以&打头的参数即为引用参数。引用参数是实参的别名,所谓别名就是同一变量的另外一个名字。
voidswap(intn,intm){//函数定义
//参数为值参数
inttemp;
temp=n;n=m;m=temp;
}voidswap&(int&n,int&m){
//函数定义,参数为引用参数
inttemp;
temp=n;n=m;m=temp;
}main(){
inta=10,b=20,c=10,d=20;
swap(a,b);//函数调用
swap&(c,d);//函数调用
}结果:a=10,b=20c=20,d=10例交换两个整数变量的算法
下面通过例子来说明引用参数的概念,值参和引用参数的区别。a10b20调用函数Swap()参数传递Swap()体nm1020执行Swap()nm2010语言值参函数Swap(a,b)的调用*类C语言cd1020调用函数Swap&()Swap&()体nm执行Swap&()cd2010参数传递nm引用参数函数Swap&()的调用*
类C语言对于对数据有修改作用的操作(函数),要用引用参数作形参,而不能用值参作形参。*
类C语言赋值语句
简单赋值变量名=表达式;
串联赋值变量名1=变量名2=…变量名k=表达式;
成组赋值(变量名1,…变量名k)=(表达式1,…,表达式k);
结构名=结构名;
结构名=(值1,…,值k);
变量名[]=表达式;
变量名[起始下标..终止下标]=变量名[起始下标..终止下标];
交换赋值变量名←→变量名;
条件赋值变量名=条件表达式?表达式T;表达式F;条件语句1if(表达式)语句;
条件语句2if(表达式)语句;
else语句;
开关语句1
switch(表达式){
case值1:语句序列1;break;
…
case值n:语句序列n;break;
default:语句序列n+1;
}
开关语句2
switch{
case条件1:语句序列1;break;
…
case条件n:语句序列n;break;
default:语句序列n+1;}选择语句循环语句
for语句for(赋初值表达式序列;条件;修改表达式序列)语句;
while语句while(条件)语句;
do-while语句do{
语句序列;
}while(条件);
结束语句
函数结束语句return表达式;
return;
case结束语句break;
异常结束语句exit(异常代码)8输入和输出语句有
输入语句scanf([格式串],scanf变量1,…,变量n);
输出语句printf([格式串],表达式1,…,表达式n);
通常省略格式串。9注释
单行注释//文字序列10基本函数有
求最大值max(表达式1,…,表达式n)
求最小值min(表达式1,…,表达式n)
求绝对值abs(表达式)
求不足整数值floor(表达式)
求进位整数值ceil(表达式)
判定文件结束eof(文件变量)或eof
判定行束eoln(文件变量)或eoln
*
类C语言逻辑运算约定与运算&&:对于A&&B,当A的值为0时,不再对B求值。
或运算||:对于A||B,当A的值为非0时,不再对B求值。*C的数据类型在本课程中,数据的存储结构是用C语言的数据类型描述(定义)的,主要用到下列数据类型:数组,结构,指针1数组1)数组类型变量(数组变量)由一组类型相同的数据元素组成2)数组的类型定义和变量定义typedef数组元素类型名数组类型名[常量表达式];数组类型名数组变量名;例某班40个学生的数学成绩,可以用有40个数组分量的整型数组变量存储。
TypedefintSCoreType[40];
SCoreTypeclass1;数组类型名数组变量*C的数据类型3)数组在内存中的存储示意图
01239class数组变量*C的数据类型4)数组分量(数组元素)的引用
数组变量[下标]例:for(i=0;i<=39;++i)class[i]=0;数组变量class
012390000数组元素下标*C的数据类型2结构1)结构类型变量(结构变量)由一组类型可以不同的数据元素组成2)结构的类型定义和变量定义typedef结构定义结构类型名;结构类型名结构变量名;例一本书可以用有2个数据成员(数据域)结构变量存储。Typedefstruct{intno;chartitle[40];}BookType;
BookTypebook1;结构类型名结构变量名*C的数据类型3)结构变量在内存中的存储示意图notitle4)结构变量的引用结构变量名.成员名(结构变量名.域名)例:book1.no=1;scanf(“%s”,book1.title);notitle1*C的数据类型3指针1)指针类型变量(指针变量)用于存储变量地址(或称指向该变量)2)指针的类型定义和变量定义(只介绍本课程用到的指向结构变量指针类型)
typedef结构定义*指针的类型名;
指针的类型名指针变量名变量定义类型定义
例typedefstruct{intno;chartitle;}*BookPtType;BookPtTypepbook;
指向结构类型变量的指针类型notitlepbook指向结构类型变量的指针变量
pbook是指针变量,存放结构类型变量的地址,通常用箭头表示pbook中存放的是它所指向的结构变量的地址。3)指针所指变量的引用指针变量->结构变量成员名(指针变量->结构变量的域名)例typedefstruct{intno;chartitle;}*BookPtType;BookPtTypepbook;pbook->no=1;scanf(“%s”,pbook->title);给pbook所指结构变量的
no成员赋值1notitlepbook1
1.1
数据结构的发展简史及其在计算机科学中所处的地位内容提要1.2本课程的研究对象;1.3数据结构的有关基本概念;1.4抽象数据类型1.5数据结构的分类及表示;1.6算法及算法分析(算法评价)第一章绪论内容提要§1.1数据结构的发展简史及其在计算机
科学所处的地位内容提要
众所周知,二十世纪四十年代,电子数字计算机问世的直接原因是解决弹道学的计算问题。早期,电子计算机的应用范围,几乎只局限于科学和工程的计算,其处理的对象是纯数值性的信息,通常,人们把这类问题称为数值计算。近三十年来,电子计算机的发展异常迅猛,这不仅表现在计算机本身运算速度不断提高、信息存储量日益扩大、价格逐步下降,更重要的是计算机广泛地应用于情报检索、企业管理、系统工程等方面,已远远超出了科技计算的范围,而渗透到人类社会活动的一切领域。与此相应,计算机的处理对象也从简单的纯数值性信息发展到非数值性的和具有一定结构的信息。因此,再把电子数字计算机简单地看作是进行数值计算的工具,把数据仅理解为纯数值性的信息,就显得太狭隘了。现代计算机科学的观点,是把计算机程序处理的一切数值的、非数值的信息,乃至程序统称为数据(Data),而电子计算机则是加工处理数据(信息)的工具。由于数据的表示方法和组织形式直接关系到程序对数据的处理效率,而系统程序和许多应用程序的规模很大,结构相当复杂,处理对象又多为非数值性数据。因此,单凭程序设计人员的经验和技巧已难以设计出效率高、可靠性强的程序。于是,就要求人们对计算机程序加工的对象进行系统的研究,即研究数据的特性以及数据之间存在的关系——数据结构(DateStructure)。
§1.1数据结构的发展简史及其在计算机
科学所处的地位内容提要
§1.1数据结构的发展简史及其在计算机
科学所处的地位内容提要
发展史:1、“数据结构”作为一门独立的课程在国外是从1968年才开始设立的。2、1968年美国唐·欧·克努特教授开创了数据结构的最初体系,他所著的《计算机程序设计技巧》第一卷《基本算法》是第一本较系统地阐述数据的逻辑结构和存储结构及其操作的著作。地位:1“数据结构”在计算机科学中是一门综合性的专业基础课。2数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。3数据结构这一门课的内容不仅是一般程序设计(特别是非数值性程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他系统程序的重要基础。§1.1数据结构的发展简史及其在计算机
科学所处的地位内容提要
§1.2本课程的研究对象
数据结构是研究什么的?这是课程最基本的问题,关系到我们为什么要学习数据结构这门课程。为回答这个问题,我们先来看看:1什么是数据?[数据Data]:客观事物的符号表示。在计算机学科中,数据的概念被大大的扩充了,不仅包含数学中的整数实数,任何能用计算机识别的符号都可作为数据。
例如:课程名,地名,书名都是数据。2什么是程序?程序描述了数据加工处理的过程,即程序的任务是对数据进行加工处理。
例:求阶乘的程序
main(){
inti,n,fac=1;
scanf(“%d\n”,&n);
for(i=1;i<=n;++i)fac=fac*i;
printf(“n!=%d”,fac);
}运行该程序,通过键盘输入一个整数n,得到的结果是该数的阶乘n!
§
1.2本课程的研究对象3.什么是程序设计?程序设计是将问题的求解过程用某种计算机语言表达出来。
为编写程序,首先要分析实际问题所涉及的对象,要解决数据如何表达,如何存储,如何处理的问题。
数据结构:就是研究关于数据表达,数据存储及数据处理的方法。
有些计算机专家认为:
程序设计=数据结构+算法§
1.2本课程的研究对象4数值问题与非数值问题
有的同学可能想:我们在学习程序设计时,例如学习C语言时,学习过各种数据类型数据如何表达,如何存储,如何处理,如整型变量,可用标识符表达,在内存中它们通常是占用16个二进制位,可对它们作加减乘除操作,但是C语言中学习过的关于数据的知识,只能求解一些简单的计算问题和应用问题,如果你要想设计求解比较复杂的问题的程序,比如比word简单的多的文本编辑程序,你还需要进一步的学习。
从应用问题涉及的对象来分可分为数值问题和非数值问题。数值问题就是我们平时所说的计算问题,如已知圆的半径,要求圆的面积。非数值问题就是问题中涉及的对象不能用数来表达的那些问题。§
1.2本课程的研究对象1)数值问题例1已知:游泳池的长lengh和宽wide,求面积area。
分析:
问题涉及的对象:游泳池的长lengh宽wide,面积area;
对象之间的关系:area=lenghwide;
下面我们来看看数值问题与非数值问题有什么不同§1.2本课程的研究对象程序:
main(){
intlen,wide,area;
scanf(“%d%d%\n”,&len,&wide);
area=len*wide;
printf(“area=%d”,area);
}
可见,对于数值问题,对象之间的关系通常可以用方程或函数表达,我们只要能列出表达对象之间关系的方程或函数,找到求解方程或函数的方法,就可以编写程序了。2)非数值问题例2已知研究生选课情况,安排课程考试的日程。
研究生选课情况表
姓名选修课1 选修课2选修课3
杨润生算法分析(A)形式语言(B)计算机网络(E)
石磊计算机图形学(C)模式识别(D)
魏庆涛计算机图形学(C)计算机网络(E)人工智能(F)
马耀先模式识别(D)人工智能(F)算法分析(A)
齐砚生形式语言(B)人工智能(F)§
1.2本课程的研究对象§
1.2本课程的研究对象DEFCBA顶点:表示课程;
边:同一研究生选修的课程用边连接----有边连接的课程不能安排在同一时间考试;课程关系图◆课程考试安排问题转化为图的着色问题
--用尽可能少的颜色该图的每个顶点着色,使相邻的顶点着上不同的颜色;
---每一种颜色代表一个考试时间,着上相同颜色的顶点是可以安排在同一时间考试的课程;
如下是一种着色方案:
红色:a,c;黄色:b,d;绿色:e;蓝色:f
即a,c可安排在同一时间考试,b,d可安排在同一时间考试;DEFCBAACEFBD课程着色的过程1)数值问题例1已知游泳池的长length,和宽wide,求面积area。(1)问题涉及的对象:length,wide,area是实数——可用数值表示;(2)对象之间的关系:area=lengthwide——可用方程或函数表示;(3)数据存储:可用程序设计语言中的实型变量存储;(4)问题求解:用某种计算方法求解;5数值问题与非数值问题的比较2)非数值问题例2已知研究生选课情况,安排课程考试的日程。1)问题涉及的对象:课程——可用课程名表示——不能用数值表示
2)对象之间的关系:同一研究生选修的课程不能安排在同一时间考试,同一研究生选修的课程之间有某种“冲突”关系——课程之间的这种关系不能用方程或函数表示
3)数据及数据之间的关系如何存储?
4)如何求解?
数据结构的研究对象:非数值数据之间的结构关系,如何表示,如何存储,如何处理的问题。本课程讨论的问题:应用中常用的几种数据间的结构关系,以及如何存储,如何处理它们。§1.3数据结构的有关概念[数据Data]:客观对象的符号表示。在计算机科学中,数据的含义非常广泛,我们把一切能够输入到计算机中并被计算机程序处理的信息,包括文字、表格,图象等,都称为数据。
例如:课程名,地名,书名都是数据。
再如,一个个人书库管理程序所要处理的数据可能是一张如表1-1所示的表格。数据数据元素数据项表1-1个人书库
[数据元素DataElement]:数据的基本单位。在计算机程序中通常作为一个整体考虑和处理。如,在表1-1所示的个人书库中,为了便于处理,把其中的每一行(代表一本书)作为一个基本单位来考虑,故该数据由10个数据元素构成。一般情况下,一个数据元素中含有若干个数据项.§
1.3数据结构的有关概念§1.3数据结构的有关概念
[数据项DataItem]:构成数据元素的成分,是数据不可分割的最小单位.例如,在表1-1所示的表格数据中,每个数据元素都有登录号、书号、书名、作者、出版社和价格等六个数据项构成。每个数据元素可以由一个数据项,也可以由若干数据项组成.例:数据数据元素数据项实数集单个实数单个实数(不可再分)复数集单个复数实部,虚部职工信息单个职工信息多个数据项(姓名,年龄…)§1.3数据结构的有关概念
数据对象结构数据结构[数据对象DataObject]具有相同特性的数据元素的一个集合,是数据的子集.例:整数数据对象是集合{0,1,-1,2,-2,…}扑克牌上的点数的数据对象是{2,3,4,5…J,Q,K,A}字母的数据对象是集合(A,B,C……X,Y,Z}§1.3数据结构的有关概念
数据对象可以是有限的,也可以是无限的,其中的数据不是孤立的,而是彼此相关联的,这种数据元素相互之间的关系称为结构.[结构Structure]数据元素之间的关系(Relation)[数据结构DataStructure]相互之间存在一种或多种特定关系的数据元素的集合,即带结构的数据元素的集合.§1.3数据结构的有关概念
数据结构=数据+结构记作Data_Structure=(D,S)其中,Data_Structure是数据结构的名称D是数据元素的有限集合(一般为一个数据对象)S是D上关系的有限集.注:这里说的数据元素之间的关系是指元素之间本身固有的逻辑关系,与计算机无关.又称为:数据的逻辑结构,抽象数据结构§1.3数据结构的有关概念
数据元素之间的逻辑关系分为:(1)元素之间没有关系----集合(2)元素之间具有线性关系---线性数据结构(线性表结构)(3)元素之间具有层次关系---层次数据结构(树结构)(4)元素之间具有网状关系---网状数据结构(图结构)§1.3数据结构的有关概念
[数据的存储结构]数据结构在计算机中的表示(映象),即数据结构在计算机中的组织形式.又称为数据的物理结构.数据在计算机中的存储:只有两种形式顺序:数据元素逐个连续存放(通过物理相邻来确定关系)非顺序:数据元素任意存放(通过存储地址确定关系)§1.3数据结构的有关概念
一个数据结构要存放,一方面要把数据元素存放起来,另一方面,还必须把数据元素之间的逻辑关系也表示出来,那么:要么用数据元素在物理上相邻来表示逻辑关系要么用数据元素的存储地址(指针)来表示逻辑关系§1.3数据结构的有关概念
[数据类型DataType]一个值的集合和定义在这个值集上的一组操作的总称.注意:数据类型是一个非常重要的概念,要正确理解它!!(1)高级语言中的数据类型实际上包括:数据的逻辑结构,数据的存储结构及所定义的操作的实现.(2)高级语言中的数据类型按值的不同特性分为:原子类型(如整型,实型,字符型,布尔型)结构类型(如数组)§1.3数据结构的有关概念
(3)数据类型并不局限于高级语言,它实际上是一个广义的概念.例如:”教师”就是一个数据类型,他有值”教龄”,有操作”教书”等;如果具体说小学教师,大学教师,可以看作时一个具体的类型.(4)我们可以撇开计算机不考虑,现实中任何一个问题都可以定义为一个数据类型---称为抽象数据类型抽象数据类型[AbstractDataTypeADT]一个数学模型及定义在这个模型上的一组操作(或运算)的总称.抽象思维方法:舍去复杂系统中非本质的细节,只把其中某些本质的,能反映系统重要宏观特性的东西提炼出来,构成系统的模型,并且深入研究这些特性.例如:”平房”:本质特性包括墙体,门,窗,房顶等.再如:有一堆鸡蛋,进行了编号,我们可以对它们进行如下操作:找出最重的;取走某一个;全部搬走;这是一个抽象的定义,并没有考虑鸡蛋在哪里放着!!§1.4抽象数据类型一.抽象数据类型定义抽象数据类型=数学模型+操作=数据结构+操作一个抽象数据类型的描述如下:ADT
抽象数据类型的名称{数据对象数据关系基本操作}ADT抽象数据类型名§1.4抽象数据类型二.抽象数据类型举例例1:掷骰子(色子)游戏.问题描述:每次掷出N个骰子,统计每次的总点数和每个骰子的点数,看看谁的高.问题分析:该问题的数据包括骰子个数,每个骰子的点数和总点数;骰子个数是大于0的整数N;每个骰子的点数是1---6;总点数是N---6N;该问题的操作包括掷骰子,求总点数,输出各个骰子的点数.§1.4抽象数据类型§1.4抽象数据类型例2:计算圆的周长和面积问题描述:给定圆的半径,求出周长和面积例3:复数的运算问题描述:在高级语言中,没有复数类型,但是可借助已有的数据类型解决复数类型的问题.§1.4抽象数据类型二.数据类型的实现一个问题抽象为一个抽象数据类型后,仅是形式上的抽象定义,还没有达到问题解决的目的,要实现这个目标,就要把抽象的变成具体的,即抽象数据类型在计算机上的实现,变为一个具体的数据类型.§1.4抽象数据类型一个数据类型的实现一般分为三个阶段1.ADT阶段,又称为定义阶段2.虚拟数据类型阶段,又称为表示阶段3.物理数据类型阶段,又称为物理实现阶段例如:整数C语言的整数机器整数
§
1.5数据结构的分类及表示一常用的数据结构
现实世界中,客观事物对象之间的关系虽然形形色色,但从抽象的观点看,主要有如下几类结构:
1)集合
2)线性结构
3)树形结构
4)图状结构或网状结构例1:某班学生基本情况登记表,记录了每个学生的学号姓名专业政治面貌,表中的记录是按学生的学号顺序排列的.
学号姓名 专业 政治面藐
001 王洪 计算机党员
002孙文计算机团员
003 谢军 计算机团员 004 李辉 计算机团员 005沈祥福计算机党员 006余斌计算机团员
007 巩力 计算机团员 008 孔令辉计算机团员学生基本情况登记表的图示
001003002004006005008007学号关系是一种线性结构关系§
1.5数据结构的分类及表示例2家族的族谱
家族的族谱反映的是家族成员之间的血缘关系,假设某家族有10个成员A,B,C,D,E,F,G,H,I,J,他们之间的血缘关系可以用如下图表示。这种分支结构关系被称为树结构。本例中树称为家族树,它很象一棵倒置的树,A是树的根。
JIACBDHGFE家族树的图示表示§
1.5数据结构的分类及表示数据结构的表示1图示表示2二元组表示图示表示
图示表示是由顶点和边构成的图,其中顶点表示数据,边表示数据之间的结构关系;
001003002004006005008007学生基本情况表的图示表示§
1.5数据结构的分类及表示JIACBDHGFE家族树的图示表示§1.5数据结构的分类及表示学生基本情况表的二元组表示(D,S)
二元组表示
二元组表示是用一个二元组(D,S)表示数据结构,其中D是数据元素集合,S是D上关系的集合。D={001,002,003,004,005,006,007,008}S={R}R={<001,002>,<002,003>,<003,004>,<004,005>,<005,006>,<006,007>,<007,008>}§1.5数据结构的分类及表示§1.5数据结构的分类及表示
家族树的二元组表示(D,S)
D={A,B,C,D,E,F,G,H,I,J}
S={R}
R={〈A,B>,<B,C>,<C,D>,<D,E>,<E,F>,<F,G>,<G,H>,<H,I>,<I,J>}一算法的概念
算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每一条指令表示一种或多种操作.
例求10个正整数中的最大数max的算法。
描述算法的方法有很多:流程图,自然语言,计算机语言,用计算机语言表达的算法就是程序。
§1.6
算法与算法分析开始为10个元素a[0]到a[9]输入数值max=a[0]i=1i<=10输出maxa[i]>maxmax=a[i]i=i+1结果NYYN求n个元素中的最大值若采用自然语言描述,则如下列步骤所示:(1)给10个元素a[0]-a[9]输入数值;(2)把第一个元素a[0]赋给用于保存最大值元素的变量max;(3)把表示下标的变量i赋初值1;(4)如果i<=10,则向下执行,否则输出最大值max后结束算法;(5)如果a[i]>max,则将a[i]赋给max,否则不改变max的值,这使得max始终保存着当前比较过的所有元素的最大值;(6)使下标i增1,以指示下一个元素;(7)转向第(4)步继续执行.1.6
算法与算法分析main(){inti,max,a[10];printf(“请输入10个整数:”);for(i=0;i<=10;i++)scanf(“%d”,&a[i]);max=a[0];i=1;while(i<10){if(a[i]>max)max=a[i];i++;}printf(“10个整数中的最大值为:”,max);}C语言描述如下:
二算法的基本特征:
1)输入:0个或多个输入;
2)输出:1个或多个输出;
3)有穷性:算法必须在有限步内结束;
4)确定性:组成算法的操作必须清晰无二义性。
5)有效性:组成算法的操作必须能够在计算机上实现。§1.6
算法与算法分析§1.6
算法与算法分析评价算法的好坏的标准有很多:如算法的正确性:“正确”的含义在通常的用法中有很大的差别,大体可分为以下四个层次:①程序不含语法错误;②程序对于几组输入数据能够得出满足规格说明要求的结果;③程序对于精心选择的典型、苛刻而带有刁难性的几组数据能够得出满足规格说明要求的结果;④程序对一切合法的输入数据都能产生满足规格说明要求的结果。
可读性,健壮性,效率与低存储量需求等,本课程只对算法的时间和空间效率做了简单的讨论。
算法时间复杂度T(n)
§1.6
算法与算法分析算法分析的一般步骤:[语句频度]算法中一个基本操作执行的次数1.计算出算法的各个语句的频度2.统计出算法的语句频度和T(n)3.给出T(n)的大O表示称为算法的时间复杂度T(n)=O(f(n)),f(n)是问题规模n的一个函数,算法执行时间的增长率和f(n)的增长率相同.如:T(n)=2n2+n+1T(n)=n2+1随着n的增大,在左边两式中,增长率最快的是n2所以T(n)的大O表示为O(n2)§1.6
算法与算法分析
例:for(i=1;i<=n;i++)(n+1)
for(j=1;j<=n;j++)n(n+1)x++;n2总执行次数f(n)=2n2+2n+1是问题规模n的函数,时间复杂度O(n2)3.最好时间复杂性,最坏时间复杂性,平均时间复杂性对有些算法,问题规模相同,如果输入集不同,其效率不同Tmin:最好情况不能代表算法的性能Tmax:最坏情况可以知道算法至少能达到的性能Tavg:较好地反映了算法的性能,但并不一定总是可行的!§1.6
算法与算法分析
4.O表示的含义---渐进算法分析具体分析一个算法的计算量,有时是很麻烦的,其实也没有必要因为,我们最关心的是哪个更好??于是:
我们估算:问题规模变大时,算法的效率如何变化,即增长率.这在确定算法是否值得实现时是很有效.§1.6
算法与算法分析
算法与问题规模及时间的关系:同一问题,规模相同,用不同的算法解决,花费时间是不同的;同一问题,用不同的算法解决,在相同的时间内所解决的问题规模大小不同;7.算法时间复杂性的实质:注意:(1)”复杂性渐进阶”比较低的算法比复杂性的渐进阶比较高的算法有效”,只是在问题规模充分大时才成立.(2)当两个算法的复杂性渐进阶相同时,必须进一步考察T(N)的常数因子.§1.6
算法与算法分析例如,有下列3个程序段:{++x;s=0};for(i=1;i<=n;++i){++x;s+=x}for(j=1;j<=n;++j)for(k=1;k<=n;++k){++x;s+=x;}基本操作”x增1”的语句执行次数分别是1,n和n2则这3个程序段的时间复杂度分别是O(1),O(n)和O(n2),分别成为常量阶,线性阶和平方阶.§1.6
算法与算法分析
例1:分析下面程序段的时间复杂性P1:x=x+1;O(1)P2:for(i=1;i<=n;i++)n+1x=x+1;n
O(n)§1.6
算法与算法分析
§1.6
算法与算法分析
例2:有5个算法,A1,A2,A3,A4,A5算法T(n)时间复杂度结论:A11000nO(n)2<=n<=9A5最好A2100nlog2nO(nlog2n)10<=n<=58A3最好A310n2O(n2)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 规章制度检查
- 营业员的实习报告
- 市场营销毕业实习报告15篇
- 从事家政服务公司劳动合同书(3篇)
- 读书分享会发言稿
- DB11T 1499-2017 节水型苗圃建设规范
- 新疆阿勒泰地区(2024年-2025年小学五年级语文)人教版阶段练习(下学期)试卷及答案
- 反比例函数教案文档
- 煤矿人工智能算法评估规范征求意见稿
- 上海市市辖区(2024年-2025年小学五年级语文)统编版开学考试(上学期)试卷及答案
- 水利部水利建设经济定额站
- 大班数学《贪心的三角形》课件
- 《过秦论》课文重点知识挖空练习+答案(校对版)
- 《丝网印刷技术》ppt课件
- 变频器说明书invt
- 国家开放大学《老年常见病照护》形考任务1-4参考答案
- 幼儿园课程游戏化优秀案例小小石头乐趣多
- 最新八年级道法上册概括与评论题角度汇编
- 柴油供货运输服务方案(完整版)
- 某热力管道工程施工组织设计方案
- 投资与GDP增长关系的分析及政策建议
评论
0/150
提交评论