数据结构课件:第1章 绪论_第1页
数据结构课件:第1章 绪论_第2页
数据结构课件:第1章 绪论_第3页
数据结构课件:第1章 绪论_第4页
数据结构课件:第1章 绪论_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,数据结构,2,课程相关信息,教材:数据结构,刘大有等编著,高等教育出版社,2010年9月. 参考书目:清华大学出版社、高等教育出版社和机械出版社等出版的数据结构教材. 教学形式:理论实验 考核方式:考试,3,参考书 1、数据结构 严蔚敏、吴伟民编著 清华大学出版社。 2、数据结构 (用面向对象方法与C+描述) 殷人昆、陶永雷等编著 清华大学出版社,4,教学计划,第一章 绪论(算法分析基础) 第二章 线性表、堆栈、队列 第三章 数组、字符串 第四章 树 第五章 图 第六章 递归 第七章 排序 第八章 查找,5,第一章 绪论,1.1 为什么要学习数据结构 1.2 数据结构概念 1.3 算法 1

2、.4 算法的正确性证明 1.5 算法分析基础,6,1.1 为什么学习数据结构,计算机学科中一门重要的专业基础课。 提高计算机的工作效率。 是程序设计的重要基础; 是许多计算机专业课的基础,如算法分析、编译原理、操作系统、数据库系统等。,7,最短路径算法在物流配送问题中的应用; 树结构在数据挖掘领域中的应用; 散列技术在数据加密领域中的应用; 查找技术在数据库领域中的应用; 倒排文件、查找算法在搜索引擎中的应用。,8,第一章 绪论,1.1 为什么要学习数据结构 1.2 数据结构概念 1.3 算法 1.4 算法的正确性证明 1.5 算法分析基础,9,例 个人书库管理程序所要处理的数据可能是如下的表

3、格。,10,1.2 数据结构概念1. 数据,数据是对象的表示。 计算机程序要处理的“原料”,它可以被计算机识别、存储和加工处理。 包括:数值、文字、表格、图像、声音、源程序等。,11,数据元素,是组成数据的基本单位。 在程序中通常把一个数据元素作为一个整体来考虑和处理。 数据元素还可被称为结点或顶点。 例如,在上表中,把其中的每一行(代表一本书)作为一个基本单位来考虑。,12,数据项,一个数据元素含有若干个数据项。 例如,在上表数据中,每个数据元素由登录号、书号、书名、作者、出版社和价格六个数据项构成。 数据项是构成数据的最小单位。,13,例 电话号码薄的查询问题。 (a1,b1 ), (a2

4、,b2), (an,bn ),14,例2 学生自然情 况查询问题。,15,2. 逻辑结构,数据的逻辑结构是指数据元素及其间的逻辑关系。 在个人书库管理程序中,各数据元素之间在逻辑上有一种线性关系,它指出了10个数据元素在表中的排列顺序。,16,有些书也将数据的逻辑结构分为集合、线性结构、树和图等四种类型。其中,集合的特点是:结构中的数据元素之间除了同属于一个集合的关系外,别无其他关系。,集合,线性结构,树,图,17,逻辑结构的形式化表示,逻辑结构表示为二元组L=(N, R), N是结点的有限集合 R是N上的关系集合,18,例 L=(N,R), N=a, b, c, d, e , R=r, r=

5、, , , ,若a,bN,且关系r,则称a是b的前趋结点,称b是a的后继结点,称a和b是相邻结点; 如果不存在aN,使r ,则称b为始结点; 如果不存在bN ,使r,则称a为终结点; 既非始结点又非终结点的结点被称为内结点。,19,例 L=(N,R), N=k1,k2,k9, R=r,r=, , , , , , , ,20,逻辑结构的分类 线性结构 结构中有且仅有一个始结点和一个终结点,始结点只有一个后继结点,终结点只有一个前趋结点,每个内结点有且仅有一个前趋结点和一个后继结点。 非线性结构(树、图) 结构中的结点可能有多个前趋结点和多个后继结点。,21,3存储结构 数据的存储结构是指数据的逻

6、辑结构在计算机中所需的存储空间、空间的构成结构及对该存储结构的访问方式等的总称。 数据的存储结构是建立一种由逻辑结构到存储空间的映射。 个人书库数据,在计算机中可以有多种存储表示。如,可以表示成数组,存放在内存中;也可以表示成文件,存放在磁盘上,等等。,22,存储结构分类,1)顺序存储结构 把一组结点存放在地址相邻的存储单元里,结点间的逻辑关系用存储单元的自然顺序关系表达。,23,23,2)链接存储结构 在结点的存储结构中附加指针字段,两个结点的逻辑后继关系用指针的指向来表达。,(a)可用存储空间,24,存储结构分类,3)索引存储结构 索引表把整数索引值映射到结点的存储地址。 索引表存储一串指

