《数据结构第一章》由会员分享,可在线阅读,更多相关《数据结构第一章(100页珍藏版)》请在金锄头文库上搜索。
1、数据结构数据结构主讲:孙永奇主讲:孙永奇计算机学院、科学系计算机学院、科学系2012年年2月月1答答疑疑地点地点:9号楼号楼西西207(51683610)时间时间:周五下午周五下午3:004:00,其他时间电话或,其他时间电话或邮件约定。邮件约定。E-mail(交作业交作业):sun_2课件及资料下载课件及资料下载 用户名:学号用户名:学号(09281111)密密码:学号码:学号(09281111)位置:教学资源位置:教学资源/学习资源学习资源3数据结构数据结构课程的基本要求课程的基本要求l 掌握各种常用的数据结构,包括掌握各种常用的数据结构,包括线性表、线性表、栈、队列、字符串、数组、广义表
2、、树、二栈、队列、字符串、数组、广义表、树、二叉树以及图叉树以及图等基本类型的数据结构及其应用。等基本类型的数据结构及其应用。l 掌握掌握排序、查找排序、查找的各种实现算法,并能够的各种实现算法,并能够从时间上对各种算法进行定性或定量的分析从时间上对各种算法进行定性或定量的分析和比较。和比较。4数据结构数据结构课程的目的课程的目的l介绍一些最常用的数据结构,阐明数据结构介绍一些最常用的数据结构,阐明数据结构内在的内在的逻辑联系;逻辑联系;l讨论它们在计算机中的讨论它们在计算机中的存储表示;存储表示;l并结合各种典型应用说明它们在进行各种并结合各种典型应用说明它们在进行各种运运算算及操作时的动态
3、性质和实际执行的及操作时的动态性质和实际执行的算法;算法;l提高根据问题的性质提高根据问题的性质选择选择合理的数据结构并合理的数据结构并控制控制求解算法的空间和时间复杂性的能力。求解算法的空间和时间复杂性的能力。总目标:进一步提高软件设计和编写程序水平。总目标:进一步提高软件设计和编写程序水平。5 1 1严蔚敏等,严蔚敏等,数据结构数据结构(C C语言版),清华大语言版),清华大学出版社。学出版社。(教材)(教材) 2 2严蔚敏等,严蔚敏等,数据结构题集数据结构题集(C C语言版),清语言版),清华大学出版社。华大学出版社。(教材配套习题)(教材配套习题)教材与参考资料教材与参考资料3 3邓俊
4、辉编,邓俊辉编,数据结构数据结构(C+C+语言版),清华大语言版),清华大学出版社。学出版社。(20112011年,内容新)年,内容新)4 4殷人昆等殷人昆等, ,数据结构(面向对象方法与数据结构(面向对象方法与C C描描述)述),清华大学出版社。,清华大学出版社。5 5殷人昆、徐孝凯,殷人昆、徐孝凯,数据结构习题解数据结构习题解,清华大,清华大学出版社。学出版社。 6课程成绩课程成绩=平时成绩平时成绩+实验成绩实验成绩+期末成绩期末成绩100%10%20%70%内容学时周次内容学时周次第一一章 绪论41第七七章 图689第二二章 线性表42第九九章 查找6911第三三章 栈和队列634第十十
5、章 排序61113第四四章 串445第十一十一章 外部排序213第五五章 数组和广义表456实验实验8第六六章 树和二叉树667习题与复习习题与复习课81416考核方式考核方式:课程总体安排课程总体安排:共共64学时学时7第一章第一章 绪绪 论论8 教学内容:教学内容: 数据结构的基本概念;算法设计;数据结构的基本概念;算法设计;时间和空间复杂度时间和空间复杂度 教学重点:教学重点: 相关的基本概念;算法五大要素;相关的基本概念;算法五大要素;计算语句频度和估算算法时间复杂度计算语句频度和估算算法时间复杂度的方法的方法估算算法时间复杂度的方法估算算法时间复杂度的方法 教学难点:教学难点: 91
6、.1 1.1 什么是数据结构什么是数据结构1.2 1.2 基本概念和术语基本概念和术语1.3 1.3 算法和算法分析算法和算法分析10用用计算机解决实际问题计算机解决实际问题的流程的流程:编程上机调编程上机调试试对对具体问题抽具体问题抽象象建立实际问题的求解模建立实际问题的求解模型型设计出相应算设计出相应算法法实际问题得到解实际问题得到解决决1.11.1、什么是数据结构、什么是数据结构运算对象一般为运算对象一般为整型、实型等一些整型、实型等一些简单的数据类型简单的数据类型;程序设计者的主程序设计者的主要精力集中在程序要精力集中在程序设计的技巧上,而设计的技巧上,而不是数据的组织和不是数据的组织
7、和存储上。存储上。数值计算问题数值计算问题非数值计算问题非数值计算问题数学方程数学方程无法用数学方程来无法用数学方程来进行描述,进行描述,必须建必须建立相应的数据结构立相应的数据结构来进行描述,分析来进行描述,分析问题中所用到的数问题中所用到的数据是如何组织的,据是如何组织的,研究数据之间的关研究数据之间的关系如何,进而设计系如何,进而设计出合适的算法。出合适的算法。11 数据结构数据结构的概念一般包括:数据之间的逻辑关系、数据在计算机中的存储方式和数据的运算三个方面。 为了叙述上的方便,把上述数据结构的三个方面分别称为:数据的逻辑结构数据的逻辑结构数据的存储结构数据的存储结构数据的运算数据的
8、运算12例例1 1 职工信息管理职工信息管理 一个单位要对所有职工的基本情况进行管理,一个单位要对所有职工的基本情况进行管理,包括查询职工的姓名、性别及月收入等情况,对整包括查询职工的姓名、性别及月收入等情况,对整个单位的职工信息进行统计和汇总等。个单位的职工信息进行统计和汇总等。逻辑结逻辑结构构数据运数据运算算存储结存储结构构如何利用计算机来辅助管理这些信息?如何利用计算机来辅助管理这些信息?如何有效地组织每个职工的信如何有效地组织每个职工的信息?息?如何在计算机中储存这些职工信如何在计算机中储存这些职工信息?息?如何对这些职工信息进行各种处如何对这些职工信息进行各种处理?理?13职工信息表
9、职工号姓名性别年龄月收入(元)1张敬男5532002李红女5128003孙涛女4123004王宁宁男33195014表的逻辑结表的逻辑结构构表中数据之间是一种简单的表中数据之间是一种简单的线性关系线性关系表的存储结表的存储结构构顺序存储结构或链式存储结顺序存储结构或链式存储结构构表的运表的运算算插入、删除、修改、查插入、删除、修改、查找找15例例2 2 交通信息咨询交通信息咨询 建立一个全国范围内的交通信息咨询系统,回建立一个全国范围内的交通信息咨询系统,回答游客提出的各种问题,如合理安排旅游线路等。答游客提出的各种问题,如合理安排旅游线路等。 此时可采用一种称之为此时可采用一种称之为图的结构
10、图的结构来表示实际的来表示实际的交通网络,图中顶点表示城市,边表示城市间交通交通网络,图中顶点表示城市,边表示城市间交通联系,这个交通网络图就表示一个数据结构。联系,这个交通网络图就表示一个数据结构。16交通网络图乌鲁木齐乌鲁木齐呼和浩特呼和浩特北京北京天津天津沈阳沈阳哈尔滨哈尔滨西宁西宁兰州兰州西安西安郑州郑州武汉武汉长沙长沙贵阳贵阳南宁南宁昆明昆明大连大连上海上海徐州徐州南昌南昌福州福州广州广州柳州柳州深圳深圳成都成都17图的逻辑结构图的逻辑结构结点之间的关系可以是任意的,结点之间的关系可以是任意的,图中任意两个结点之间都可以相关图中任意两个结点之间都可以相关图的存储结构图的存储结构在计算
11、机中既要存储图中每个结点,在计算机中既要存储图中每个结点,又要存储结点之间的关系又要存储结点之间的关系图的运算图的运算如求最短路径问题,如求最短路径问题,求关键路径问题等求关键路径问题等18 从上面两例可见,要描述非数值计算问题的从上面两例可见,要描述非数值计算问题的求解模型,单靠数学方程是无法完成的,需要使求解模型,单靠数学方程是无法完成的,需要使用一些诸如表、图、还有树之类的数据结构。用一些诸如表、图、还有树之类的数据结构。 因此,简单说,因此,简单说,数据结构数据结构是一门研究非数值是一门研究非数值计算问题的程序设计中计算机的计算问题的程序设计中计算机的操作对象操作对象以及它以及它们之间
12、的们之间的关系关系和和运算操作运算操作的学科的学科。 19数据结构数据结构课程与高级程序设计语言课程课程与高级程序设计语言课程有什么不同?有什么不同? 数据结构数据结构课程实际上是一门研究非数值计算问课程实际上是一门研究非数值计算问题的程序设计中计算机的操作对象以及它们之间的关系题的程序设计中计算机的操作对象以及它们之间的关系和运算操作等的一门学科,所讨论的是和运算操作等的一门学科,所讨论的是在数据组织的基在数据组织的基础上的复杂程序的设计问题础上的复杂程序的设计问题;而高级程序设计语言所讨;而高级程序设计语言所讨论的是简单程序设计问题。综上所述,论的是简单程序设计问题。综上所述, 按某种按某
13、种逻辑关系逻辑关系组织起来的一批数据,按一定的存组织起来的一批数据,按一定的存储表示方式把它储表示方式把它存储存储在计算机的存储器中,并在这些数在计算机的存储器中,并在这些数据上定义了一个据上定义了一个运算运算的集合,就叫做一个的集合,就叫做一个数据结构数据结构。20数据结构数据结构在计算机科学中是一门综合性的专业基在计算机科学中是一门综合性的专业基础课,其研究不仅涉及到计算机硬件(特别是编码理论、础课,其研究不仅涉及到计算机硬件(特别是编码理论、存储装置和存取方法等)的研究范围,而且和计算机软件存储装置和存取方法等)的研究范围,而且和计算机软件的研究有着密切的关系,无论是编译程序还是操作系统
14、,的研究有着密切的关系,无论是编译程序还是操作系统,都涉及到数据元素在存储器中的分配问题。在研究信息检都涉及到数据元素在存储器中的分配问题。在研究信息检索时也必须考虑如何组织数据,以便查找和存取数据元素索时也必须考虑如何组织数据,以便查找和存取数据元素更为方便。因此,可以认为更为方便。因此,可以认为数据结构是介于数学、计算机数据结构是介于数学、计算机硬件和计算机软件三者之间的一门核心课程硬件和计算机软件三者之间的一门核心课程。不仅是一般。不仅是一般程序设计(特别是非数值计算的程序设计)的基础,而且程序设计(特别是非数值计算的程序设计)的基础,而且是设计和实现编译程序、操作系统、数据库系统及其他
15、系是设计和实现编译程序、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。统程序和大型应用程序的重要基础。数据结构数据结构课程的地位课程的地位2122著名的瑞士计算机科学家著名的瑞士计算机科学家N.WirthN.Wirth教授提出公式:教授提出公式: Algorithm + Data Structures = Programs数据结构数据结构: :问题的数问题的数学模型(指数据的逻学模型(指数据的逻辑结构和存储结构)辑结构和存储结构)算法算法: :处理问题处理问题的策略(对数据的策略(对数据运算的描述)运算的描述) 由此可见,程序设计的实质是对实际问由此可见,程序设计的实质是对实际问
16、题选择一种好的数据结构,再设计一个好的题选择一种好的数据结构,再设计一个好的算法,而好的算法,而好的算法算法在很大程度上在很大程度上取决于取决于描述描述实际问题的实际问题的数据结构数据结构。程序设计程序设计23张红张红135*李伟李伟136*王刚王刚137*例例3 3:电话号码查询:电话号码查询 编写一个程序,查询某单位的职工电话号码。要求对任编写一个程序,查询某单位的职工电话号码。要求对任意给出的一个姓名,若该人有电话号码,则要快速找到其电意给出的一个姓名,若该人有电话号码,则要快速找到其电话号码;否则指出该人没有电话号码。话号码;否则指出该人没有电话号码。 姓名电话号码构造一张电话号码表构
17、造一张电话号码表将将表中记录顺序存放在计算机中表中记录顺序存放在计算机中从头开始查找从头开始查找 电话号码表电话号码表最简单的方法最简单的方法:再看两个例子:再看两个例子:24改进的方法:改进的方法: 将电话号码表按姓氏排列,然后建立姓氏索引表。将电话号码表按姓氏排列,然后建立姓氏索引表。 李伟 姓名 李刚 张红 张兰电话号码 李晓电话号码表(按电话号码表(按姓氏排列)姓氏排列)姓氏索引表姓氏索引表 姓 地址 李 张25例例4 4:运动会田径比赛的时间安排:运动会田径比赛的时间安排 某高校运动会共设六个田径比赛项目,即跳高、跳远、某高校运动会共设六个田径比赛项目,即跳高、跳远、铅球、标枪、铅球
18、、标枪、100100米和米和200200米短跑,规定每个选手米短跑,规定每个选手至多至多参加三参加三个项目的比赛。现有五名选手报名参赛,选手所选择的项目个项目的比赛。现有五名选手报名参赛,选手所选择的项目如下表所示:如下表所示:要求设计一个竞赛日程安排表,使得在要求设计一个竞赛日程安排表,使得在尽可能短尽可能短的时间的时间内安排完比赛。内安排完比赛。姓名姓名项目项目1 1项目项目2 2项目项目3 3王一王一王二王二王三王三王四王四王五王五跳高跳高标枪标枪标枪标枪铅球铅球跳远跳远 跳远跳远铅球铅球 100100米米 200200米米 200200米米 100100米米 200200米米跳高跳高
19、26首先应选择一个合适的数据结构来表示它,为此,设计首先应选择一个合适的数据结构来表示它,为此,设计一个图,图中一个图,图中顶点代表竞赛项目顶点代表竞赛项目,在所有的两个,在所有的两个不能同时进不能同时进行比赛的项目之间连上一条边行比赛的项目之间连上一条边。显然,同一个选手选择的几。显然,同一个选手选择的几个项目是不能在同一时间内比赛的,因此该选手所选择的项个项目是不能在同一时间内比赛的,因此该选手所选择的项目中应该两两有边相连,由此得到如下数据结构模型(无向目中应该两两有边相连,由此得到如下数据结构模型(无向图),图中,图),图中,A A,B B,F F分别对应于六个竞赛项目。分别对应于六个
20、竞赛项目。 A A 跳高跳高 B B 跳远跳远 C C 标枪标枪 D D 铅球铅球 E 100E 100米米 F 200F 200米米姓名姓名项目项目1项目项目2项目项目3王一王一王二王二王三王三王四王四王五王五跳高跳高标枪标枪标枪标枪铅球铅球跳远跳远 跳远跳远铅球铅球100米米200米米200米米 100米米200米米跳高跳高27竞赛项目的竞赛项目的时间安排问题时间安排问题可以抽象为对无可以抽象为对无向图进行向图进行“着色着色”操作,即:用操作,即:用尽可能少尽可能少的颜的颜色给图中每个顶点着色,使得任意两个有边连色给图中每个顶点着色,使得任意两个有边连接的相邻接的相邻顶点着上不同的颜色顶点
21、着上不同的颜色,每一种颜色表,每一种颜色表示一个比赛时间,着上同一颜色的顶点是可以示一个比赛时间,着上同一颜色的顶点是可以安排在同一时间内竞赛的项目。安排在同一时间内竞赛的项目。 由此看出,由此看出,解决问题的一个关键步骤解决问题的一个关键步骤是:是:选取合适的数据结构表示该问题,然后才能写选取合适的数据结构表示该问题,然后才能写出有效的算法。出有效的算法。281.2 1.2 基本概念和术语基本概念和术语一、数据与数据结构一、数据与数据结构二、数据类型二、数据类型三、抽象数据类型三、抽象数据类型29数据数据 是指所有能是指所有能被输入被输入到计算机中并被计算机程序到计算机中并被计算机程序处理处
22、理的符号的符号的总称。例如:整数、实数、字符串、图象、的总称。例如:整数、实数、字符串、图象、声音等。(凡能被声音等。(凡能被计算机存储、加工的对象计算机存储、加工的对象通称为数通称为数据。)据。) 是是计算机操作的对象计算机操作的对象的总称。的总称。 是计算机处理的是计算机处理的信息的信息的某种特定的符号某种特定的符号表示形式表示形式。数据元素数据元素 是数据(集合)中的一个是数据(集合)中的一个“个体个体”。 是数据的基本单位,是数据结构中讨论的是数据的基本单位,是数据结构中讨论的基本基本单位。单位。 一、数据与数据结构一、数据与数据结构30 数据项数据项 一个数据元素由若干个一个数据元素
23、由若干个数据项数据项组成,组成,数据项数据项是数据不可分割的最小单位。是数据不可分割的最小单位。 例如:描述一个运动员的数据元素可以是描述一个运动员的数据元素可以是姓名姓名 俱乐部名称俱乐部名称 出生日期出生日期 参加日期参加日期 职务职务业绩业绩数据、数据元素和数据项反映了数据组织的三个层次数据、数据元素和数据项反映了数据组织的三个层次31 数据对象数据对象 是性质相同的是性质相同的数据元素数据元素的集合,是数据的集合,是数据的一个的一个子集子集。例如:例如:整数数据对象是集合整数数据对象是集合 N=0,N=0, 1,1, 2,2, 字母字符数据对象是集合字母字符数据对象是集合 C=A,B,
24、ZC=A,B,Z32 结构结构 在任何问题中,数据元素都不是孤立存在的,在任何问题中,数据元素都不是孤立存在的,而是在他们之间存在着某种关系,这种而是在他们之间存在着某种关系,这种数据元素相数据元素相互之间的关系称为结构。互之间的关系称为结构。 假设用假设用三个三个4位的十进制数位的十进制数表示一个含表示一个含12位数位数的十进制数。的十进制数。3214,6587,9345 a1(3214),a2(6587),a3(9345)则在数据元素则在数据元素 a1、a2和和a3 之间存在着之间存在着“次序次序”关系关系 a1,a2 、 a2,a3 3214,6587,9345a1a2a3例如例如: :
25、6587,3214,9345a2a1a333又例,在2行3列的二维数组a1, a2, a3, a4, a5, a6中六个元素之间存在两个关系:行的次序关系行的次序关系:列的次序关系列的次序关系: :row = ,col = , a1 a3 a5 a2 a4 a6 a1 a2 a3a4 a5 a634再例,在一维数组再例,在一维数组 a1,a2,a3,a4,a5,a6的数据元素之间存在如下的的数据元素之间存在如下的次序关系次序关系:|i=1,2,3,4,5可见,不同的可见,不同的“关系关系”构成不同的构成不同的“结构结构”35 数据结构数据结构: 带带结构结构的数据元素的集合。的数据元素的集合。
26、 或者说,数据结构是相互之间存在着某种或者说,数据结构是相互之间存在着某种逻辑关系逻辑关系的数据元素的集合。的数据元素的集合。 逻辑结构:逻辑结构: 结构定义中的结构定义中的“关系关系”描述的是数据元素描述的是数据元素之间的逻辑关系,因此又称为数据的逻辑结构。之间的逻辑关系,因此又称为数据的逻辑结构。36数据的数据的逻辑结构逻辑结构可归结为以下可归结为以下四类四类: : 集合集合:结构中的数据元素之间结构中的数据元素之间除了除了“同属于一个集合同属于一个集合”的关系的关系之外,别无其它关系。之外,别无其它关系。 线性结构线性结构:结构中的数据元结构中的数据元素之间存在素之间存在一个对一个一个对
27、一个的关系。的关系。 树形结构树形结构:结构中的数据结构中的数据元素之间存在元素之间存在一个对多个一个对多个的关的关系。系。 图状结构图状结构或网状结构网状结构:结构中的数据元素之间存在结构中的数据元素之间存在多多个对多个个对多个的关系。的关系。37数据结构的数据结构的形式定义形式定义为:为: 数据结构是一个二元组数据结构是一个二元组 Data_Structure = (D , S)Data_Structure = (D , S) 其中:其中:D D是是数据元素数据元素的有限集的有限集 S S是是D D上上关系关系的有限集的有限集例如:复数可取如下定义:复数是一种数据结构例如:复数可取如下定义
28、:复数是一种数据结构 Complex = (C , R)Complex = (C , R)其中:其中:C C是含两个实数的集合是含两个实数的集合c1,c2c1,c2;R = PR = P, 而而P P是定义在集合是定义在集合C C上的一种关系上的一种关系 c1,c2c1,c2 , 其中有序偶其中有序偶c1,c2c1,c2表示表示c1c1是复数的实部,是复数的实部,c2c2是复数是复数的虚部。的虚部。38数据的数据的存储结构存储结构: 数据结构在计算机中的表示数据结构在计算机中的表示( (又称映象又称映象) )称为数据的称为数据的物理结构物理结构, , 又称为存储结构。存又称为存储结构。存储结构
29、是逻辑结构在存储器中的储结构是逻辑结构在存储器中的映象。映象。“数据元素数据元素”的映象 “关系关系”的映象 包括包括: :39数据元素数据元素的映象方法:的映象方法: 计算机中表示信息的最小单位是二进制计算机中表示信息的最小单位是二进制的一位的一位(bit)(bit)。用二进制位。用二进制位(bit)(bit)的位串表的位串表示数据元素。示数据元素。(321)10=(501)8=(101000001)2 A(ASCII)=(101)8=(1000001)2 9(ASCII)=(71)8=(0111001)240关系关系的映象方法:的映象方法:(表示(表示 x, yx, y 的方法)的方法)
30、数据元素之间的关系在计算机中有数据元素之间的关系在计算机中有两种表示方法两种表示方法: : 顺序映象顺序映象, , 非顺序映象非顺序映象对应两种存储结构对应两种存储结构: : 顺序存储结构顺序存储结构, , 链式存储结构链式存储结构41顺序映象:顺序映象:以元素在存储器中的以元素在存储器中的相对位置相对位置来来表示表示数数据元素之间的据元素之间的逻辑关系逻辑关系例如例如: :令令 y y 的存储位置和的存储位置和 x x 的存储位置之的存储位置之间差一个常量间差一个常量 C C,而而 C C 是一个隐含值,整个是一个隐含值,整个存储结构中只含存储结构中只含数据元素本身数据元素本身的信息。的信息
31、。x y42链式映象:链式映象:用指示元素存储地址的用指示元素存储地址的指针指针来来表示表示数据数据元素之间的元素之间的逻辑关系逻辑关系。 以附加信息以附加信息( (指针指针) )表示后继关系,需要表示后继关系,需要用一个和用一个和 x x 在一起的在一起的附加信息附加信息指示指示 y y 的存的存储位置。储位置。y x43 在不同的编程环境中,存储结构可有不同在不同的编程环境中,存储结构可有不同的描述方法。的描述方法。 当用高级程序设计语言进行编程时,通常当用高级程序设计语言进行编程时,通常可用高级编程语言中提供的数据类型描述之,可用高级编程语言中提供的数据类型描述之,不能直接用内存地址来描
32、述存储结构不能直接用内存地址来描述存储结构。例如例如: : 以三个带有次序关系的整数表示一个长整以三个带有次序关系的整数表示一个长整数时,可利用数时,可利用 C C 语言中提供的整数数组类型。语言中提供的整数数组类型。 typedefint Long_int 3定义长整数为定义长整数为: :44因此,在高级程序语言中可以用:因此,在高级程序语言中可以用:“一维数组一维数组”类型描述类型描述顺序顺序存储结存储结构构“指针指针”类型描述类型描述链式链式存储结构存储结构45 在用高级程序语言编写的程序中,必须在用高级程序语言编写的程序中,必须对程序中出现的每个变量、常量或表达式,对程序中出现的每个变
33、量、常量或表达式,明确说明它们所属的数据类型。明确说明它们所属的数据类型。二、数据类型二、数据类型46例如例如,C 语言中提供的基本数据类型基本数据类型有:整型整型int浮点型浮点型float字符型字符型char逻辑型逻辑型bool(C+语言)语言)双精度型双精度型double实型实型(C+语言)语言)47 数据类型数据类型 是一个 值的集合值的集合和定义在此集合上的 一组操作一组操作的总称。 不同类型的变量,其所能取的值的范围值的范围不同,所能进行的操作进行的操作不同。48三、抽象数据类型三、抽象数据类型 (AbstractDataType简称简称ADT)数据对象数据对象:De1,e2e1,
34、e2RealSet 数据关系数据关系:R1|e1复数的实数部复数的实数部分分 |e2 是复数的虚数部是复数的虚数部分分 基本操作:基本操作: Add(z1,z2,&sum)ADTComplexADTComplex492 2、抽象数据类型的描述方法、抽象数据类型的描述方法抽象数据类型可用抽象数据类型可用(D,S,P)三元组表示。三元组表示。其中:其中:D是是数据对象数据对象; S是是D上的上的关系关系集;集;P是对是对D的的基本操作基本操作集。集。 55ADT 抽象数据类型名抽象数据类型名 数据数据对象对象:数据对象的定义 数据数据关系关系:数据关系的定义 基本基本操作操作:基本操作的定义ADT
35、 抽象数据类型名抽象数据类型的定义格式:抽象数据类型的定义格式:56其中,数据对象和数据关系的定义用伪码描述。其中,数据对象和数据关系的定义用伪码描述。 基本操作的定义格式为基本操作的定义格式为: :基本操作名基本操作名(参数表) 初始条件:初始条件:初始条件描述 操作结果操作结果:操作结果描述 571.3 1.3 算法和算法分析算法和算法分析一、算法一、算法( (五要素五要素) )二、算法设计的原则二、算法设计的原则三、算法效率的衡量方法和准则三、算法效率的衡量方法和准则四、算法的存储空间需求四、算法的存储空间需求五、算法的描述五、算法的描述( (自学自学) )六、算法的评价六、算法的评价6
36、3一、算法一、算法 算法算法(Algorithm)Algorithm)是对特定是对特定问题求解步骤的问题求解步骤的一种一种描述描述,它它是指令的有限序列是指令的有限序列,其中,每一条指令表示一个或多个操,其中,每一条指令表示一个或多个操作。作。例:例:1- 1/2 + 1/3 - 1/4 + 1/5 -+ 1/99 - 1/1001- 1/2 + 1/3 - 1/4 + 1/5 -+ 1/99 - 1/100算法算法1 1:自左至右逐项相加或相减;:自左至右逐项相加或相减;算法算法2 2:将多项式写成两个多项式之差:将多项式写成两个多项式之差: (1+1/3+1/5+1/991+1/3+1/5
37、+1/99)- -(1/2+1/4+1/6+1/1001/2+1/4+1/6+1/100)算法算法3 3:先通分,再运算;:先通分,再运算;64一个算法必须满足以下一个算法必须满足以下五个重要特性五个重要特性: 有穷性:有穷性: 对于任意一组合法输入值,在执行对于任意一组合法输入值,在执行有穷步骤有穷步骤之后一定之后一定能结束,即算法中的每个步骤都能在能结束,即算法中的每个步骤都能在有限时间有限时间内完成。内完成。 确定性:确定性: 在算法中每一条指令都有在算法中每一条指令都有确切的含义确切的含义,不会产生二义,不会产生二义性性, , 使算法的执行者或阅读者都能明确其含义及如何执行。使算法的执
38、行者或阅读者都能明确其含义及如何执行。并且在任何条件下,并且在任何条件下,算法都只有一条执行路径算法都只有一条执行路径。相同的输。相同的输入只能得到相同的结果。入只能得到相同的结果。65 可行性可行性 算法中的所有操作都必须可以通过已经实现的基本算法中的所有操作都必须可以通过已经实现的基本操作运算有限次来实现的。操作运算有限次来实现的。 有输入有输入 一个算法有零个或多个输入一个算法有零个或多个输入, , 作为算法加工对象的作为算法加工对象的量值,通常体现为算法中的一组变量。有些输入量需要量值,通常体现为算法中的一组变量。有些输入量需要在算法执行过程中输入,而有的算法表面上可以没有输在算法执行
39、过程中输入,而有的算法表面上可以没有输入,实际上已被嵌入算法之中。入,实际上已被嵌入算法之中。 有输出有输出 一个算法有零个或多个输出一个算法有零个或多个输出, ,它是一组与它是一组与“输入输入”有确定有确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系的量值,是算法进行信息加工后得到的结果,这种确定关系即为算法的功能。关系即为算法的功能。66二、算法设计的原则二、算法设计的原则通常设计一个通常设计一个“好好”的算法应考虑达到以下目标:的算法应考虑达到以下目标: 正确性正确性 可读性可读性 健壮性健壮性 高效率与低存储量需求高效率与低存储量需求671 1正确性正确性 首先,算法应当满
40、足满足以特定的“规格说明规格说明”方式给出的需求需求。 其次,对算法是否“正确正确”的理解可以有以下四个层次四个层次:a a程序中不含语法错误;b b程序对于几组输入数据能够得出满足要求的结果 c c程序对于精心选择的、典型、苛刻且带有刁难性程序对于精心选择的、典型、苛刻且带有刁难性的几组输入数据能够得出满足要求的结果;的几组输入数据能够得出满足要求的结果; d d程序对于一切合法的输入数据都能得出满足要求的结果;通常以通常以第第c c层层意义的正确性作为衡量一个算法是否合格的标准。意义的正确性作为衡量一个算法是否合格的标准。682. . 可读性可读性 算法主要是为了人的阅读与交流阅读与交流,
41、其次才是为计算机执行,因此算法应该易于易于人的理解理解;另一方面,晦涩难读的程序易于隐藏较多错误而难以调试。693健壮性健壮性 当输入的数据非法输入的数据非法时,算法应当恰当地作出反映或进行相应处理进行相应处理,而不是产生莫名奇妙的输出结果。并且,处理出处理出错的方法错的方法不应是中断程序的执行,而应是返回返回一个表示错误或错误性质的值表示错误或错误性质的值,以便在更高的抽象层次上进行处理。704高效率与低存储量需求高效率与低存储量需求通常,效率效率指的是算法执行时间算法执行时间;存储量存储量指的是算法执行过程中所需的所需的最大存储空间最大存储空间,两者都与问题的规模规模有关。有关。71三、算
42、法效率的衡量方法和准则三、算法效率的衡量方法和准则通常有两种两种衡量算法效率的方法:1 1、事后统计法、事后统计法缺点:缺点:1必须必须先运行先运行依据算法编制的依据算法编制的程序程序2所得时间的统计量依赖于计算机的硬件、所得时间的统计量依赖于计算机的硬件、软件等环境因素,有时容易掩盖算法本身的优软件等环境因素,有时容易掩盖算法本身的优劣。劣。72和算法执行时间相关的因素:和算法执行时间相关的因素:1 1算法算法选用的策略的策略2 2问题的规模问题的规模3 3编写程序的语言语言4 4编译编译程序产生的机器代码的质量的质量5 5计算机计算机执行指令的速度的速度2 2、事前分析估算法、事前分析估算
43、法73 一个特定一个特定算法的算法的“运行工作量运行工作量”的大小,只依赖于的大小,只依赖于问题的规模问题的规模(通常用整数(通常用整数量量n n表示),或者说,表示),或者说,它是问题规模的函数是问题规模的函数。 显然,同一个算法用不同的语言实现,或显然,同一个算法用不同的语言实现,或者用不同的编译程序进行编译,或者在不同的者用不同的编译程序进行编译,或者在不同的计算机上运行时,效率均不相同。这表明用绝计算机上运行时,效率均不相同。这表明用绝对的时间单位衡量算法的效率是不合适的。撇对的时间单位衡量算法的效率是不合适的。撇开这些与计算机硬件、软件有关的因素,可以开这些与计算机硬件、软件有关的因
44、素,可以认为:认为:74 假如,随着问题规模 n 的增长,算法执行算法执行时间的增长率和时间的增长率和f(n)的增长率相同的增长率相同,则T(n)=O(f(n)称称T(n)为算法的为算法的(渐近)时间复杂度。时间复杂度。 一般情况下,算法中基本操作一般情况下,算法中基本操作重复执行重复执行的次数的次数是问题规模是问题规模n n的某个函数的某个函数f(nf(n), ), 算法的算法的时间量度记作时间量度记作75算法算法 = = 控制结构控制结构 + + 原操作原操作 (顺序、分支、循环)(顺序、分支、循环)(固有数据类型的操作)(固有数据类型的操作)一个算法有控制结构和原操作构成,则算法的时一个
45、算法有控制结构和原操作构成,则算法的时间取决于两者的综合效果。间取决于两者的综合效果。为了便于比较同一问题的不同算法,通常的做法是,为了便于比较同一问题的不同算法,通常的做法是,从算法中选取一种对于所研究的问题(或算法类型)从算法中选取一种对于所研究的问题(或算法类型)来说是来说是基本操作基本操作的原操作,的原操作,以该基本操作重复执行的以该基本操作重复执行的次数作为算法的时间度量。次数作为算法的时间度量。76算法的执行时间算法的执行时间 =原操作原操作(i)(i)的执行次数的执行次数原操作原操作(i)(i)的执行时间的执行时间 算法的执行时间算法的执行时间 与与 原操作执行次数之和原操作执行
46、次数之和 成正比成正比 77 从算法中选取一种对于所研究的问题来说是 基本操作基本操作 的原操作,以该基本操作 在算法中重复执行的次数在算法中重复执行的次数 作为算法运行时间的衡量准则。 语句重复执行的次数重复执行的次数称为语句的频度频度。 由于算法的时间复杂度时间复杂度考虑的只是是对于问题规模规模n n的增长率增长率,则在难以精确计算基本操作执行次数(或语句频度)的情况下,只需求出它关于n的增长率或阶或阶即可。78例:例: +x; for (i=1;i=n;i+) +x;O(1) 常量阶常量阶 for (i=1;i=n;i+) for (j=1;j=n;j+) +x;O(n) 线性阶线性阶还
47、可能呈现的时间复杂度有:对数阶还可能呈现的时间复杂度有:对数阶O(log n)、指数指数阶阶O(2n)等。等。O(n2) 平方阶平方阶79例例一一两两个个矩矩阵阵相相乘乘voidmult(int a, int b, int c ) for (i=1; in; i +) for (j=1; jn; j +) ci,j = 0; for (k=1; k1 &change; -i)/ bubble_sort基本操作:赋值赋值操作时间复杂度: O(n2) change = FALSE; /change为元素进行交换标志为元素进行交换标志 for (j=0; j aj+1) aj aj+1; chang
48、e = TRUE ;/ 一趟起泡82四、算法的存储空间需求四、算法的存储空间需求算法的空间复杂度定义为算法的空间复杂度定义为: :表示随着问题规模表示随着问题规模n的增大,算法的增大,算法运行所需存储量的增长率与运行所需存储量的增长率与f(n)的增的增长率相同。长率相同。S(n)=O(f(n)83算法的存储量算法的存储量包括:1输入数据输入数据所占空间2程序本身程序本身所占空间3辅助变量辅助变量所占空间84 若输入数据输入数据所占空间只取决于问题 本身,和算法无关和算法无关,则只需要分析除 输入和程序之外的辅助变量辅助变量所占额外额外空间空间。若所需存储量依赖于特定的输入,若所需存储量依赖于特
49、定的输入,则通常按则通常按最坏情况最坏情况考虑。考虑。85五、算法的描述五、算法的描述描述一个算法可以采用不同的方法,常用的有:描述一个算法可以采用不同的方法,常用的有: 自然语言自然语言 流程图及改进的流程图流程图及改进的流程图 伪代码伪代码 N-SN-S结构流程图结构流程图 PADPAD图图 本课程采用介于伪码和本课程采用介于伪码和C C语言之间的语言之间的类类C C语言语言,有时也用伪码,有时也用伪码描述一些只含抽象操作的抽象算法;这使得描述一些只含抽象操作的抽象算法;这使得数据结构和算法数据结构和算法的描述和讨论简明清晰,不拘泥于的描述和讨论简明清晰,不拘泥于C C语言的细节,又语言的
50、细节,又能容易能容易转换成转换成C C或或C+C+程序程序。86六、算法的评价六、算法的评价1、执行算法所耗费的时间,即执行算法所耗费的时间,即时间复杂度时间复杂度。 T(n)=O(f(n)2、执行算法所耗费的存储空间,其中主要考虑辅执行算法所耗费的存储空间,其中主要考虑辅助存储空间的大小,即助存储空间的大小,即空间复杂度空间复杂度。记作记作S(n)=O(f(n)其中,其中,n为问题的规模(或大小)。为问题的规模(或大小)。3、算法是否易读、是否容易转换成任何其它可运、算法是否易读、是否容易转换成任何其它可运行的语言编制的程序以及是否易被测试等等。行的语言编制的程序以及是否易被测试等等。951
51、. 熟悉各名词、术语的含义,掌握基本概念。2. 理解算法五个要素的确切含义。本章学习要点本章学习要点3. 掌握计算语句频度和估算算法时间复杂度的方法。96习题:习题:1.51.81.101.121.5试画出与下列程序段等价的框图。试画出与下列程序段等价的框图。product=1;i=1; ;while(i=n)product*=i;i+;i=0;doi+;while(i!=n)&(ai!=x);(1)(2)(3)Switchcasexy:z=y-x;break;casex=y:z=abs(x*y);break;default:z=(x-y)/abs(x)*abs(y);971.8 1.8 设设
52、n n为正整数,试确定下列程序段中前置以记为正整数,试确定下列程序段中前置以记号号的语句的频度的语句的频度(1)i=1;k=0;while(i=n-1)k+=10*i;i+;(2)i=1;k=0;dok+=10*i;i+;while(i=n-1);(3)i=1;k=0;while(i=n-1)i+;k+=10*i;(4)k=0;for(i=1;i=n;i+)for(j=i;j=n;j+)k+;98(5)for(i=1;i=n;i+)for(j=1;j=i;j+)for(k=1;k=j;k+)x+=delta;(6)i=1;j=0;while(i+jj)j+;elsei+;(7)x=n;y=0;
53、/n不小于不小于1 1while(x=(y+1)*(y+1)y+;(8)x=91;y=100;while(y0)if(x100)x-=10;y-;elsex+;991.10按增长率由小至大的顺序排列下列各函数:按增长率由小至大的顺序排列下列各函数:2100,(3/2)n,(2/3)n,(4/3)n,nn,n3/2,n2/3,n!,n,log2n,n/log2n,log22n,log2(log2n),nlog2n,nlog2nn1.12设有以下三个函数设有以下三个函数:f(n)=21n4+n2+1000,g(n)=15n4+500n3,h(n)=5000n3.5+nlogn请判断以下断言正确与否:请判断以下断言正确与否:(1)f(n)是是O(g(n)(2)h(n)是是O(f(n)(3)g(n)是是O(h(n)(4)h(n)是是O(n3.5)(5)h(n)是是O(nlogn)100