ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

图的相关应用

2019-06-21 11:55:32  阅读:214  来源: 互联网

标签:权值 路径 最小 生成 算法 应用 顶点 相关


在这里插入图片描述
最小生成树
一个连通图的生成树是图的极小连通子图,它包含图中的所有顶点,并且只含尽可能少的边。
对于生成树来说,若砍去它的一条边,就会使生成树变成非连通图;若给它增加一条边,就会形成图中的一条回路。
对于一个带权连通无向图G = (V,E),生成树不同,每棵树的权也可能不同。
设R为G的所有生成树的集合,若T为R中边的权值之和最小的那棵生成树,则T称为G的最小生成树。

最小生成树具有如下性质:
(1)最小生成树不是唯一的,即最小生成树的树形不唯一。当图G中的各边权值互不相等时,G的最小生成树是唯一的;若无向连通图G的边比顶点数少1,即G本身就是一棵树时,G的最小生成树就是它本身。
(2)最小生成树的边的权值之和总是唯一的,而且是最小的。
(3)最小生成树的边数为顶点数减1.

构造最小生成树算法
假设G=(V,E)是一个带权连通无向图,U是顶点集V的一个非空子集。若(u,v)是一条具有最小权值的边,其中u∈U,v∈V-U,则必存在一棵包含边(u,v)的最小生成树。
最小生成树算法主要有:Prim算法和Kruskal算法。

Prim算法——让小树慢慢长大型算法
按照树的定义,一个顶点就是一棵树。
原理:
(1)我们选择一个顶点,也就是选择了一个树。
(2)向外找权重最小的边,这样这棵树就有了两个顶点。
(3)再以这两个顶点向外找权重最小的边,依次循环,直到所有顶点收到树立。
在这里插入图片描述在这里插入图片描述

Kruskal算法是一种按权值的递增次序选择合适的边来构造最小生成树的方法。
假设N=(V,E)是连通网,对应的最小生成树T = (VT,ET),kruskal算法的步骤:在这里插入图片描述
在这里插入图片描述
------------------------------------------------------------------------------------------------------------------------------

最短路径
带权图把从一个顶点v0到图中其余任一个顶点vi的一条路径(可能不止一条)上经过边上的权值之和定义为该路径的带权路径长度,把带权路径长度最短的那条路径称作最短路径。
带权有向图G的最短路径问题分为两类:一个单源最短路径,即求图中某一顶点到其他各顶点的最短路径,可通过经典的Dijkstra算法求解;二是求每一对顶点间的最短路径,可通过Floyd-Warshall算法来求解。

Dijkstra算法
Dijkstra算法设置一个集合S记录已求得的最短路径的顶点,可用一个数组s[ ]来实现初始化为0,当s[vi] = 1时表示将顶点vi放入S中,初始化时把源点v0放入S中。
辅助数组:
dist[ ]:记录了从源点v0到其他各顶点当前的最短路径长度,dist[i]初值为arcs[v0][i]。
假设从顶点0出发,即v0 = 0,集合S最初只包含顶点0,邻接矩阵arcs表示带权有向图,arcs[i][j]表示有向边<i,j>的权值,若不存在有向边<i,j>,则arcs[i][j]为∞。
Dijkstra算法的步骤如下:
在这里插入图片描述在这里插入图片描述
Floyd算法
已知一个各边权值均大于0的带权有向图,对每一对顶点vi≠vj,要求求出vi与vj之间的最短路径和最短路径长度。
在这里插入图片描述
在这里插入图片描述
------------------------------------------------------------------------------------------------------------------------------

拓扑排序
有向无环图:一个有向图中不存在环,则称为有向无环图,简称DAG图。
AOV网:如果用DAG图表示一个工程,其顶点表示活动,用有向边<Vi,Vj>表示活动Vi必须先于活动Vj进行的这样一种关系,则将这种有向图称为顶点表示活动的网络,记为AOV网。
在AOV网中,活动Vi是活动Vj的直接前驱,活动Vj是活动Vi的直接后继,这种前驱和后继关系具有传递性,且任何活动Vi不能以它自己作为自己的前驱或后继。
拓扑排序:由一个有向无环图的顶点组成的序列,当且仅当满足下列条件时,称为该图的一个拓扑排序。
(1)每个顶点出现且只出现一次
(2)若顶点A在序列中排在顶点B的前面,则在图中不存在从顶点B到顶点A的路径。

DAG图进行拓扑排序步骤:
(1)从DAG图中选择一个没有前驱的顶点并输出
(2)从图中删除该顶点和所有以它为起点的有向边
(3)重复(1)(2)直到当前的DAG图为空或当前图中不存在无前驱的顶点为止。而后一种情况则说明有向图中必然存在环。
在这里插入图片描述用拓扑排序算法处理DAG图时,注意问题:
(1)入度为零的顶点即没有前驱活动的顶点,或前驱活动都已经完成的顶点,工程可以从这个顶点所代表的活动开始或继续。
(2)如果一个顶点有多个直接后继,则拓扑排序的结果通常不唯一;但如果各个顶点已经排在一个线性有序的序列中,每个顶点有唯一的前驱后继关系,再拓扑排序时,则排序的结果是唯一的。
(3)由于DAG图中各顶点的地位平等,每个顶点编号是人为的,因此可以按照拓扑排序的结果重新安排顶点的序号,生成的DAG图有新的邻接矩阵存储表示,这种邻接矩阵可以是三角矩阵;但是对于一般的图,如果它的邻接矩阵是三角矩阵,则存在拓扑排序;反之则不一定成立。

在带权有向图中,以顶点表示事件,有向边表示活动,边上的权值表示完成该活动的开销(如完成活动所需时间),则称这种有向图为用边表示活动的网络,简称AOE网

AOE网性质:
(1)只有在某顶点所代表的事件发生后,从该顶点出发的各有向边所代表的活动才能开始.
(2)只有在进入某一顶点的各有向边所代表的活动都已经结束时,该顶点所代表的事件才能发生。
在AOE网中仅有一个入度为0的顶点,称为开始顶点(源点),它表示整个工程的开始;
也仅存在一个出度为0的顶点,称为结束顶点(汇点),它表示整个工程的结束。
从源点到汇点的所有路径中,具有最大路径长度的路径称为关键路径
把关键路径上的活动称为关键活动

寻找关键活动时参量定义:
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190526112449943.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU4NTIxNA==,size_16,color_FFFFFF,t_70
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20190526112454432.png?,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDU4NTIxNA==,size_16,color_FFFFFF,t_70
求关键路径的算法步骤如下:
(1)求AOE网中所有事件的最早发生时间 ve()。
(2)求AOE网中所有事件的最迟发生时间 vl()。
(3)求AOE网中所有活动的最早开始时间 e()。
(4)求AOE网中所有活动的最迟开始时间 l()。
(5)求AOE网中所有活动的差额 d(),找出所有 d()=0 的活动构成关键路径。
在这里插入图片描述
例:
在这里插入图片描述最小生成树的权值之和最小,故代价一定唯一,I 对。
如果有环并且有边权值相等,就不一定出现在最小生成树中。II 错。
如果有权值相同的边则得到的最小生成树不一定相同。(若权值都不相同则得到的最小生成树是一定相同的)III 错,IV 错。
选D。

标签:权值,路径,最小,生成,算法,应用,顶点,相关
来源: https://blog.csdn.net/weixin_44585214/article/details/90547252

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有