7、针,每个指针指向存储区域的一个数据结点。,25,存储结构分类,4)散列存储结构 适用于大数据量、高速检索的场合。 索引存储的一种延伸和扩展,利用散列函数进行索引值的计算,并通过索引表求出结点的指针地址。,26,存储结构总结,顺序、链接、索引和散列存储结构,可以单独使用,也可以组合使用。 存储结构要正确反映逻辑结构,并便于操作。,27,4. 对数据的操作,插入 删除 修改 排序 查找,28,数据结构的定义: 数据结构就是研究数据的逻辑结构和物理结构以及他们之间的关系,并对这种结构定义相适应的运算,设计出相应的算法。,5.数据结构的概念,29,数据结构的概念,按某种逻辑关系将一批数据元素组织起来;

8、 按一定的存储方式把它们存储起来; 在数据上定义需要施加的操作。,30,数据结构课程的目的,从对问题抽象和求解的角度来学习常用的数据结构,阐明其内在的逻辑关系和在计算机中的存储表示,以及刻画施加于其上之各种操作的算法。 学习上述理论知识,综合运用相关知识,再结合上机实践,使我们具备求解比较复杂的问题的能力,即掌握问题求解建模,选择恰当数据结构,或构造新的数据结构,设计较优算法,证明算法(或算法之关键步骤)正确性,分析算法的时空复杂性,对算法编程、调试等能力。,31,数据类型:是一个值的集合以及在这些值上定义的一组操作的集合的总称。 抽象数据类型:由一组数据结构和在该组数据结构上的一组操作所组成

9、。,32,第一章 绪论,1.1 为什么要学习数据结构 1.2 数据结构的概念 1.3 算法 1.4 算法的正确性证明 1.5 算法分析基础,33,计算机解决问题的步骤: 从具体问题中抽象出一个适当的数学模型; 设计解此模型的方法; 编出程序、进行测试、调试,直至得到最终解答。 计算机处理问题,以适当的数据结构为基础,制定出的切实可行的方法和步骤计算机算法。,1.3 算法1.算法的概念,34,计算机算法与数据结构密切相关:算法无不依附于具体的数据结构,数据结构直接关系到算法的选择和效率。 对数据的操作是由计算机来完成,这就要设计相应的插入、删除和修改等算法 。 1976年,沃斯提出:算法+数据结

10、构=程序,算法与数据结构的关系,35,算法由有限条指令构成,规定了解决特定问题的一系列操作。 算法具有5个特性: (1)有限性:一个算法在执行有限步后必然终止。 (2)确定性:算法中的每条指令都必须是清楚的,指令无二义性,相同的输入必须有相同的输出。 (3)输入:具有0个或0个以上由外界提供的量。 (4)输出:产生1个或多个结果。 (5)可行性:每条指令都十分基本,原则上可由人仅用笔和纸在有限的时间内也能完成。 算法与程序的区别 表现形式不同。 是否具备有穷性。,36,算法可以用自然语言、数学语言、程序设计语言或约定的任何符号语言来描述。如类Pascal语言、C语言或伪代码等。 ADL语言直观

