1、数据结构与算法,课程简介,课程内容数据结构是在整个计算机科学与技术领域上广泛被使用的术语。它用来反映一个数据的内部构成,即一个数据由那些成分数据构成,以什么方式构成,呈什么结构。 数据结构课程的主要目的是介绍一些常用的数据结构,阐明数据结构内在的逻辑关系,讨论它们在计算机中的存储表示,并结合各种数据结构,讨论对它们实行的各种运算的实现算法。,课程简介,课时安排 理论:48学时 实践:24学时 学习方法 书面练习 + 上机实验 考核方式:考试 平时成绩 + 实验成绩 + 期考成绩,课程简介,参考书目 1 严蔚敏、吴伟民,数据结构(第二版),清华大学出版社,1992。 2 William Ford
2、 & William Topp, 数据结构-C+语言描述,清华大学出版社,(中译本),1998。 3 Sartaj Sahni 数据结构算法与应用,机械工业出版社,(中译本),1999。 4 王晓东 算法设计与分析,清华大学出版社,2003 5齐德昱,数据结构与算法,清华大学出版社,2003 (21世纪大学本科计算机专业系列教材) 6 胡学钢, 数据结构算法设计指导, 清华大学出版社,1999 7 熊岳山等, 数据结构-典型题解与实战模拟, 国防科技大学出版社, 2004(第二版),第一章 绪论,数据结构与算法的意义数据结构概述算法算法分析,1.1 数据结构与算法的意义,Nikiklaus W
3、irth(1976)Data Structure + Algorithm = Program.程序设计:为计算机处理问题编制一组指令集 算 法:处理问题的策略 数据结构:问题的数学模型,例1 书目自动检索系统,书目文件,例2 人机对奕问题,例3 最短路径问题,从油田铺设管道,把原油运到加工厂,求 使管道总长最短的铺设方案。,例4 古老的七桥问题,小结,数据结构描述现实世界实体的数学模型(非数值计算) 及其上的操作在计算机中的表示和实现。 有了数据结构知识,可以帮助我们分析数据的特征和 数据之间的关系,尤其是对非数值计算问题,从而更好地 组织数据,更加有效地使用计算机,充分发挥计算机的功 能。,
4、算法的意义,选择问题。设有一组N个数,确定其中的第k个最大者。学习算法设计的方法和算法分析的技术后,可以帮助我们设计较好的算法,分析算法的优、缺点,从而找出解决某一问题的最好方法。,1.2 数据结构概述,数据(data) :所有能输入到计算机中去的描述客观事物并被计算机程序处理的符号的总称,分为两类:数值型数据和非数值型数据。 数据元素(data element):数据的基本单位,也称节点或记录,如“树”中的一个棋盘格局,“图”中的一个圆圈一个数据元素可由不可分割的若干个数据项级成。 数据项(data item):有独立含义的数据最小单位,也称域(field),是不可分割的,如书目信息中的书名
5、、作者等。 数据对象(data object):性质相同的数据元素的集合,是数据的一个子集。 数据结构(data structure):是指相互之间存在着一种或多种关系的数据元素的集合。,四种基本的数据结构,集合:数据元素间除“同属于一个集合”外,无其它关系。 线性结构:一个对一个,如线性表、栈、队列。 树形结构:一个对多个,如树。 图状结构:多个对多个,如图。,Group=(P,R) 其中:P=T,G1,Gn,S11Snm 1n 3,1m2R=R1,R2R1=| 1 i n,1 n 3R2=| 1in,1jm,1 n3,1m2,数据结构的形式定义为:数据结构是一个二元组Data_Struct
6、ure=(D,S)其中:D是数据元素的有限集,S是D上关系的有限集。,例 假设我们需要编制一个事务管理的程序,管理学校科学研究课题小组的各项事务,则首先要为程序的操作对象课题小组设计一个数据结构。假设每个小组由一位教师、一至三名研究生及一至六名本科生组成,小组成员之间的关系是:教师指导研究生,而由每位研究生指导一至两名本科生。则可以如下定义数据结构:,数据结构的形式定义,数据的逻辑结构只抽象反映数据元素的逻辑关系 数据的存储(物理)结构数据的逻辑结构在计算机存储器中的实现,数据结构的两层次,顺序存储,1536,元素2,1400,元素1,1346,元素3,元素4,h,链式存储,1.3 抽象数据类
7、型,抽象数据类型(Abstract Data Type,ADT)是指一个数 学模型以及定义在此数学模型上的一组操作。抽象数据类型由元素、关系及操作3种要素来定义。抽 象数据类型用三元组来表示:(D、R、P),数据对象,关系集,基本操作集,1.4 算法,算法(algorithm):解决某一特定问题的具体步骤的描述,是指令的有限序列。 算法的特性,算法的评价,正确性(correctness):1、不含语法错误2、对于几组输入数据能够得出满足规格说明要求的结果3、对于精心选择的典型、苛刻而带有刁难性的数据能够得出满足规格说明要求的结果4、对于一切合法的输入数据都能产生满足规格说明要求的结果 可读性(
8、readability):人的阅读与交流 健壮性(robustness):当输入非法数据时,算法能够适当的做出反应或进行处理,不会产生莫名其妙的结果 效率与低存储量:算法的执行时间和所需的最大存储空间,算法与数据结构间的关系,例:求3个数中的最大者,算法1: int Max1(int a3) if(a0 a1)if(a0 a2) return a0;else return a2;elseif(a1 a2) return a1;else return a2; ,算法2: int Max2(int a3) c = a0;for(int I = 1 ; I c)c = ai;return ai; ,
9、不需要额外的空间,需要额外的空间,算法的度量时间复杂度,运行算法时所需要消耗的时间资源。,一般:算法中基本操作重复执行的次数是问题规模n的某个函数f(n) 时间复杂度:随问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的(渐近)时间复杂 度,记作 T(n)=o(f(n),例1:nXn矩阵相乘 for(i=1;i=n;i+)for(j=1;j=n;j+)cij=0; for(k=1;k=n;k+)cij=cij+aik*bkj;,例2: for(i=0;in;i+)for(j=0;jm;j+)Aij=0;,常见的时间复杂度,按数量级递增排列,有 O(1),O(log2n),
10、O(n),O(nlog2n),O(n2),O(2n),从算法中选取一种对于所研究的问题来说是基本操作的原操作,以该操作在算法中重复执得的次数作为算法运行时间的衡量准则。,算法的度量空间复杂度,算法在计算机内挂靠时所需存储空间的度量。,程序除了需要存储空间来寄存本身所用指令、常数、变量和输入数据外,也需要一些对数据进行操作的工作单元和存储一些为实现计算所需信息的辅助空间空间复杂度:算法所需存储空间的量度S(n)=o(f(n),例:交换两数 void swap(int ,例:交换两数 void swap(int ,需要额外的空间,不需要额外的空间,运行时间计算法则 法则1:赋值语句的运行时间为1。 法则2:一次for循环的运行时间至多是该for循环内语句的运行时间乘以迭代的次数。 法则3:嵌套for循环。每一层循环的运行时间等于该 层的for循环语句的运行时间乘以该层循环内 所有的for循环的运行时间。 法则4:顺序语句的运行时间等于各个语句的运行时间之和。 法则5:IF/ELSE语句的运行时间。 法则6:递归函数的复杂度分析。,本章学习要点,1、熟悉各名词、术语的含义,掌握基本概念。2、理解算法五个要素的确切含义。3、掌握计算语句频度和估算算法时间复杂度的方法。,