《数据结构引言》PPT课件.ppt

上传人:牧羊曲112 文档编号:5519670 上传时间:2023-07-16 格式:PPT 页数:61 大小:324.99KB
返回 下载 相关 举报
《数据结构引言》PPT课件.ppt_第1页
第1页 / 共61页
《数据结构引言》PPT课件.ppt_第2页
第2页 / 共61页
《数据结构引言》PPT课件.ppt_第3页
第3页 / 共61页
《数据结构引言》PPT课件.ppt_第4页
第4页 / 共61页
《数据结构引言》PPT课件.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《《数据结构引言》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《数据结构引言》PPT课件.ppt(61页珍藏版)》请在三一办公上搜索。

1、1,数据结构,计算机系陈玉泉,2,2,联系方式,陈玉泉:(课程网站)数据结构B34204406电院楼群3-525,3,教材,教科书1)数据结构:思想与实现,翁惠玉、俞勇,高等教育出版社,2009.82)数据结构:题解与拓展,翁惠玉、俞勇,高等教育出版社,2011.8参考书:数据结构(C语言版),严蔚敏、吴伟民,清华大学出版社,1997.4数据结构与算法(C+),窦延平等,上海交通大学出版社,2005.5算法导论,Thomas H.Charles著,潘金贵译,机械工业出版社,2006.9算法之道,邹恒明,机械工业出版社,2012.4,4,4,课程说明,讲授内容:32学时安排.doc作业:Emai

2、l提交作业,5,第一章 引言,什么是数据结构算法分析面向对象的数据结构,6,什么是数据结构,没有标准的定义,但有共识数据结构:通过抽象的方法研究一组有特定关系的数据的存储与处理数据结构的研究内容:数据之间的逻辑关系,以及这种关系对应的操作如何存储某种逻辑关系(存储实现)在这种存储模式下,关系的操作是如何实现的(运算实现),7,数据的逻辑结构,集合结构:元素间的次序是任意的。元素之间除了“属于同一集合”的联系外没有其他的关系。线性结构:数据元素的有序序列。除了第一个和最后一个元素外,其余元素都有一个前趋和一个后继树形结构:除了根元素外,每个节点有且仅有一个前趋,后继数目不限图型结构:每个元素的前

3、趋和后继数目都不限,8,9,数据结构的操作,创建:创建一个数据结构清除:删除数据结构插入:在数据结构指定的位置上插入一个新元素删除:将数据结构中的某个元素删去搜索:在数据结构中搜索满足特定条件的元素更新:修改数据结构中的某个元素的值访问:访问数据结构中的某个元素遍历:按照某种次序访问数据结构中的每一元素,使每个元素恰好被访问一次每一种数据结构的特定操作,10,数据结构的存储实现,包括两个部分:数据元素的存储数据元素之间的关系的存储 物理结构由三个部分组成:存储结点,每个存储结点存放一个数据元素;数据元素之间的关系的存储,也就是逻辑结构的机内表示;附加信息,便于运算实现而设置的一些“哑结点”,如

4、链表中的头结点。,11,基本的存储方式,数据元素的类型可以是各种各样的,通常不会是简单的内置类型,因此存储结点可以是一个结构体类型的变量或对象数据结构主要讨论关系的存储。因此,数据结构主要采用泛型程序设计的思想,12,关系的存储,顺序存储:用存储的位置表示元素之间的关系。主要用数组实现。链接存储:用指针显式地指出元素之间的关系,如单链表就是表示线性关系的哈希存储方式:是专用于集合结构的数据存放方式。在哈希存储中,各个结点均匀地分布在一块连续的存储区域中,用一个哈希函数将数据元素和存储位置关联起来。索引存储方式:所有的存储结点按照生成的次序连续存放。另外设置一个索引区域表示结点之间的关系。,13