11、方便。,2.算法描述语言ADL,37,算法描述语言ADL的格式 算法(变量i1,变量im.变量j1,变量jn)/单行注释(或/*/多行注释) . 本步骤的概括说明 . 本步骤的概括说明 语句序列. ,38, 表达式 算术运算符 +,-,*,/,DIV,MOD, , 关系运算符= 、 、 逻辑运算符AND,OR,NOT 逻辑常量 true,false 集合运算符 ,(差), 语句 每条语句都用“.”作为结束符 赋值语句 a b. a b. a b c.,39, 条件语句 1) IF THEN (语句1. . 语句m ). 2) IF THEN (语句1. . 语句m ). ELSE (语句1.

12、. 语句n ). 3) CASE DO ( : (语句1. .语句n1). : 语句1. .语句nm).,40,循环语句 1) WHILE DO (语句1. . 语句n ). 2) FOR = TO STEP DO (语句1. . 语句n ). 3) FOR DO (语句1. . 语句n ).,41,转移语句 GOTO () . EXIT 语句 结束本层WHILE或者FOR循环的执行 RETURN 语句 指出算法执行的终点 其它 输入语句:READ(x) /读取输入值赋给变量x 输出语句:PRINT(),42,例 A是一个含有n个不同元素的实数数组,给出求A之最大和最小元素的算法。 算法SM(

13、A, n . max,min) SM1. 初始化 maxminA1. SM2. 比较 FOR I=2 TO n DO /求最大和最小元素 ( IF AI max THEN maxAI. IF AI min THEN minAI) . ,43,ADL 的特点,书写简便 不必考虑过多程序设计语言的细节 例:交换a和b的值 易于理解 不同编程习惯的人交流算法 不必考虑与算法无关的内容(开发及运行环境、编译状态),44,3. 算法的评价准则 评估算法性能的5条准则 正确性 时间复杂性 占用空间 可读性 鲁棒性,45,1)正确性 说一个算法是正确的,如果对于一切合法的输入数据,该算法执行有限时间都能产生

14、正确的结果。 具体包括两方面:一是解决问题的方法;二是实现这一方法的一系列指令(步骤、语句)。 证明相关的引理和定理,以确认一个算法所用方法的正确性; 证明一系列语句确实做了符合规定的操作.,46,语句正确性,大体可分为四个层次: 算法不含语法错误; 算法对于几组输入数据能够得出满足要求的结果; 算法对于精心选择的典型、苛刻而带有刁难性的几组数据,能够得出满足要求的结果; 算法对一切合法的输入数据,都能产生满足要求的结果。,47,2) 时间复杂性 算法的实际执行时间是不是时间复杂性的理想度量呢? 不是。 其原因是: 算法的实际执行时间依赖于机器。同一个算法在不同机器上的执行时间不一定相同。 算

15、法的实际执行时间还依赖于编写算法的程序设计语言。一个用 C 或 Pascal 编写的算法可能要比用 BASIC 语言编写的算法快 20 倍。,48,3) 占用的存储空间 包括存储算法本身所占用的存储空间,算法的输入、输出数据所占用的存储空间和算法运行过程中临时占用的存储空间。 算法在运行过程中所占用的存储空间的大小被定义为算法的空间复杂性。它包括局部变量所占用的存储空间和系统为了实现递归所使用的堆栈这两个部分。算法的空间复杂性一般以数量级的形式给出。,49,4) 可读性 最简单、最直接的算法尽管不一定是最有效的,但却具有良好的可读性。可读性好的算法其正确性证明比较容易(即其正确性易于保证),同

16、时便于设计、修改、阅读和调试,可见可读性是十分重要的。 对于那些需经常使用的算法来说,高效率比可读性更为重要。,50,5) 鲁棒性 对有缺失、有噪声或有错误的输入数据,算法应具有较强的应付能力。如,能对输入数据语法语义检验、提出修改错误的建议并提供重新输入的机会。,51,1.4 算法的正确性证明,对于一个算法来说正确性是前提,也是最重要的。 对明显是正确的算法,可通过上机调试验证其正确性。调试用的数据要精心挑选,以保证算法对“所有的”数据都是正确的; 只要调试找出一组数据使算法失败(即计算结果不正确),就能否定整个算法的正确性; 算法的正确性一般通过数学方法进行推理证明,常用的数学方法除了直接

17、证明法外,还有反证法和数学归纳法。,52,第一章 绪论,1.1 为什么要学习数据结构 1.2 数据结构的概念 1.3 算法 1.4 算法的正确性证明 1.5 算法分析基础,53,Testing (测试),Black Box Methods 黑盒法 侧重测试程序的功能,不考虑程序是如何实现的,即代码结构。 设计测试用例,检查能否得到预想的结果。 White Box Methods 白盒法 侧重测试程序的代码结构 Statement Coverage 语句覆盖: 使程序中的每一条语句都至少执行一次。 Decision Coverage 分支覆盖 :使程序中的每一个分枝都至少执行一次。,54,1.

18、反证法,1)要证明定理 T 是正确的,首先假定 T是错误的 2)使用正确的命题和正确的推理规则进行推理, 若出现下列条件之一,就会得出矛盾的结果: 与已知条件矛盾 与公理矛盾 与证明过的定理矛盾 自相矛盾 3)由此推出定理 T 是正确的。,55,例 证明没有最大的整数,证明:用反证法。 (1) 反面假设:假设存在一个最大整数,记为N . (2) 由假设推出矛盾:设P N 1,因为P 是两个整数的和,所以P也是整数,且 P N . 与 N 是最大整数矛盾。 (3) 肯定原来的结论:因此,没有最大的整数。证毕。,56,2. 数学归纳法,数学上证明与自然数 N 有关的命题的一种特殊方法,它主要用来研

19、究与正整数有关的数学问题。 数学归纳法依靠假设的事实来证明定理,是用“有限”步骤解决“无限”问题的一种严格证明方法。,57,数学归纳法: 设T是一个定理, n是T中的正参数. 数学归纳法表明,如果下面两个条件为真,则对于参数n的任何值,T都是正确的: (1) 基础归纳:n c 时,T成立。 (2) 归纳步骤:如果n = k 1 时T 成立,则n = k 时T也成立。 其中,c是一个较小的常量,n c . 通常,证明初始归纳很容易,而证明归纳步骤很难。,58,强归纳法 设T是一个定理, n是T中的正参数. 数学归纳法表明,如果下面两个条件为真,则对于参数n的任何值,T都是正确的: (1) 基础归

20、纳:n c 时,T成立。 (2) 归纳步骤:如果n = k 1 时T 成立,则n = k 时T也成立 (2) 归纳步骤:如果对于所有的k ( c k n ) T 都成立,则T 对于 n 也成立。,59,例: 证明由递归关系式T ( n ) T ( n 1 ) 1,T(1) 0,可推出T(n)n 1,其中,n 1 . 证明: 基础归纳:n 1 时,T ( 1 ) 1 1 0,结论成立。 归纳步骤: 假设 T ( n 1 ) n 2 成立(归纳假设) 往证 T ( n ) n 1 成立。 由递归关系式可知: n 1 时,有T ( n ) T ( n 1 ) 1 再由归纳假设: T ( n ) T

21、( n 1 ) 1 n 2 1 n 1 由数学归纳法推出T (n) n 1成立,证毕,60,第一章 绪论,1.1 为什么要学习数据结构 1.2 数据结构的概念 1.3 算法 1.4 算法的正确性证明 1.5 算法分析基础,61,1.5 算法分析基础 在假定算法正确的前提下,用时间复杂性作为评价算法优劣的标准。 一个算法的时间复杂性是指该算法所执行的基本运算的次数。 最优算法的定义: 某算法A为最优,当且仅当解决同一领域同一问题的所有算法集合SA (ASA)中没有一个算法执行的基本运算次数比算法A更少。,62, 决定运行时间的因素: 、问题的规模。 、对源程序进行编译所需时间。 、机器执行指令的

22、速度。 、程序中指令重复执行的次数。 频度:算法执行一次,某一语句实际被执行的 次数,叫该语句在此算法中的频度。,63,1.算法时间复杂性的分析方法 例 A是一个含有n个不同元素的实数数组,给出求A之最大和最小元素的算法。 算法SM (A,n . max,min) SM1初始化 maxminA1. SM2比较 FOR i=2 TO n DO ( IF Ai max THEN maxAi. IF Ai min THEN minAi). 算法SM的时间复杂性为2(n-1)。,64,例 实数数组R由n个元素组成,给定一个实数K,试确定K是否是R的元素。 算法F (R, n, K. i) F1 初始化

23、 i 1. F2 比较 WHILE in DO ( IF Ri=K THEN RETURN. i i+1) . 最少比较次数:1 最大比较次数:n,65,定义 设一个领域问题的输入规模为n,Dn是该领域问题的所有输入的集合,任一输入IDn,P(I)是I出现的概率,且满足 P(I)=1,T(I)是算法在输入I下所执行的基本运算次数。我们定义该算法的期望复杂性(即该算法的平均复杂性 )为: E(n)= P(I)*T(I) 该算法的最坏复杂性为: W(n)=maxT(I) 该算法的最好复杂性为: W(n)=minT(I),66,R1 R2 R3 R4 R5 R6 R7 R8 5 20 12 7 30

24、 40 25 16,K=Ri q/n,K!=Ri 1-q,上例中,设q( 0q1 )为K 在R中的概率,q,67,通过计算我们可以得到算法F的期望复杂性为 E(n)= P(I)*T(I) =(q/n)*1+ (q/n)*2+ (q/n)*n+(1-q)*n n项 1项 = q(n+1)/2+(1-q)n 如果已知K在R中,即q=1,则有 E(n)= (n+1) /2 由算法F很容易看出该算法的最坏复杂性为 W(n)=maxT(i)| 1i n+1=n,68,例 算法 SM 的改进算法 BS 算法BS(A , i , j . fmax , fmin) /* 在数组 A 的第 i 至第 j 个元素

25、间寻找最大和最小 元素,已知 i j; 假定A 中元素互异 */ BS1. 递归出口 IF i j THEN (fmax fmin Ai. RETURN.) IF i j 1 THEN (IF Ai Aj THEN(fmax Aj. fmin Ai). ELSE (fmax Ai. fmin Aj). RETURN). BS2. 取中值 mid (ij)/2 BS3. 递归调用 BS (A, i, mid. Gmax, gmin). BS (A, mid1, j. hmax, hmin). BS4. 合并 fmax maxgmax, hmax. fmin mingmin, hmin. ,69,

26、i=1 mid= 4 j=8 A1 A2 A3 A4 A5 A6 A7 A8 5 20 12 7 30 40 25 16,算法SM的改进,70,BS(A , i1 , j8 . fmax , fmin) BS1. BS2. mid4 . BS3. BS(A , i1 , j4. gmax , gmin) BS1. BS2. mid2 . BS3. BS(A , i1 , j2. gmax , gmin) BS1. gmax20. gmin5 . RETURN. BS(A , i3 , j4. hmax , hmin) BS1. hmax12. hmin7. RETURN. BS4. gmax2

27、0 . gmin5 . BS(A , i5 , j8. hmax , hmin) BS1. BS2. mid6 . BS3. BS(A , i5 , j6. gmax , gmin) BS1. gmax40. gmin30. RETURN. BS(A , i7 , j8. hmax , hmin) BS1. hmax25. hmin16. RETURN. BS4. hmax40 . hmin16 . BS4. fmax 40 . fmin 5 . ,71,容易看出,BS对Ai到Aj的不同的输入都有相同的基本运算次数。设T(n)表示其基本运算次数,则根据算法BS的递归过程,有如下的递归表达式:,

28、若 n 是 2 的幂(即存在正整数k , 使得 n2k )则有 T(n)2T(n/2)22(2T(n/4)2)2 4T(n/4)424(2T(n/8)2)42 8T(n/8)842 2k1T(2)(21222k1)(3n/2)2,72,BS与SM的比较 算法SM和BS的时间复杂性均为线性,但因3n/222(n1),故算法BS优于算法SM. 算法BS是递归算法,因此它的实现需要额外的辅助空间栈。,73,例 求下列各程序段时间复杂性。 for(i=1;i=n;i+) x+; for(j=1;j=n;j+) for(k=1;k=n;k+) x+; 计算时间复杂度 算法的计算时间个语句频度 记做 T(

29、n),74,算法运行时间复杂度:指某算法的基本操作次数。 基本操作次数:最里层循环体内简单操作的执行次数或递归调用的调用次数。 例3 for(i=1;i=n;i+) for(j=1;j=n;j+) x+;,75,确定算法基本运算次数的目的在于能比较功能相同的两个算法之间的时间复杂性;预测随实例特性的改变,运行时间的增减情况。 在很多情况下,特别当输入规模 n 较大时,确定一个算法的基本运算次数T,得到T 和 n 之间的函数关系非常困难。 算法分析中通常采用大O、大和大来渐近表示算法的基本运算次数。,2. 复杂性函数的渐近表示,76,1892年,保罗巴赫曼(Paul Bachmann)提出了大O

30、表示法,主要用于估计函数的增长速率。 定义 设f(n)和g(n)是正整数集到正实数集上的函数,称f(n)是O(g(n),当且仅当存在正的常数C 和 n0,使得对任意的n n0 ,有 f(n) Cg(n) . f 和 g 之间关系的含义是“f(n)的阶至多为g(n)”或“f 至多与g 增长得一样快” .,大O表示法,77,例 f (n) 3 n 2 是 O(n) . 证明: 由大O的定义,存在C 3,n0 1,使得对任意的 n n0 ,有3 n 2 3 n 即 f(n) Cg(n) . 例 f (n) 3 log n loglog n 是 O (logn)证明:由大O的定义,存在C 4, n0 2,使得对任意的 n n0 ,有3 log n loglog n 4 logn 即 f(n) Cg(n) .,78,一个算法的时间复杂性为 O(g(n),表明它的基本运算次数至多是 g(n) 的某个常数倍. O(1) 表示算法的时间复杂性为一常数. O(n)、O(n2)、O(n3)、O(nm) 和 O(2n) 分别表示算法时间复杂性为线性阶的、平方阶的、立方阶的、多项式阶的和指数阶的,其中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论