软件技术基础课件-第3章 算法与数据结构(一)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

软件技术基础电子教案第3章算法与数据结构2/51第3章内容摘要3.1数据结构概述3.2算法的描述和分析3.3线性表3.4树和二叉树3.5图3.6查找与排序《软件技术基础》电子教案3/513.1数据结构概述•计算机=软件+硬件•软件=程序+文档(软件工程的观点)•程序=算法+数据结构(NiklausWirth,图灵奖获得者)程序设计:为计算机处理问题编制一组指令集算法:处理问题的策略数据结构:问题的数学模型《软件技术基础》电子教案4/51•‘数据结构’=‘计算机程序设计技巧'(Kunth,图灵奖获得者)•熟悉C语言≠写出‘好’的程序•学习数据结构=编写高水平的程序•《数据结构》:计算机类专业8大核心课程之一注:教育部计算机教指委认定的8大核心课程:计算机语言、数据结构、离散数学、计算机网络、计算机组成原理、操作系统、数据库、软件工程图灵奖:1966年设置,每年奖励1-2名杰出的计算机科学家,被誉为计算机领域的诺贝尔奖《软件技术基础》电子教案5/513.1.1什么是数据结构•早期的计算机主要用于数值计算•现在的计算机更多地是用于非数值数据处理(字符、表格、图像)•对非数值数据的处理:分析数据的逻辑特征→抽象出合适的数学模型→合理地存储到计算机→设计出算法→编写出程序《软件技术基础》电子教案6/51首先要构造学生信息表,表3-1表达出学生数据的逻辑关系,它就是一个数学模型,这张表如何构造、在计算机内如何存储将直接影响查找算法的设计以及算法的效率学生基本情况学号姓名性别出生年月......99070101李军男80.12......99070102王颜霞女81.2.......99070103孙涛男80.9......99070104单晓宏男81.3....................................表3-1例1学生信息查询系统《软件技术基础》电子教案7/51学生信息表的特点•每个学生的信息占据一行,所有学生的信息按学号顺序依次排列构成一张表格•表中每个学生的信息依据学号的大小存在着一种前后关系,这就是我们所说的线性结构,现实中这类关系的数据有很多。•通常的操作插入某个学生的信息删除某个学生的信息更新某个学生的信息按条件查找某个学生的信息《软件技术基础》电子教案8/51中国象棋、国际象棋的人机大战,核心技术是人编写的对弈程序。对弈步骤和过程可以用树型结构表达出来(数学模型)例2人机对弈图3-1井子棋对弈树树形应用《软件技术基础》电子教案9/51树型结构的特点•所处理的数据之间具有层次关系,这是我们所说的树形结构,还有如:基因遗传关系等,它是一种非线性结构。•对它的操作有:建立树形结构、存储树、访问树中的每个结点《软件技术基础》电子教案10/51例3哥尼斯堡七桥问题问题:怎样才能够从某块陆地出发,经过每座桥一次且仅一次最后回到出发点。BADC《软件技术基础》电子教案11/51图结构的特点•计算机处理的对象是图•元素间的关系是复杂的图形或网状关系•施加于对象上的操作有查询、插入、删除等•现实中,这类关系的数据非常多。如:网络规划、交通、通讯规划等,这里典型的非线性关系。《软件技术基础》电子教案12/51数据结构研究的内容由以上三个例子可见,描述这类非数值计算问题的数学模型不再是数学方程,而是诸如表、树、图之类的数据结构。因此,简单说来,数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作的学科。此外,为了构造出好的数据结构及其实现,还需考虑数据结构及其实现的评价与选择。因此,数据结构的内容包括三个层次的五个“要素”,如下图所示:《软件技术基础》电子教案13/51数据结构课程内容体系方面层次数据表示数据处理抽象逻辑结构基本运算实现存储结构算法评价不同结构的比较及算法分析《软件技术基础》电子教案14/513.1.2基本概念和术语•数据是对客观事物的符号表示。在计算机科学中其含义是指所有能够输入到计算机中并被计算机程序处理的符号集合•数据元素是数据集合中的一个实体,是计算机程序中加工处理的基本单位(记录、结构体)•数据项组成数据元素的有特定意义的最小的不可分割的单位。《软件技术基础》电子教案15/513.1.2基本概念和术语•数据结构中讨论的最小单位是数据项;数据元素是数据项的集合•例如:运动员(数据元素)其中出生日期中年月日是组合项单位。姓名俱乐部名称出生日期参加日期职务《软件技术基础》电子教案16/51•数据结构是相互之间存在一种或多种特定关系的数据元素的集合。•数据结构的形式定义数据结构是一个二元组:Data_Structures=(D,R)其中:D是数据元素的有限集,R是D上关系的有限集。•数据结构分为四大类:表:元素是线性关系(连接)图:元素间是非线性关系(连接)树:元素间是非线性关系,连接不得有回路文件:记录的序列数据结构的定义《软件技术基础》电子教案17/51•数据结构的三要素数据的逻辑结构数据的存储结构对数据的操作(运算算法)数据结构的定义《软件技术基础》电子教案18/51数据结构的定义•逻辑结构数据结构中所说的“关系”实际上是指数据元素之间的逻辑关系,又称此为逻辑结构,可以分为:线性结构和非线性结构•存储结构(物理结构)是指数据结构在存储器中的具体实现,包括顺序存储结构,链式存储结构,索引存储结构,散列存储结构。与孤立的数据元素表示形式不同,数据结构中的数据元素不但要表示其本身的实际内容,还要表示清楚数据元素之间的逻辑结构。•数据运算对数据施加的操作。运算的定义依赖于逻辑结构,但运算的实现必依赖于存储结构(真正理解)《软件技术基础》电子教案19/51第3章内容摘要3.1数据结构概述3.2算法的描述和分析3.3线性表3.4树和二叉树3.5图3.6查找与排序3.7文件《软件技术基础》电子教案20/513.2算法的描述和分析数据的运算是通过算法(Algorithm)。对实际问题选择一种好的数据结构,设计一个好的算法,是程序设计的本质。算法概念与特征算法描述算法设计的原则算法效率的衡量方法和准则算法的存储空间需求《软件技术基础》电子教案21/513.2.1算法概念与特征•算法(Algorithm):算法是为了解决某类问题而规定的一个有限长的操作序列。一个算法必须满足以下五个重要特征:有穷性:执行有限步,每步有限的时间。确定性:每条指令有确切含义,相同输入只能得到相同输出。可行性:操作通过已实现的基本运算执行有限次来实现。输入:0到多个输入。输出:1到多个输出。《软件技术基础》电子教案22/51算法与数据结构算法与数据结构关系密切选择的数据结构是否恰当直接影响算法的效率;而数据结构的优劣由算法的执行来体现。N.WirthAlgorithms+DataStructures=Programs《软件技术基础》电子教案23/513.2.2算法描述•算法可用多种方式描述:自然语言:易懂,灵活;不准确高级语言:准确,严格;死板伪码语言(类语言):类C语言框图•算法程序《软件技术基础》电子教案24/51算法程序•算法是供人阅读的•程序是让机器执行的•算法用计算机语言实现时就是程序•程序不具有算法的有穷性《软件技术基础》电子教案25/51类C语言(1)•类C语言由伪码和C语言组合,采用了C语言的核心部分,进行了扩充。•数据结构的存储结构用类型定义(typedef)描述。数据元素的类型定义为ElemType,由用户在使用该数据类型时自行定义•利用define定义布尔常量有:#defineTRUE1#defineFALSE0•基本操作的算法用以下形式的函数描述:函数类型函数名(函数参数表){//算法说明语句序列}//函数名参数表中的参数需要说明类型,算法中使用的辅助变量可以不用声明变量类型。《软件技术基础》电子教案26/51类C语言(2)赋值语句:简单赋值:变量名=表达式;串联赋值:变量名1=变量名2=…=变量名k=表达式;成组赋值:(变量名1,…,变量名k)=(表达式1,……,表达式k);结构名=结构名;结构名=(值1,…,值k);变量名[]=表达式;变量名[起始下标..终止下标]=变量名[起始下标..终止下标];交换赋值:变量名变量名;条件赋值:变量名=条件表达式?表达式T:表达式《软件技术基础》电子教案27/51类C语言(3)条件语句if(表达式)语句;if(表达式)语句;else语句;分情形语句switch(表达式){case值1:语句序列1;break;……case值n:语句序列n;break;default:语句序列n+1;break;}《软件技术基础》电子教案28/51类C语言(4)for语句for(循环变量初值;条件;增量)语句;While语句dowhile语句while(表达式){语句组}do{语句组}while(表达式)《软件技术基础》电子教案29/51类C语言(5)结束语句函数结束语句return(表达式);或return;case结束语句break;异常结束语句exit();输入和输出语句输入语句scanf(变量1,变量2,…,变量n)输入语句printf(变量1,变量2,…,变量n)《软件技术基础》电子教案30/51类C语言(6)注释多行注释/*注释内容*/单行注释//文字序列基本函数max(表达式1,...,表达式n),min,abs,floor,ceil,eof,eoln逻辑运算约定&&与运算符;||或运算符;!非运算符《软件技术基础》电子教案31/513.2.3算法设计的要求•设计算法时,通常应考虑达到以下目标:1.正确性2.可读性3.健壮性4.高效率与低存储量需求《软件技术基础》电子教案32/511.正确性首先,算法应当满足以特定的“规格说明”方式给出的需求。其次,对算法是否“正确”的理解可以有以下四个层次:a.程序中不含语法错误;b.程序对于几组输入数据能够得出满足要求的结果;c.程序对于精心选择的、典型、苛刻且带有刁难性的几组输入数据能够得出满足要求的结果;d.程序对于一切合法的输入数据都能得出满足要求的结果;通常以第c层意义的正确性作为衡量一个算法是否合格的标准《软件技术基础》电子教案33/512.可读性算法主要是为了人的阅读与交流,其次才是为计算机执行。因此算法应该易于人的理解;另一方面,晦涩难读的程序易于隐藏较多错误而难以调试;3.健壮性当输入的数据非法时,算法应当恰当地作出反映或进行相应处理,而不是产生莫名奇妙的输出结果。并且,处理出错的方法不应是中断程序的执行,而应是返回一个表示错误或错误性质的值,以便在更高的抽象层次上进行处理。4.高效率与低存储量需求通常,效率指的是算法执行时间;存储量指的是算法执行过程中所需的最大存储空间。两者都与问题的规模有关。《软件技术基础》电子教案34/51算法效率•衡量算法效率的方法主要有两大类:事后统计:利用计算机的时钟;(不可取)缺点:1.必须执行程序2.其它因素掩盖算法本质事前分析估算:和算法执行时间相关的因素:1.算法选用的策略2.问题的规模3.编写程序的语言4.编译程序产生的机器代码的质量5.计算机执行指令的速度《软件技术基础》电子教案35/51时间复杂度•算法的运行工作量的大小就只依赖于问题的规模(通常用正整数n表示),或者说它是问题规模n的函数。•假如,随着问题规模n的增长,算法执行时间的增长率和f(n)的增长率相同,则可记作:T(n)=O(f(n)),称为该算法的(渐近)时间复杂度《软件技术基础》电子教案36/51时间复杂度•如何估算算法的时间复杂度?算法=控制结构+原操作(固有数据类型的操作)算法的执行时间=∑原操作(i)的执行次数×原操作(i)的执行时间算法的执行时间与原操作执行次数之和成正比度量算法运行时间:从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该基本操作在算法中重复执行的次数作为算法运行时间的衡量准则《软件技术基础》电子教案37/51++x;s=0;语

1 / 51
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功