5、,第一章 引言,什么是数据结构算法分析面向对象的数据结构,14,算法分析,数据结构是讨论一组数据的处理问题。每一种存储方式下对应的每一种操作的实现都是一个算法每种操作有多种实现方式如何评价这些算法的好坏,15,算法的质量评价,正确性:算法应能正确地实现预定的功能;易读性:算法应易于阅读和理解,以便于调试、修改和扩充;健壮性:当环境发生变化(如遇到非法输入)时,算法能适当地做出反应或进行处理,不会产生不正确的运算结果;高效率:具有较高的时间和空间性能。这四个指标往往是互相冲突的,数据结构主要考虑的是时空性能,16,算法效率分析,如何确定一个算法是高效的算法就是分析该算法所需要的资源。算法的资源包

6、括:时间:程序运行所需要的时间。要运行一年的算法是很难让人接受的空间:程序运行所需要的空间。需要几个G的内存的算法同样也令人难以接受。,17,算法分析,时间复杂度的概念 算法运算量的计算渐进表示法时间复杂度的计算算法的优化空间复杂度的概念,18,程序的运行时间,影响运行时间的因素问题规模和输入数据的分布编译器生成的目标代码的质量计算机系统的性能程序采用的算法的优劣关键是算法的优劣,19,有效算法的重要性,计算机不是万能的,并非所有的算法,计算机都能够计算出有用的结果。差的算法不一定有实际意义。如果一台计算机 1 秒能处理1000条指令,那么如果处理n个数据所需执行的指令数如表中的函数所示,20

7、,有效时间中能够处理的数据量,21,有效算法的重要性,关键:提高算法的效率而不是提高机器的速度!,22,时间复杂度,算法的时间复杂度是一种抽象的度量,即运算量与问题规模之间的关系。算法的时间复杂度也与被处理的数据分布有关算法的时间复杂度最好情况的时间复杂度最坏情况的时间复杂度平均情况的时间复杂度,23,算法分析,时间复杂度的概念 算法运算量的计算渐进表示法时间复杂度的计算算法的优化空间复杂度的概念,24,算法运算量的计算,根据问题的特点合理地选择一种或几种操作作为“标准操作”,将标准操作作为一个抽象的运算单位;确定每个算法在给定的输入下共执行了多少次标准操作;并将它作为算法的计算量。,25,实

8、例,如果有一组正整数,存放在数组array中,要求设计一个算法求数组中的最大值与d的乘积。,26,算法一int max1(int array,int size,int d)int max=0,i;for(i=0;i max)max=arrayi;return max;,算法二int max2(int array,int size,int d)int max=0,i;for(i=0;i max)max=arrayi;return max*d;,27,运算量的计算,用乘法、赋值和条件判断作为标准操作设输入的数组值为1,2,3,d=4Max1:3次乘法,14次赋值,11次比较,共28次标准操作 ma

9、x2执行了1次乘法,7次赋值,7次比较,共15次标准操作。,28,找出运算量的函数,如找出max1的最坏情况下的运行时间函数 第一个for循环:循环控制行中,表达式1执行一次,表达式2执行n+1次,表达式3执行了n次。每个循环周期执行一次乘法、一次赋值。总的运算量为1+(n+1)+n+n*2=4n+2。第二个循环:循环控制行中,表达式1执行了一次,表达式2执行了n+1次,表达式3执行了n次,每个循环周期执行一次比较,一次赋值。总运算量为1+(n+1)+n+n*2=4n+2。max1在最坏情况下的总运算量是8n+4。,29,算法分析,时间复杂度的概念 算法运算量的计算渐进表示法时间复杂度的计算算

