算法与数据结构C语言描述(第2版)电子教案-第1章-绪论课件.ppt
《算法与数据结构C语言描述(第2版)电子教案-第1章-绪论课件.ppt》由会员分享,可在线阅读,更多相关《算法与数据结构C语言描述(第2版)电子教案-第1章-绪论课件.ppt(89页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、算法与数据结构C语言描述(第二版)张乃孝高等教育出版社2006年1月“算法数据结构程序算法数据结构程序”程序就是在数据的某些特定的结构和表示的基础上对于算法的描述。算法与数据结构是程序设计中相辅相成、不可分割的两个方面。抽象数据类型抽象数据类型有一定行为(操作)的抽象(数学)类型。抽抽象象出数据类型的使用要求,而把它的具体表示方式和运算的实现细节都隐藏隐藏起来。支持数据类型的实现与使用分离的原则,是一种十分有效的对问题进行抽象与分解的思维工具。是面向对象面向对象技术与方法的主要理论基础。数据结构“数据结构是抽象数据类型的物理抽象数据类型的物理实现实现”。解决:1)如何具体表示抽象数据类型中的数
2、学模型;2)如何具体实现抽象数据类型中操作。学习目的理解数据结构和算法的概念;掌握设计数据结构与算法的主要原理和方法;比较不同数据结构和算法的特点。提高学生使用计算机解决问题的能力。第一章第一章 绪绪 论论本章重点:理解从问题到程序的主要过程;体会抽象数据类型、数据结构和算法在问题求解过程中的作用;了解数据结构的主要概念和分类;了解算法的概念和主要设计、分析方法。1.1从问题到程序用计算机解决(一种)实际问题,就是在计算机中建立一个解决问题的模型。程序是使用程序设计语言精确描述的实现模型,它是问题求解的一个可以在计算机上运行的模型。程序中描述的数据用来表示问题中涉及的对象,程序中描述的过程表示
3、了对于数据的处理算法;通过接受(具体)实际问题的输入,经过程序的运行,便可以得到实际问题的一个解。问题求解(1)分析阶段。弄清用户的需求是什么,设计者根据它进行深入分析,使用规范说明语言(或数学语言等工具)给出系统的需求模型(或数学模型)。问题求解(2)设计阶段设计阶段(本课讨论的重点本课讨论的重点)。建立求解系统的实现模型,重点是算法的设计和数据结构的设计。对于大型的复杂的系统,还包括抽象数据类型或者模块的设计。一般而言,设计过程需要从粗到细,经过多次精化才能完成。问题求解(3)编码阶段。根据设计的要求,采用适当的程序设计语言(C语言、C+语言或Java语言),编写出可执行的程序。问题求解(
4、4)测试和维护。发现和排除在前几个阶段中产生的错误,经测试通过的程序便可投入运行,在运行过程中还可能发现隐含的错误和问题,因此还必须在使用中不断维护和完善。1.1.1问题分析与抽象为了能正确地解决问题,必须首先深刻地理解需要解决的问题。只有在深刻地认识了这个问题以后,才能着手确定这个问题的解决方法。信号灯问题:为这个路口设计一个安全有信号灯问题:为这个路口设计一个安全有效的交通信号灯的管理系统。效的交通信号灯的管理系统。信号灯问题分析分析所有车辆的行驶路线的冲突问题。这个问题可以归结为对车辆的可能行驶方向作某种分组,对分组的要求:使任一个组中各个方向行驶的车辆可以同时安全行驶而不发生碰撞。信号
5、灯问题分析可以确定13个可能通行方向:AB,AC,AD,BA,BC,BD,DA,DB,DC,EA,EB,EC,ED。交叉路口行驶冲突的抽象(不能同时行驶的用线连接)信号灯问题抽象要求将图1.2中的结点分组,使有线相连(互相冲突)的结点不在同一个组里。这个问题的解有许多“可行解可行解”。我们希望能够设计一个最佳(分组数最少)的方案。称作“最优解最优解”。着色问题经典问题把上图中的一个结点理解为一个国家,结点之间的连线看作两国有共同边界,上述问题就变成著名的“着色问题”:即求出(最少)要几种颜色可将图中所有国家着色,使得任意两个相邻的国家颜色都不相同。1.1.2程序的设计与实现一个问题的解决可以有
6、许多办法,由于使用的工具是计算机,所以在选择方法时必须充分考虑到计算机的特点和条件,才能找到比较巧妙的办法,比较快而且准确地计算出需要的结果。选择算法穷举法具体做法:从分为1、2、3组开始考察,逐个列举出所有可能的着色方案,检查这样的分组方案是否满足要求。首先满足要求的分组,自然是问题的最优解。穷举法的分析这类穷举法对结点少的问题(称为“规模小的”问题)还可以用;对规模大的问题,由于求解时间会随着实际问题规模的增长而指数性上升,使计算机无法承受。贪心法贪心法先用一种颜色给尽可能多的结点上色;然后用另一种颜色在未着色结点中给尽可能多的结点上色;如此反复直到所有结点都着色为止。贪心法的一个解(1)
7、红色:ABACADBADCED(2)蓝色:BCBDEA(3)绿色:DADB(4)白色:EBEC抽象数据类型的选择为了便于给出上述算法的实现,可以按照抽象数据类型的观点,先把被处理的对象加以抽象。在着色问题中具体解决:使用什么抽象数据类型来表示地图,以及使用什么样的抽象数据类型表示一组国家等。抽象数据类型的选择使用一个图图(图是图论图论研究的对象,也是一种重要的抽象数据类型。)表示地图。使用国名(图中结点名)的集合集合表示国家的分组。假设需要着色的图是G,G中所有结点的集合记为G.V,集合V1存放图中所有未被着色的结点,集合NEW存放可以用某颜色着色的所有结点。贪心法的描述贪心法的描述从V1中找
8、出可用新颜色着色的结点集的工作可以用下面的伪码描述:置NEW为空集合;for每个vV1doifv与NEW中所有结点间都没有边从V1中去掉v;将v加入NEW;这个伪码如果能执行,集合NEW中就得到一组可以用新颜色着色的结点。着色程序可以反复调用这段伪码,直到V1为空,每次调用选择一种新颜色,这段伪码执行的次数就是需要的不同颜色个数。假设(ADT)集合和图支持下面行为:判断元素v是否属于集合V1表示为vV1;从集合V1中去掉一个元素v表示为remove(V1,v);向集合NEW里增加一个元素v用add(NEW,v)表示,判断集合V1是否空集合表示为isEmpty(V1)检查结点v与结点集合NEW中
9、各结点之间在图G中是否有边连接,用函数notAdjacentWith(NEW,v,G)表示。抽象的抽象的着色算法着色算法intcolorUp(GraphG)intcolor=0;/记录使用的颜色数setV1=G.V;/V1初始化为图G的结点集VsetNEW;while(!isEmpty(V1)NEW=;while(vV1.notAdjacentWith(NEW,v,G)add(NEW,v);remove(V1,v);+color;returncolor;/返回使用的颜色数数据结构的设计如果集合和图是程序设计语言中预定义的类型,则colorUp中用到的remove(V1,v)和add(NEW,v
10、)等就应该是语言中预定义的内部函数,该程序就几乎可以直接上机运行。否则程序员需要自己用语言所提供的(类型)机制实现这些抽象数据类型(集合、图等),这些正是数据结构设计要讨论的内容。算法的精化在数据结构确定以后,算法的描述可以进一步根据设计的数据结构进行精化。如果这个问题仍然是个比较复杂的问题,就还需要选择算法,也可能存在需要新抽象数据类型和数据结构。经过这种反复的精化过程,最后将算法中所有部分都细化为能用程序设计语言描述的成分,得到的就是我们希望的程序。1.2抽象数据类型抽抽象象数数据据类类型型的的概概念念最最早早出出现现在在20世世纪纪70年年代代,它它是是面面向向对对象象方方法法的的重重要
11、要理理论论基础。基础。本本书书在在内内容容的的组组织织中中仅仅仅仅使使用用了了抽抽象象数数据据类类型型的的概概念念,而而没没有有严严格格采采用用面面向向对对象象的的程程序序设设计计语语言言的的描描述述机机制制(例例如如class)。)。基本概念类型类型(type)是一组值(或者对象)的集合。例如:布尔作为一种类型是由真(true)和假(false)两个值组成的集合;布尔向量也可以作为一种类型,它的每个值是一个由true或false构成的向量。基本概念数据类型数据类型(datatype)通常是指在计算机(语言)中可以使用的一个类型,它不但包括这个类型的值的集合,还包括定义在这个类型上的一组操作。
12、例如:整数作为一个数据类型是指在计算机上所能表示的(不是数学意义上任意大小的)所有整数和语言中定义的对于这些整数的全部操作(整数的加、减、乘、除、取余等)。基本概念抽象数据类型抽象数据类型抽象数据类型(AbstractDataType简称为ADT)可以定义作具有一定行为(操作)的抽象(数学)类型。它不关心不关心类型中值的具体表示方式和数据类型中定义的各种操作的具体实现方法,是所有可能的值的具体表示和各种操作的具体实现的抽象抽象。意义和作用(1)抽象数据类型的实质是抽象抽象出了数据类型的使用要求,而把它的具体表示方式和运算的实现细节都隐藏隐藏起来。抽象数据类型仅仅规定了数据类型应该具有的行为(操
13、作)。一旦抽象数据类型被正确实现,就好像程序设计语言中所提供的数据类型那样,可以被自由使用。意义和作用(2)抽象数据类型支持数据类型的实现与使实现与使用分离的原则用分离的原则,允许独立地考虑数据类型的外部接口和内部的实现。这使应用程序只要按抽象数据类型的接口统一其使用界面;可以不管其是否已经实现,也不管它是如何实现的。对于系统的分解、设计、维护和修改均十分有利。例1抽象数据类型圆 ADTCircleisoperationsarea计算圆的面积circumference计算圆的周长getRadius获取圆的半径setRadius设置圆的半径end ADTCircle例2集合抽象数据类型ADTSe
14、tisOperationsisEmpty判断集合是否是空集合add给集合增加一个元素remove删除集合中的一个元素isIn判断一个元素是否在当前集合中endADTSet1.3数据结构关于数据结构的研究,可以追溯到1972年C.A.R.Hoare奠基性的论文数据结构笔记;而现代计算机所大量采用的基本数据结构,最早的系统论述应归功于1973年D.E.Knuth的名著计算机程序设计技巧的问世。为了学习和研究的方便,计算机科学家把常用的数据进行分类,总结出许多典型的数据结构。1.3.1什么是数据结构(通常)可以把数据结构数据结构理解为:计算机中表示(存储)的、具有一定(逻辑)关系和行为的一组数据。其
15、中的每个数据(元素)称为这个结构的一个结点。结点。(根据面向对象的观点)可以把数据结构理解成(根据面向对象的观点)可以把数据结构理解成为抽象数据类型的物理实现为抽象数据类型的物理实现。主要解决两个问题:如何具体表示抽象数据类型中的数学模型;如何给出抽象数据类型中需要操作的实现。数据结构三要素:逻辑结构逻辑结构:指数学模型中的基本元素(结点)和元素之间的相互关系。存储结构存储结构:指数学模型的具体表示方式,包括结点的表示和关系的表示。操操 作作:指抽象数据类型关心的各种行为在存储结构上的具体实现(算法)。例子集合从集合抽象数据类型抽象数据类型的定义出发,将讨论它的实现集合数据结构:数据结构:根据
16、数学数学的概念,集合中的元素是各不相同而且无序的(逻辑结构逻辑结构);将介绍使用顺序表、单链表、散列表等等许多不同的集合表示方法(存储结构存储结构);并且在这些不同的表示基础上,给出各自的行为实现算法(操作操作)。1.3.2数据结构的分类主要根据逻辑结构主要根据逻辑结构 和存储结构和存储结构进行分类进行分类逻辑结构逻辑结构 B=K是结点的有穷集合,是结点的有穷集合,R是是K上的一个关系。上的一个关系。K上的一个关系就是K上的一些二元组组成的集合K上的二元组是K中元素的有序对.若k,kK,R,则称k为k的前驱,k为k的后继。没有前驱的结点称为开始结点,没有后继的结点称为终端结点。K上不同的二元组
17、集合构成不同的关系。逻辑结构的概念逻辑结构的概念按逻辑结构分类根据R的特点可以将数据结构分为以下三类:线性结构线性结构:K中每个结点最多只有一个前驱和一个后继的结构。树形结构树形结构:K中每个结点最多只有一个前驱,但可有多个后继的结构。复杂结构复杂结构:K中结点的前驱、后继结点个数都不作限制的结构。*集合:它可以看成R为空的情况,即结点之间没有任何关系。按逻辑结构分类举例 线性结构举例线性结构举例 树形结构举例树形结构举例 复杂结构举例复杂结构举例 存储结构的概念存储结构存储结构:数据的逻辑结构在计算机中的存储数据的逻辑结构在计算机中的存储(表示表示)。通常包括结点的表示和关系的表示。同一种逻
18、辑结构,可以采用不同的表示方式。例如,线性表既可以用顺序(一维数组)的方式来表示(顺序表),也可以用链接的方式(使用指针)来表示(单链表或双链表)。存储结构的设计目标,是使用比较少的空间记录逻辑结构的必要信息,还能够有效实现(抽象数据类型中)要求的操作。根据存储结构分类:顺序表示:用一个连续的空间,顺序存放数据结构中的各个结点。(结点的关系需要另外存储或者隐含其中)链接表示:结点的存放位置是任意的,结点之间的关系通过与结点关联的指针(或者引用)方式显式表达出来。散列表示:又称为关键码地址转换法。即选择适当的散列(杂凑)函数,根据关键码的值将结点映射到给定的存储空间(散列表)中。索引表示:索引与
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 数据结构 语言 描述 电子 教案 绪论 课件
限制150内