有关最短路径的算法.ppt
- 文档编号:2646717
- 上传时间:2022-11-05
- 格式:PPT
- 页数:42
- 大小:325KB
有关最短路径的算法.ppt
《有关最短路径的算法.ppt》由会员分享,可在线阅读,更多相关《有关最短路径的算法.ppt(42页珍藏版)》请在冰豆网上搜索。
HuJunfengHuJunfengHuJunfengHuJunfeng图图最短路径问题2008/05/27HuJunfengHuJunfengHuJunfengHuJunfeng主要内容主要内容生成树的概念(spanningtree)Prim算法Kruskal算法最短路径问题Dijkstra算法Floyd算法拓扑排序2HuJunfengHuJunfengHuJunfengHuJunfeng生成树(支撑树)的概念生成树(支撑树)的概念GraphMatrixgraph=6,0,10,M,M,19,21,10,0,5,M,M,11,M,5,0,M,M,M,M,M,M,0,18,14,19,M,M,18,0,33,21,11,M,14,33,0;012345子图子图+连通连通+无环无环3HuJunfengHuJunfengHuJunfengHuJunfeng无向图中无环的充要条件无向图中无环的充要条件检查每一个连通分枝对于所有连通分枝:
顶点数边的数目=1可以采用周游算法。
算法复杂度:
n0123454HuJunfengHuJunfengHuJunfengHuJunfeng有向图判定无环的方法有向图判定无环的方法环中每个顶点入度、出度都不为0将入度、出度为0的顶点及关联边删除,如果还有顶点留下,则必有环。
0123455HuJunfengHuJunfengHuJunfengHuJunfeng最小生成树最小生成树Minimum-costSpanningTree网络(带权图)的生成树中生成树各边的权值加起来称为生成树的权生成树的权,把权值最小的生成树称为最小生成树。
最小生成树。
(简称为MST)。
等价与许多实际问题:
如:
在n个村庄的救援道路修复问题。
6HuJunfengHuJunfengHuJunfengHuJunfengG=(V,E)是一个网络,U是顶点集合V的一个真子集。
如果uU,vV-U,且边(u,v)是图G中所有一个端点在U里,另一端点在V-U里的边中权值最小的边,则一定存在G的一棵最小生成树包括此边(u,v)。
MST性质性质7HuJunfengHuJunfengHuJunfengHuJunfengMST性质证明(反证法)性质证明(反证法)uuvvUV-Uvv边(u,v)是图G中所有一个端点在U里,另一端点在V-U里的边中权值最小的边。
假设:
存在G的一棵最小生成树不包括此边。
8HuJunfengHuJunfengHuJunfengHuJunfengPrim算法(找算法(找MST)prim算法的基本思想是算法的基本思想是首先从集合V中任取一顶点(例如取顶点v0)放入集合U中这时U=v0,TE=NULL然后在所有一个顶点在集合U里,另一个顶点在集合V-U里的边中,找出权值最小的边(u,v)(uU,vV-U),将边加入TE,并将顶点v加入集合U重复上述操作直到U=V为止。
这时TE中有n-1条边,T=(U,TE)就是G的一棵最小生成树9HuJunfengHuJunfengHuJunfengHuJunfeng最小生成树的构造最小生成树的构造准备工作:
设图采用邻接矩阵表示法表示,用一对顶点的下标(在顶点表中的下标)表示一条边,定义如下在构造最小生成树的过程中定义一个类型为Edge的数组mstEdgemstn-1;其中n为网络中顶点的个数,算法结束时,mst中存放求出的最小生成树的n-1条边。
typedefstructintstart_vex,stop_vex;/*边的起点和终点*/AdjTypeweight;/*边的权*/Edge;10HuJunfengHuJunfengHuJunfengHuJunfeng例子例子已知带权图G及其邻接矩阵如图所示请构造该图的最小生成树033141121330181914180666051165010211910011HuJunfengHuJunfengHuJunfengHuJunfengn=6,只有顶点v0在最小生成树中。
mst5=0,1,10,0,2,0,3,0,4,19,0,5,21在mst0到mst4中找出权值最小的边mst0,即(v0,v1),将顶点v1及边(v0,v1)加入最小生成树。
03314112133018191418066605116501021191001n-112HuJunfengHuJunfengHuJunfengHuJunfengn=6,只有顶点v0在最小生成树中。
mst5=0,1,10,0,2,0,3,0,4,19,0,5,21在mst0到mst4中找出权值最小的边mst0,即(v0,v1),将顶点v1及边(v0,v1)加入最小生成树。
调整:
mst5=0,1,10,1,2,5,1,3,6,0,4,19,1,5,1103314112133018191418066605116501021191002n-213HuJunfengHuJunfengHuJunfengHuJunfengmst5=0,1,10,1,2,5,1,3,6,3,4,18,1,5,11mst5=0,1,10,1,2,5,1,3,6,3,4,18,1,5,1103314112133018191418066605116501021191003n-314HuJunfengHuJunfengHuJunfengHuJunfengmst5=0,1,10,1,2,5,1,3,6,1,5,11,3,4,1815HuJunfengHuJunfengHuJunfengHuJunfengPrim算法算法时间复杂度时间复杂度Prim算法的时间主要花费在选择最小生成树的n-1条边上。
外循环执行n-1次,内循环两个,时间耗费为:
整个算法的时间复杂度为O(n2)16HuJunfengHuJunfengHuJunfengHuJunfengKruskal算法设G=(V,E)是网络,最小生成树的初始状态为只有n个顶点而无边的非连通图T=(V,),T中每个顶点自成为一个连通分量。
将集合E中的边按权递增顺序排列,从小到大从小到大依次选择顶点分别在两个连通分量中的边加入图T,则原来的两个连通分量由于该边的连接而成为一个连通分量。
依次类推,直到T中所有顶点都在同一个连通分量上为止,该连通分量就是G的一棵最小生成树。
17HuJunfengHuJunfengHuJunfengHuJunfeng例例题用用Kruskal方法构造方法构造图的最小生成的最小生成树集合E中的边按权递增顺序排列为(v1,v2),(v1,v3),(v2,v3),(v0,v1),(v1,v5),(v3,v5),(v3,v4),(v0,v4),(v0,v5),(v4,v5)18HuJunfengHuJunfengHuJunfengHuJunfeng初始时,T为只有6个顶点的非连通图。
边(v1,v2)的两个顶点v1,v2分别属于两个连通分量,将边(v1,v2)加入T。
同理,将边(v1,v3)加入T。
由于边(v2,v3)的两个顶点v2,v3属于同一个连通分量,因此,舍去这条边。
同理将边(v0,v1)、(v1,v5)加入T,边(v3,v5)舍去,边(v3,v4)加入T。
这时T中含的边数为5条,成为一个连通分量,T就是G的一棵最小生成树。
19HuJunfengHuJunfengHuJunfengHuJunfeng20HuJunfengHuJunfengHuJunfengHuJunfeng算法框架算法框架T=(V,)while(T中所含边数distmin.length+G.arcsmini则将顶点vi的距离值改为distmin.length+G.arcsmini并修改路径上vi的前趋顶点:
disti.prevex=min28HuJunfengHuJunfengHuJunfengHuJunfeng例子例子:
初始状态V=v0结果distn为0,0,50,0,10,0,MAX,-1,45,0,MAX,-129HuJunfengHuJunfengHuJunfengHuJunfeng在集合V-U中找出距离值最小的顶点v2,将顶点v2加入集合U中。
原:
distn为0,0,50,0,10,0,MAX,-1,45,0,MAX,-1后:
distn为0,0,50,0,10,0,25,2,45,0,MAX,-130HuJunfengHuJunfengHuJunfengHuJunfeng(接)同理在集合V-U中找出当前距离值最小的顶点v3,并调整集合V-U中顶点的距离值。
原:
distn为0,0,50,0,10,0,25,2,45,0,MAX,-1后:
distn为0,0,45,3,10,0,25,2,45,0,MAX,-131HuJunfengHuJunfengHuJunfengHuJunfeng最后:
最后:
在集合V-U中找出当前距离值最小的顶点v4。
并调整集合V-U中顶点的距离值。
结果distn为0,0,45,3,10,0,25,2,45,0,MAX,-1没有可以再加入集合U的顶点了,说明从顶点v0到顶点v5之间无路径相通。
过程结束。
32HuJunfengHuJunfengHuJunfengHuJunfeng算法分析算法分析算法中的初始化部分的时间复杂度为O(n),求最短路径部分由一个大循环组成,其中外循环运行n-1次,内循环为两个,均运行n-1次,因此,算法的时间复杂度为O(n2)。
另外需要注意,在算法中改变了关系矩阵中的初始状态,如果要求算法不能破坏原始数据,就需要另外增加数据结构记录集合的值。
空间代价是()33HuJunfengHuJunfengHuJunfengHuJunfengFloydFloyd算法算法AllpairsShortestPaths基本思想:
图采用邻接矩阵作为存储结构。
把关系矩阵看成是没有经过任何中间结点,直接可以到达的每一对顶点间的最短路径的完整表示,然后经过多次迭代,每次增加一个新的结点,在允许这个结点作为中间结点的条件下,计算每一对顶点间的最短路径的缩短变化,直到把所有结点都考虑进去为止,结果得到每一对顶点间的最短路径。
34HuJunfengHuJunfengHuJunfengHuJunfeng拓扑排序AOEAOE网网如果在带权的有向图中,用顶点表示事件,用有向边表示活动,边上的权值表示活动的开销,则此带权的有向图称为边活活动网网(Activityonedgenetwork),简称AOE网网。
顶点所表示的事件,实际上就是它的入边所表示的活动都已完成,它的出边所表示的活动可以开始这样一种状态。
35HuJunfengHuJunfengHuJunfengHuJunfeng拓扑排序拓扑排序对于一个AOV网,如果图中所有顶点可以排成一个线性序列vi1,vi2,vin,并且该线性序列具有以下性质如果在AOV网中,从顶点vi到顶点vj存在一条路径,则在线性序列中,顶点vi一定排在顶点vj之前。
就把这种序列称为拓扑序列拓扑序列,把构造拓扑序列的操作称为拓扑排序拓扑排序。
一个AOV网的拓扑序列不一定存在。
一个AOV网的拓扑序列不是唯一的。
36HuJunfengHuJunfengHuJunfengHuJunfeng拓扑排序思想拓扑排序思想
(1)从AOV网中选择一个入度为0的顶点将其输出。
(2)在AOV网中删除此顶点及其所有的出边。
反复执行以上两步,直到所有顶点都已经输出为止,此时整个拓扑排序完成;或者直到剩下的顶点的入度都不为0为止,此时说明AOV网中存在回路,拓扑排序无法再进行。
37HuJunfengHuJunfengHuJunfengHuJunfeng采用采用邻接出接出边表表示表表示增加一个indegree数组,存放各顶点的入度38HuJ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 有关 路径 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)