10、法的优化时间复杂度的概念,30,渐进表示法,算法的运行时间函数可能是一个很复杂的函数,如何比较这些函数并从中选取出一个好的算法呢?时间性能主要考虑的是问题规模很大的时候运行时间随问题规模的变化规律 渐进表示法:不考虑具体的运行时间函数,只考虑运行时间函数的数量级,31,渐进表示法,定义:(大O)如果存在正的常数c和N0,满足当N=N0时有T(N)=N0时有T(N)cF(N),则T(N)是(F(N)。定义:(大)当且仅当T(N)是O(F(N),并且T(N)又是(F(N),则T(N)是(F(N)。定义:(小O)当且仅当T(N)是O(F(N),并且T(N)不是(F(N),则T(N)是o(F(N)。,

11、32,大O表示法实例,设 T(n)=(n+1)2 那么,取n0=1 及 c=4 时,T(n)=cn2 成立。所以,T(n)=O(n2)大O表示法就是取运行时间函数的主项,33,F(N)的选择,大O表示法的O是单词Order的首字母,表示“数量级”大O表示法并不需要给出运行时间的精确值,而只需要给出一个数量级,表示当问题规模很大时算法运行时间的增长是受限于哪一个数量级的函数在选择F(N)时,通常选择的是比较简单的函数形式,并忽略低次项和系数。,34,典型的增长率,35,算法按时间复杂度分类,多项式时间:渐进时间复杂度有多项式时间限界的算法指数时间算法:渐进时间复杂度有指数时间限界的算法多项式时间

12、复杂度的关系:O(1)O(logN)O(N)O(NlogN)O(N2)O(N3)指数时间复杂度的关系:O(2N)O(N!)O(NN),36,算法分析,时间复杂度的概念 算法运算量的计算渐进表示法时间复杂度的计算算法的优化空间复杂度的概念,37,大O表示法的计算,时间复杂度的计算先定义标准操作,再计算标准操作的次数,得到一个标准操作次数和问题规模的函数。然后取出函数的主项,就是它的时间复杂度的大O表示。简化方法:根据两个定理。,38,大O表示法的定理,求和定理:假定T1(n)、T2(n)是程序P1、P2的运行时间,并且T1(n)是O(f(n)的,而T2(n)是O(g(n)的。那么,先运行P1、再

13、运行P2 的总的运行时间是:T1(n)T2(n)O(MAX(f(n),g(n)。求积定理:如果T1(n)和 T2(n)分别是O(f(n)和O(g(n)的,那么T1(n)T2(n)是O(f(n)g(n)的。,39,大O表示法的计算规则,规则1:每个简单语句,如赋值语句、输入输出语句,它们的运行时间与问题规模无关,在每个计算机系统中运行时间都是一个常量,因此时间复杂度为 O(1)。规则2:条件语句,if then else,的运行时间为执行条件判断的代价,一般为O(1),再加上执行 then 后面的语句的代价(若条件为真),或执行else 后面的语句代价(若条件为假)之和,即max(O(then子

14、句),O(else子句)。,40,规则3:循环语句的执行时间是循环控制行和循环体执行时间的总和。循环控制一般是一个简单的条件判断,因此循环语句的执行时间是循环体的运行时间乘循环次数。规则4:嵌套循环语句,对外层循环的每个循环周期,内存循环都要执行它的所有循环周期,因此,可用求积定理计算整个循环的时间复杂度,即最内层循环体的运行时间乘所有循环的循环次数。例语句:for(i=0;in;i+)for(j=0;jn;j+)k+;的时间复杂性为O(n2),41,连续语句:利用求和定理把这些语句的时间复杂性相加。例程序段:for(i=0;in;i+)ai=0;for(i=0;in;i+)for(j=0;j

15、n;j+)ai=i+j;有两个连续的循环组成。第一个循环的时间复杂度为O(n),第二个循环的时间复杂度为O(n2)。根据求和定理,整段程序的的时间复杂性为O(n2),42,大O的简化计算,在程序中找出最复杂、运行时间最长的程序段,计算它的时间复杂度。也就是整个程序的时间复杂度在max1中,最复杂的程序段是两个循环,这两个循环的时间复杂度都是相同的,为O(n),因此整个程序的时间复杂度是O(n)的,43,算法分析,时间复杂度的概念 算法运算量的计算渐进表示法时间复杂度的计算算法的优化空间复杂度的概念,44,典型实例-最大连续子序列问题,给定(可能是负的)整数序列,寻找(并标识)的值为最大的序列。

16、如果所有的整数都是负的,那么最大连续子序列的和是零。例如,假设输入是-2,11,-4,13,-5,2,那么答案是20,它表示连续子序列包含了第2项到第4项(如粗体字部分)。又如第二个例子,对于输入1,-3,4,-2,-1,6,答案是7,这个子序列包含最后四项。,45,解法一 穷举法,分别求子序列0,0,0,1,。,0,n1,1,1,2,。1,n。n,n的和,求出最大值,46,int maxSubsequenceSum(int a,int size,int,47,时间复杂度分析,最里层的语句thisSum+=a k;在最里层循环中执行j-i+1次。第二个循环的规模是n-i,最外层的循坏规模是n。

17、因此最里层语句执行的次数是,48,方法二-O(n2)的算法,由于,因此,方法一中最里层的循环可以省略。,49,int maxSubsequenceSum(int a,int size,int,50,算法三 O(N),如果一个子序列的和是负的,则它不可能是最大连续子序列的一部分,因为我们可以通过不包含它来得到一个更大的连续子序列。如:-2,11,-4,13,-5,2的最大子序列不可能从-2开始1,-3,4,-2,-1,6的最大子序列不可能包含1,-3,51,算法三 O(N),所有与最大连续子序列毗邻的连续子序列一定有负的(或0)和(否则会包含它们)。在算法二中,当检测出一个负的子序列时,不但可以

18、从内层循环中跳出来,而且还可以让i直接增加到j+1。如:1,-3,4,-2,-1,6,当检测序列1,-3后,发现是负值,则表示该子序列不可能包含在最大子序列中。因此,接下去就可以从4开始检测。注意还有一种情况,当检测序列1,-3后,可以确定他不在最大子序列中,但1仍可能是最大子序列,如果-3后面都是负值。因此在找到新的最大子序列前,必须保存1是最大子序列的事实。,52,int maxSubsequenceSum(int a,int size,int,53,算法分析,时间复杂度的概念 算法运算量的计算渐进表示法时间复杂度的计算算法的优化空间复杂度的概念,54,算法的空间复杂度,固定空间需求:与处

19、理的问题规模无关可变空间需求:与处理的数据量有关渐进的空间复杂度:当n-占用的空间量与n的关系空间复杂度一般按最坏情况处理空间复杂度的计算比较简单,表示方法与时间复杂度相同,55,第一章 引言,什么是数据结构算法分析面向对象的数据结构,56,过程化的数据结构,分别介绍每一种数据结构可能的存储方式(记录),以及在这种存储方式下操作是如何实现的(函数),57,面向对象的数据结构,面向对象的程序设计方法为程序员提供了创建工具的功能。将数据结构的存储和处理过程封装起来做成一个个工具。数据结构的使用者只需要知道数据结构的逻辑特性,而不需要知道它的逻辑结构是如何存储的,它的操作是如何实现的。学习数据结构不

20、仅需要知道数据结构的存储和处理方法,还需要知道如何封装更能适合用户的需求。本课程采用面向对象的方法。,58,数据结构的描述和实现,数据结构的逻辑特性:每种数据结构用一个抽象类描述,指出该数据机构提供的操作数据结构的实现:每种数据结构可以有若干种实现的方法,每种实现就是一个类。每种实现都要实现数据结构的逻辑特性。为了保证这一点,每个实现类都必须从对应的抽象类继承,59,泛型程序设计,数据结构关注的是数据元素之间的关系是如何保存的数据元素可以是任意类型所有的数据结构的类(包括抽象类和非抽象类)都是模板,60,总结,数据结构的基本概念算法的确定比程序设计技巧对程序运行时间的影响更大大O 分析是一种很有效的工具,但它也有局限性。如前所述,它的使用不适合输入规模较小的场合。此时,最高项的系数或低次项对运行时间的影响较大。,61,作业,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号