《图的基本算法》PPT课件.ppt
《《图的基本算法》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《图的基本算法》PPT课件.ppt(57页珍藏版)》请在三一办公上搜索。
1、图的基本算法,Company Logo,图的一些基本概念及其表示,Contents,拓扑排序和欧拉回路问题,最小生成树和单源最短路问题,二分图匹配,1,2,3,4,Company Logo,定义与术语,图:二元组 称为图(graph)。V为结点(node)点(vertex)集。E为中结点之间的边的集合。子图:什么是子图如果有两个图G和G,G的顶点集是G的顶点集的子集,且G的边集点对(u,v)称为边(edge)或称弧(arc),其中 u,v属于V,称 u,v 是相邻的(adjacent),称u,v与边 相关联(incident)。连通图:如果图中任意一对顶点都有路径存在,则称该图为连通的,Com
2、pany Logo,定义与术语,若边的点对(u,v)有序则称为有向(directed)边,其中u称为头(head),v称为尾(tail)。所形成的图称有向图(directed graph)。为对于u来说 是出边(outgoing arc);对于v来说 是入边(incoming arc)。反之,若边的点对无序则称为无向(undirected)边,所形成的图称无向图(undirected graph)。,Company Logo,定义与术语,度(degree):一个顶点的度是指与该边相关联的边的条数,顶点v的度记作deg(v)。无向图:有向图:入度(indegree):在有向图中,一个顶点v的入度
3、是指与该边相关联的入边(即边的尾是v)的条数。出度(outdegree):在有向图中,一个顶点的出度是指与该边相关联的出边(即边的头是v)的条数。路径:如果从一个顶点v1出发,沿着一些边依次经过一些定点v2,v3,vn,则称顶点序列(v1,v2,.,vn)为从顶点v1到vn的路径。回路:如果一条路径上第一个顶点和最后一个顶点是相同的,则称这样的路径为回路或环。,Company Logo,图的表示,要表示一个图G=(V,E),有两种标准的方法,即邻接表和邻接矩阵。这两种方法即可以用于有向图,也可以用于无向图。,用邻接表记录图,Struct Edgeint dest;/记录目的地int value
4、;/边的权值Edge*link;/记录链表的下一个元素;Edge*edge=new Edgen;/申请空间for(int i=0;iuv)/(u,v)表示一条边L=new Edge;L-dest=v;/填写目的地L-link=edgeu;/用新建的这条边指向顶点u指向的链表edgeu=L;/再把L赋给edgeu,Company Logo,遍历邻接表,for(int i=0;idestlink;/取链表的下一个元素,Company Logo,Company Logo,DFS,BFS拓扑排序强连通分支 欧拉路径和回路最小生成树最短路径哈密顿回路(NP)差分约束系统网络流二分图匹配,图论涉及到的问题
5、和算法,Company Logo,今天要讲的问题,最小生成树最短路算法,拓扑排序欧拉回路,二分图的匹配,拓扑排序,拓扑排序是对有向无回路图(DAG)顶点的一种排序,它使得如果存在u,v的有向路径,那么满足序中u在v前。拓扑排序就是由一种偏序(partical order)得到一个全序(称为拓扑有序(topological order)。偏序是满足自反性,反对称性,传递性的序。一个图的拓扑排序得到的结果可以看成是图中所有顶点沿水平线排列而成的序列,而且所有的有向边均是从左指向右在有向无回路图用于说明事件发生的先后顺序拓扑排序可以给出一个满足时间先后的顺序,Company Logo,陈熙大牛穿衣服
6、的例子,Company Logo,拓扑排序算法描述,拓扑排序的思路很简单,就是每次任意找一个入度为0的点输出,并把这个点以及与这个点相关的边删除。实际算法中,用一个队列实现。算法:1.把所有入度=0的点入队Q。2.若队Q非空,则点u出队,输出u;否则转4。3.把所有与点u相关的边(u,v)删除,若此过程中有点v的入度变为0,则把v入队Q,转2。4.若出队点数N,则说明有圈。时间复杂度O(V+E),Company Logo,欧拉回路,欧拉回路,又称“一笔画”,是图论中可行遍性问题的一种欧拉回路问题是图论中最古老的问题之一。它诞生于十八世纪的欧洲古城哥尼斯堡。普瑞格尔河流经这座城市,人们在两岸以及
7、河中间的两个小岛之间建了七座桥。市民们喜欢在这里散步,于是产生了这样一个问题:是否可以找到一种方案,使得人们从自己家里出发,不重复地走遍每一座桥,然后回到家中?这个问题如果用数学语言来描述,就是在右图中找出一条回路,使得它不重复地经过每一条边。这便是著名的“哥尼斯堡七桥问题”。,Company Logo,一些概念及定理,欧拉回路:图G中经过每条边一次并且仅一次的回路称作欧拉回路。欧拉路径:图G中经过每条边一次并且仅一次的路径称作欧拉路径。欧拉图:存在欧拉回路的图称为欧拉图。半欧拉图存在欧拉路径但不存在欧拉回路的图称为半欧拉图。我们经常需要判定一个图是否为欧拉图(或半欧拉图),并且找出一条欧拉回
8、路(或欧拉路径)。对于无向图有如下结论:定理1无向图G为欧拉图,当且仅当G为连通图且所有顶点的度为偶数。,Company Logo,一些概念及定理,推论1无向图 为半欧拉图,当且仅当G为连通图且除了两个顶点的度为奇数之外,其它所有顶点的度为偶数。定理2有向图 为欧拉图,当且仅当G的基图连通,且所有顶点的入度等于出度。推论2有向图 为半欧拉图,当且仅当G的基图连通,且存在顶点 的入度比出度大1、的入度比出度小1,其它所有顶点的入度等于出度。基图:忽略有向图所有边的方向,得到的无向图称为该有向图的基图。,Company Logo,欧拉回路算法描述,由此可以得到以下求欧拉图 的欧拉回路的算法:在图G
9、中任意找一个回路;将图G中属于回路 的边删除;在残留图的各极大连通子图中分别寻找欧拉回路;将各极大连通子图的欧拉回路合并到 中得到图 的欧拉回路。,Company Logo,算法描述,Procedure Euler-circuit();Begin For顶点start的每个邻接点v Do If 边(start,v)未被标记 Then Begin 将边(start,v)作上标记;将边(v,start)作上标记;Euler-circuit(v);将边(start,v)加入栈;End;End;最后依次取出栈S每一条边而得到图G的欧拉回路。由于该算法执行过程中每条边最多访问两次,因此该算法的时间复杂度
10、为 O(E)。,Company Logo,例题,例题一单词游戏题目描述有N个盘子,每个盘子上写着一个仅由小写字母组成的英文单词。你需要给这些盘子安排一个合适的顺序,使得相邻两个盘子中,前一个盘子上面单词的末字母等于后一个盘子上面单词的首字母。请你编写一个程序,判断是否能达到这一要求。如果能,请给出一个合适的顺序。数据规模 N=100000分析通过对题目条件的一些初步分析,我们很容易得到下面的模型。,Company Logo,分析,模型1:以 N个盘子作为顶点;如果盘子A的末字母等于盘子B的首字母,那么从A向B连一条有向边。对于样例我们可以按下图所示的方式构图。这样,问题转化为在图中寻找一条不重
11、复地经过每一个顶点的路径,即哈密尔顿路。然而,求哈密尔顿路是一个十分困难的问题,这样的模型没有给我们的解题带来任何便利。因此,我们必须另辟蹊径。,Company Logo,分析,模型2:经过分析,我们发现模型1的失败之处在于,图中需要遍历的信息也就是每一个盘子表示在顶点上,而顶点的遍历问题不易解决。能否将遍历信息表示在边上呢?考虑如下的构图方法:以26个字母作为顶点;对于每一个盘子,如果它的首字母为c1,末字母为c2,那么从c1向c2连一条有向边。对于样例我们可以按下图所示的方式构图这样,问题转化为在图中寻找一条不重复地经过每一条边的路径,即欧拉路径。这个问题能够在O(E)时间内解决。,Com
12、pany Logo,最小生成树,在电路设计中,常常需要把一些电子元件的插脚用电线连接起来。如果每根电线连接两个插脚,把所有n个插脚连接起来,只要用n-1根电线就可以了。在所有的连接方案中,我们通常对电线总长度最小的连接方案感兴趣。把问题转化为图论模型就是:一个无向连通图G=(V,E),V是插脚的集合,E是插脚两两之间所有可能的连接的集合。给每条边(u,v)一个权值w(u,v),表示连接它们所需的电线长度。我们的目标就是找到一个无环的边集T,连接其中所有的点且使总权值最小。既然T 是连接所有点的无环边集,它一定是一棵树。因为这棵树是从图G中生成出来的,我们把它叫做生成树。如果一棵生成树在所有生成
13、树中总权值最小,我们就把它称作最小生成树。,Company Logo,Kruskal,MST-KRUSKAL(G,w)1.A2.for 每个结点vVG3.do MAKE-SET(v)4.根据权w的非递减顺序对E的边进行排序5.for 每条边(u,v)E,按权的非递减次序6.do if FIND-SET(u)FIND-SET(v)7.then AA(u,v)8.UNION(u,v)9.return A复杂度E*lgE,Company Logo,步骤,Company Logo,步骤,Company Logo,步骤,Company Logo,步骤,Company Logo,Prim算法,Kruska
14、l找出连接任意两棵树的所有边中,具有最小权值的边(u,v),把它添加到正在生长的森林中。Prim的特点它一直维持生成单棵树,而Kruskal生成时可以存在多个树。Prim每次选一个点加入到集合中,直到把所有点都加入到集合中,Company Logo,算法描述,MST-PRIM(G,w,r)1.QVG2.for 每个uQ3.do keyu4.keyr05.rNIL6.while Q7.do uEXTRACT-MIN(Q)返回队列Q中最小的元素8.for 每个vAdju9.do if vQ and w(u,v)keyv10.then vu11.keyvw(u,v),Company Logo,执行过
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图的基本算法 基本 算法 PPT 课件
链接地址:https://www.31ppt.com/p-5484724.html