数据结构的第八讲精品文稿.ppt
《数据结构的第八讲精品文稿.ppt》由会员分享,可在线阅读,更多相关《数据结构的第八讲精品文稿.ppt(95页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构的第八讲第1页,本讲稿共95页第八讲 图和图的算法第2页,本讲稿共95页主要内容8.1 图的定义图的定义 8.2 图的存储表示图的存储表示8.3 图的第一个应用:拓扑排序图的第一个应用:拓扑排序 8.4 图的搜索图的搜索8.5 最小生成树最小生成树8.6 查找最短路径查找最短路径 第3页,本讲稿共95页8.1 图的定义图的定义第4页,本讲稿共95页5图的定义 n图是由顶点集合(vertex)及顶点间的关系集合组成的一种数据结构:Graph(V,E)n其中:V=vi|vi 某个数据对象是顶点的有穷非空集合;E=(vi,vj)|vi,vj V 或E=|vi,vj V&Path(vi,vj)
2、是顶点之间关系的有穷集合,也叫做边(edge)集合。Path(vi,vj)表示从vi 到vj 的一条单向通路,它是有方向的。0213图是由一组顶点和一组边构成的图是由一组顶点和一组边构成的第5页,本讲稿共95页6图的定义无向图无向图:(vi,vj)=(vj,vi)同一条边同一条边.有向图有向图:=不同边不同边vivjtailhead第6页,本讲稿共95页7图的定义vivjvi 和 vj 是互为邻接顶点;(vi,vj)依附于 vi 和 vj vivjvi 邻接到 vj;vj 邻接自 vi;相关联于 vi and vj 子图子图 G G:V(G)V(G)&E(G)E(G)0123子图子图01301
3、23023第7页,本讲稿共95页8图的定义路径(路径(path):):图中顶点的序列,所有的顶点由边连接在一起。在图G(V,E)中,若从顶点vi 出发,沿一些边经过一些顶点vp1,vp2,vpm,到达顶点vj。则称顶点序列(vi vp1vp2.vpm vj)为从顶点vi 到顶点vj 的路径。它经过的边(vi,vp1)、(vp1,vp2)、.、(vpm,vj)应是属于E的边。第8页,本讲稿共95页9图的定义路径的长度:路径的长度:从路径中第一个顶点到最后一个顶点的边的数量。讨论的图对象的限制讨论的图对象的限制:(1)自身环自身环 不讨论不讨论.(2)与两个特定顶点相关联的边不能多于与两个特定顶点
4、相关联的边不能多于一条,多重图也不讨论。一条,多重图也不讨论。01012第9页,本讲稿共95页10图的定义简单路径:简单路径:若路径上各顶点v1,v2,.,vm 均不互相重复,则称这样的路径为简单路径。回路:回路:若路径上第一个顶点v1与最后一个顶点vm重合,则称这样的路径为回路或环(loop)。环的长度为环的长度为 0。在有向图中路径至少为1以便于初始定点也是结束定点。在有向图中,边可能是相同的,但是在无向图中,边必须是不同的。第10页,本讲稿共95页11图的定义权权:某些图的边边具有与它相关的数值,称之为权。这种带权图叫做网络网络。代价:代价:顶点顶点还可以有权值,被称为代价。第11页,本
5、讲稿共95页12图的定义顶点顶点v 的入度:的入度:以v 为终点的有向边有向边的条数,记作ID(v)。顶点顶点 v 的出度:的出度:以v 为始点的有向边有向边的条数,记作OD(v)。顶点的度:顶点的度:一个顶点v的度是与它相关联的边的条数,记作TD(v)。在在有向图有向图中中,顶点的度等于该顶点的入度与顶点的度等于该顶点的入度与出度之和出度之和。第12页,本讲稿共95页13图的定义vID(v)=3OD(v)=1 TD(v)=4注意注意 图 G有 n 个顶点和 e条边,那么第13页,本讲稿共95页14图的定义路径长度:路径长度:非带权图非带权图的路径长度是指此路径上边的条数。带权图带权图的路径长
6、度是指路径上各边的权之和。ABECF从从A到到F长度为长度为 3 的路径的路径A,B,C,F第14页,本讲稿共95页15图的定义连通图与连通分量:连通图与连通分量:在无向图中,若从顶点v1到顶点v2有路径,则称顶点顶点v1与与v2是连通的是连通的。如果图中任意一对顶点都是连通的,则称此图是连通图连通图。非连通图的极大连通子图叫做连通分量连通分量。强连通图与强连通分量:强连通图与强连通分量:在有向图中,若对于每一对顶点vi和vj,都存在一条从vi到vj和从vj到vi的路径,则称此图是强连通图强连通图。非强连通图的极大强连通子图叫做强连通分量强连通分量。第15页,本讲稿共95页16图的定义无向图,
7、无向图,若图中任意两若图中任意两个顶点之间都有路径相个顶点之间都有路径相通,则称此图为通,则称此图为连通图连通图;若无向图为非连通图,若无向图为非连通图,则图中各个极大连通子则图中各个极大连通子图称作此图的图称作此图的连通分量连通分量。BACDFEBACDFE第16页,本讲稿共95页17图的定义有向图,有向图,若任意两个顶点之间都存在一条有向路若任意两个顶点之间都存在一条有向路径,则称此有向图为径,则称此有向图为强连通图强连通图。否则,其各个强否则,其各个强连通子图称作它的连通子图称作它的强连通分量强连通分量。ABECFABECF第17页,本讲稿共95页18图的定义 如果存在从任意顶点到其他任
8、意顶点的路如果存在从任意顶点到其他任意顶点的路径,就认为无向图是连通的(径,就认为无向图是连通的(connected)在有向图中,这个条件被称为是强连通(在有向图中,这个条件被称为是强连通(strongly connected)如果有向图不是强连通的,但是又认为连通如果有向图不是强连通的,但是又认为连通了,这就被称为弱连通(了,这就被称为弱连通(weakly connected)第18页,本讲稿共95页19图的定义完全图完全图:边数最大的图边数最大的图02130213每组顶点之间都有边每组顶点之间都有边 第19页,本讲稿共95页20图的定义生成树:生成树:一个连通图的生成树是其极小连通子图。在
9、在n个顶点的情形下,有个顶点的情形下,有n-1条边。条边。假设一个连通图有n个顶点和e条边,其中n-1条边和n个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树连通图的生成树。在极小连通子图中增加一条边,则一定有环。在极小连通子图中增加一条边,则一定有环。在极小连通子图中去掉一条边,则成为非连通在极小连通子图中去掉一条边,则成为非连通图图。第20页,本讲稿共95页21图的定义有有n个顶点,个顶点,n-1条边的图必定是生成树吗?条边的图必定是生成树吗?对非连通图,则称由各个连通分量的生成对非连通图,则称由各个连通分量的生成树的集合为此非连通图的树的集合为此非连通图的生成森林生成森林。
10、BACDFEBACDFE第21页,本讲稿共95页主要内容8.1 图的定义图的定义 8.2 图的存储表示图的存储表示8.3 图的第一个应用:拓扑排序图的第一个应用:拓扑排序 8.4 图的搜索图的搜索8.5 最小生成树最小生成树8.6 查找最短路径查找最短路径 第22页,本讲稿共95页8.2 图的存储表示图的存储表示第23页,本讲稿共95页24邻接矩阵(Adjacency Matrix)n在图的邻接矩阵表示中,有一个记录各个顶点信息的顶点表,还有一个表示各个顶点之间关系的邻接矩阵。n设图A=(V,E)是一个有n 个顶点的图,图的邻接矩阵是一个二维数组A.edgenn,n定义:第24页,本讲稿共95
11、页25邻接矩阵举例0123G101230123分析1:无向图的邻接矩阵是对称的;无向图的邻接矩阵是对称的;分析2:顶点顶点i 的度第的度第 i 行行(列列)中中1 的个数;的个数;特别:完全图的邻接矩阵中,对角元素为完全图的邻接矩阵中,对角元素为0,其余全,其余全1。第25页,本讲稿共95页26邻接矩阵举例012G2012012注:在有向图的邻接矩阵中,第i行含义:以结点vi为尾的弧(即出度边);第j列含义:以结点vj为头的弧(即入度边)。第26页,本讲稿共95页27邻接矩阵举例分析1:有向图的邻接矩阵可能是不对称的分析2:顶点的出度=第i行元素之和 顶点的入度=第i列元素之和 顶点的度=第i
12、行元素之和+第i列元素之和 第27页,本讲稿共95页28网络(带权图)的邻接矩阵186329542031第28页,本讲稿共95页29顶点的表示n要开始构造Graph类的第一步是构造存储图内顶点的Vertex类。n这个类与LinkedList类和BinarySearchTree类中的Node类具有相同的功效。nVertex类需要两个数据成员:q一个用来识别顶点数据一个用来识别顶点数据q一个布尔型成员则用来跟踪顶点的一个布尔型成员则用来跟踪顶点的“访问访问”第29页,本讲稿共95页30顶点的表示n这两种数据成员分别命名为LabelwasVisitedn此类需要的唯一方法就是允许设置数据成员labe
13、l和wasVisited的构造器方法。n在这个实现中将不使用默认的构造器,这是因为每次开始引用顶点对象时都会进行一次实例化操作。n顶点列表会存储在数组内,而且在Graph类中会通过它们在数组内的位置对其进行引用。第30页,本讲稿共95页31边的表示n边描述了图的结构,所以关于图的真实信息是存储在边内的。n选择用来表示图中边的方法称为是邻接矩阵邻接矩阵。n邻接矩阵是一个二维数组,数组内的元素表示了两个顶点之间是否存在边。n把顶点作为矩阵内行和列的标头罗列出来。q如果在两个顶点之间存在一条边,那么就把1放在这个位置上。q如果边不存在,那么就赋值为0。很显然这里也可以使用布尔型的数值。第31页,本讲
14、稿共95页32图的构造n有了表示顶点和边的方法,接下来就准备构造图了。n首先,需要建立一个图中顶点的列表。n最后,需要添加连接顶点的边。第32页,本讲稿共95页33Graph类的初步定义n构造器方法重新构建了顶点数组和在常量NUM-VERTICES中指定数值的邻接矩阵。n既然数组是基于零的,所以数据成员numVerts存储着顶点列表内当前的数量以便于把列表初始设置为0。nAddVertex方法会为顶点标签取走一个字符串参数,实例化一个新的Vertex对象,并且把它添加到顶点数组内。nAddEdge方法则会取走两个整型值参数。这些整数表示顶点,并且说明在它们之间存在一条边。nshowVertex
15、方法会显示出指定顶点的标签。第33页,本讲稿共95页34邻接表(Adjacency List)n邻接表邻接表:是图的一种链式存储结构。是图的一种链式存储结构。n边的结点结构边的结点结构adjvex;/该边所指向的顶点的位置该边所指向的顶点的位置nextarc;/指向下一条边指针指向下一条边指针info;/该边相关信息的指针该边相关信息的指针第34页,本讲稿共95页35邻接表(Adjacency List)n顶点的结点结构顶点的结点结构data;/顶点信息顶点信息firstarc;/指向第一条依附该顶点的边指向第一条依附该顶点的边adjvex nextarcinfodatafirstarc第35
16、页,本讲稿共95页36无向图的邻接表同一个顶点发出的边链接在同一个边链表中,同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一条边每一个链结点代表一条边(边结点边结点),结点中有另结点中有另一顶点的下标一顶点的下标 dest 和指针和指针 link。ABCDdata adjABCD0123dest link 32dest link 1010第36页,本讲稿共95页37有向图的邻接表和逆邻接表ABC邻接表邻接表(出边表出边表)逆邻接表逆邻接表(入边表入边表)data adjABC012dest linkdest link 102 data adjABC012dest link 011第3
17、7页,本讲稿共95页38网络(带权图)的邻接表BACD69528data adjABCD0123dest cost link 1 53 62 83 21 9(出边表出边表)(顶点表顶点表)第38页,本讲稿共95页39邻接表存储法的特点n它其实是对邻接矩阵法的一种改进它其实是对邻接矩阵法的一种改进n分析1:q对于n个顶点e条边的无向图,邻接表中除了n个头结点外,只有2e个表结点,空间效率为O(n+2e)。q若是稀疏图(en2),则比邻接矩阵表示法O(n2)省空间。n分析2:q在有向图中,邻接表中除了n个头结点外,只有e个表结点,空间效率为O(n+e)。q若是稀疏图,则比邻接矩阵表示法合适。第39
18、页,本讲稿共95页40邻接表度的计算怎样计算无向图顶点的度?TD(Vi)=单链表中链接的结点个数怎样计算有向图顶点的出度?怎样计算有向图顶点的入度?怎样计算有向图顶点Vi的度:OD(Vi)单链出边表中链接的结点数I D(Vi)邻接点为Vi的边个数TD(Vi)=OD(Vi)+I D(Vi)第40页,本讲稿共95页41邻接表的优缺点邻接表的缺点:邻接表的缺点:邻接表的优点:邻接表的优点:空间效率高;容易寻找顶点的邻接点;空间效率高;容易寻找顶点的邻接点;判断两顶点间是否有边或弧,需搜索两结判断两顶点间是否有边或弧,需搜索两结点对应的单链表,没有邻接矩阵方便。点对应的单链表,没有邻接矩阵方便。第41
19、页,本讲稿共95页42邻接表与邻接矩阵有什么异同之处1.联系:联系:邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。2.区别:区别:对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。号一致),但邻接表不唯一(链接次序与顶点编号无关)。邻接矩阵的空间复杂度为邻接矩阵的空间复杂度为O(n2),而邻接表的空间复杂度为而邻接表的空间复杂度为O(n+e)。3.用途:用途:邻接矩阵多用于稠密图的存储(邻接矩阵多用于稠密图的存储(e接近接近n(n-1)/2);邻接表多
20、用于稀疏图的存储(邻接表多用于稀疏图的存储(en2)第42页,本讲稿共95页主要内容8.1 图的定义图的定义 8.2 图的存储表示图的存储表示8.3 图的第一个应用:拓扑排序图的第一个应用:拓扑排序 8.4 图的搜索图的搜索8.5 最小生成树最小生成树8.6 查找最短路径查找最短路径 第43页,本讲稿共95页8.3 图的第一个应用:拓扑排序图的第一个应用:拓扑排序第44页,本讲稿共95页45活动网络(Activity Network)n计划、施工过程、生产流程、程序流程等都是计划、施工过程、生产流程、程序流程等都是“工程工程”。除了很小的工程外,一般都把工程。除了很小的工程外,一般都把工程分为
21、若干个叫做分为若干个叫做“活动活动”的子工程。完成了这的子工程。完成了这些活动,这个工程就可以完成了。些活动,这个工程就可以完成了。n例如,计算机专业学生的学习就是一个工程,例如,计算机专业学生的学习就是一个工程,每一门课程的学习就是整个工程的一些活动。每一门课程的学习就是整个工程的一些活动。其中有些课程要求先修课程,有些则不要求。其中有些课程要求先修课程,有些则不要求。这样在有的课程之间有领先关系,有的课程可这样在有的课程之间有领先关系,有的课程可以并行地学习。以并行地学习。用顶点表示活动的网络用顶点表示活动的网络(AOV网络网络)第45页,本讲稿共95页46举例 C1 高等数学高等数学 C
22、2 程序设计基础程序设计基础 C3 离散数学离散数学 C1,C2 C4 数据结构数据结构 C3,C2 C5 高级语言程序设计高级语言程序设计 C2 C6 编译方法编译方法 C5,C4 C7 操作系统操作系统 C4,C9 C8 普通物理普通物理 C1 C9 计算机原理计算机原理 C8 课程代号课程代号 课程名称课程名称 先修课程先修课程第46页,本讲稿共95页47建图学生课程学习工程图学生课程学习工程图C8C3C5C4C9C6C7C1C2第47页,本讲稿共95页48AOV网络n用有向图表示一个工程。在这种有向图中,用顶点表示活动,用有向边表示活动Vi必须先于活动Vj进行。这种有向图叫做顶点表示活
23、动的AOV网络(ActivityOnVertices)。n在AOV网络中不能出现有向回路,即有向环。n如果出现了有向环,则意味着某项活动应以自己作为先决条件。n对给定的AOV网络,必须先判断它是否存在有向环。第48页,本讲稿共95页49拓扑排序n检测有向环的一种方法是对检测有向环的一种方法是对AOV网络构造它的网络构造它的拓扑有序序列。即将各个顶点拓扑有序序列。即将各个顶点(代表各个活动代表各个活动)排列成一个线性有序的序列,使得排列成一个线性有序的序列,使得AOV网络中网络中所有应存在的前驱和后继关系都能得到满足。所有应存在的前驱和后继关系都能得到满足。n这种构造这种构造AOV网络全部顶点的
24、拓扑有序序列的网络全部顶点的拓扑有序序列的运算就叫做拓扑排序。运算就叫做拓扑排序。n如果通过拓扑排序能将如果通过拓扑排序能将AOV网络的所有顶点都网络的所有顶点都排入一个拓扑有序的序列中排入一个拓扑有序的序列中,则该网络中必定不则该网络中必定不会出现有向环。会出现有向环。第49页,本讲稿共95页50拓扑排序n如果如果AOV网络中存在有向环,此网络中存在有向环,此AOV网络所网络所代表的工程是不可行的。代表的工程是不可行的。n例如例如,对学生选课工程图进行拓扑排序对学生选课工程图进行拓扑排序,得到得到的拓扑有序序列为的拓扑有序序列为 C1,C2,C3,C4,C5,C6,C8,C9,C7或或 C1
25、,C8,C9,C2,C5,C3,C4,C7,C6C8C3C5C4C9C6C7C1C2第50页,本讲稿共95页51拓扑排序的方法 输入输入AOV网络。令网络。令 n 为顶点个数。为顶点个数。在在AOV网络中选一个没有直接前驱的顶点网络中选一个没有直接前驱的顶点,并输并输出之出之;从图中删去该顶点从图中删去该顶点,同时删去所有它发出的有向同时删去所有它发出的有向边边;重复以上重复以上、步步,直到直到q 全部顶点均已输出,拓扑有序序列形成,拓扑排全部顶点均已输出,拓扑有序序列形成,拓扑排序完成;或序完成;或q 图中还有未输出的顶点图中还有未输出的顶点,但已跳出处理循环。说但已跳出处理循环。说明图中还
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第八 精品 文稿
限制150内