知识大全 图 - 最短路径 (二)

Posted 路径

篇首语:观书散遗帙,探古穷至妙。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 图 - 最短路径 (二)相关的知识,希望对你有一定的参考价值。

  ( )算法基本思想

  设S为最短距离已确定的顶点集(看作红点集) V S是最短距离尚未确定的顶点集(看作蓝点集)

  ①初始化

  初始化时 只有源点s的最短距离是已知的(SD(s)= ) 故红点集S=s 蓝点集为空

  ②重复以下工作 按路径长度递增次序产生各顶点最短路径

  在当前蓝点集中选择一个最短距离最小的蓝点来扩充红点集 以保证算法按路径长度递增的次序产生各顶点的最短路径

  当蓝点集中仅剩下最短距离为∞的蓝点 或者所有蓝点已扩充到红点集时 s到所有顶点的最短路径就求出来了

  注意

  ①若从源点到蓝点的路径不存在 则可假设该蓝点的最短路径是一条长度为无穷大的虚拟路径

  ②从源点s到终点v的最短路径简称为v的最短路径;s到v的最短路径长度简称为v的最短距离 并记为SD(v)

  ( )在蓝点集中选择一个最短距离最小的蓝点k来扩充红点集

  根据按长度递增序产生最短路径的思想 当前最短距离最小的蓝点k的最短路径是

  源点 红点 红点 … 红点n 蓝点k

  距离为 源点到红点n最短距离+<红点n 蓝点k>边长

  为求解方便 设置一个向量D[ n ] 对于每个蓝点v∈ V S 用D[v]记录从源点s到达v且除v外中间不经过任何蓝点(若有

  中间点 则必为红点)的 最短 路径长度(简称估计距离)

  若k是蓝点集中估计距离最小的顶点 则k的估计距离就是最短距离 即若D[k]=minD[i] i∈V S 则D[k]=SD(k)

  初始时 每个蓝点v的D[c]值应为权w 且从s到v的路径上没有中间点 因为该路径仅含一条边

  注意

  在蓝点集中选择一个最短距离最小的蓝点k来扩充红点集是Dijkstra算法的关键

  ( )k扩充红点集s后 蓝点集估计距离的修改

  将k扩充到红点后 剩余蓝点集的估计距离可能由于增加了新红点k而减小 此时必须调整相应蓝点的估计距离

  对于任意的蓝点j 若k由蓝变红后使D[j]变小 则必定是由于存在一条从s到j且包含新红点k的更短路径 P=

  D[j]减小的新路径P只可能是由于路径 和边 组成

  所以 当length(P)=D[k]+w 小于D[j]时 应该用P的长度来修改D[j]的值

  ( )Dijkstra算法

  Dijkstra(G D s)

  //用Dijkstra算法求有向网G的源点s到各顶点的最短路径长度

  //以下是初始化操作

  S=s;D[s]= ; //设置初始的红点集及最短距离

  for( all i∈ V S )do //对蓝点集中每个顶点i

  D[i]=G[s][i]; //设置i初始的估计距离为w

  //以下是扩充红点集

  for(i= ;i

  D[k]=minD[i]:all i V-S; //在当前蓝点集中选估计距离最小的顶点k

  if(D[k]等于∞)

  return; //蓝点集中所有蓝点的估计距离均为∞时,

  //表示这些顶点的最短路径不存在。.wIngwit

  S=S∪k; //将蓝点k涂红后扩充到红点集

  for( all j∈V-S )do //调整剩余蓝点的估计距离

  if(D[j]>D[k]+G[k][j])

  //新红点k使原D[j]值变小时,用新路径的长度修改D[j],

  //使j离s更近。

  D[j]=D[k]+G[k][j];

  

  

  【例】对有向网G 8 以0为源点执行上述算法的过程及红点集、k和D向量的变化见【 参见动画演示 】。

  

>

  6)保存最短路径的Dijkstra算法

  设置记录顶点双亲的向量P[0..n-1]保存最短路径:

  当顶点i无双亲时,令P[i]=-1。

  当算法结束时,可从任一P[i]反复上溯至根(源点)求得顶点i的最短路径,只不过路径方向正好与从s到i的路径相反。

  具体的求精算法【参见教材】 。

  Dijkstra算法的时间复杂度为O(n 2 )

  其他最短路径问题

  最短路径问题的提法很多,其它的最短路径问题均可用单源最短路径算法予以解决:

  ① 单目标最短路径问题 (Single-Destination Shortest-Paths Problem):找出图中每一顶点v到某指定顶点u的最短路

  径。只需将图中每条边反向,就可将这一问题变为单源最短路径问题,单目标u变为单源点u。

  ② 单顶点对间最短路径问题 (Single-Pair Shortest-Path Problem):对于某对顶点u和v,找出从u到v的一条最短路径

  。显然,若解决了以u为源点的单源最短路径问题,则上述问题亦迎刃而解。而且从数量级来说,两问题的时间复杂度相同。

  ③ 所有顶点对间最短路径问题 (All-Pairs Shortest-Paths Problem):对图中每对顶点u和v,找出u到v的最短路径问题

  。这一问题可用每个顶点作为源点调用一次单源最短路径问题算法予以解决。

cha138/Article/program/sjjg/201311/23815

相关参考

知识大全 数据结构考研分类复习真题 第七章 图[7]

  ()求从指定源点到其余各顶点的迪杰斯特拉(Dijkstra)最短路径算法中弧上权不能为负的原因是在实际应用中无意义  ()利用Dijkstra求每一对不同顶点之间的最短路径的算法时间是O(n)(图

知识大全 数据结构考研分类复习真题 第七章 图[63]

  .设计算法求出无向连通图中距离顶点V的最短路径长度(最短路径长度以边数为单位计算)为K的所有的结点要求尽可能地节省时间【西北大学七】  .自由树(即无环连通图)T=(VE)的直径是树中所有点对间最

知识大全 数据结构考研分类复习真题 第七章 图[44]

  .求出下图中顶点到其余各顶点的最短路径【厦门大学八(分)】  .试利用Dijkstra算法求下图中从顶点a到其他个顶点间的最短路径写出执行算法过程中各步的状态【东南大学四(分)】 lis

知识大全 09年自考《数据结构》各章要点二[5]

  构造最小生成树的算法  ·Prim算法的时间复杂度为O(n^)与边数无关适于稠密图  ·Kruskal算法的时间复杂度为O(lge)主要取决于边数较适合于稀疏图  最短路径的算法  ·Dijkst

知识大全 数据结构之最短路径

基本概念  源点(Source)路径的开始顶点  终点(Destination)路径的最后一个顶点  单源最短路径问题(SingleSourceShortestPathsProblem)给定一个带权图

知识大全 数据结构考研分类复习真题 第七章 图[21]

  求从某源点到其余各顶点的Dijkstra算法在图的顶点数为用邻接矩阵表示图时计算时间约为ms则在图的顶点数为计算时间约为______ms【南京理工大学二(分)】  .求最短路径的Dijkstra算

知识大全 贪婪算法之——单源最短路径

  在这个问题中给出有向图G它的每条边都有一个非负的长度(耗费)a[i][j]路径的长度即为此路径所经过的边的长度之和对于给定的源顶点s需找出从它到图中其他任意顶点(称为目的)的最短路径图a给出了一个

知识大全 第四部分 图[7]

   最短路径    迪杰斯特拉算法  voidShortestPath_DIJ(MgraphGintvPathMatrix&pShortPathTable&am

知识大全 数据结构 7.10 各对顶点间的最短路径问题

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  对有向网按弗洛伊德算法求得各对顶点之间的最短路径的过程cha138

知识大全 数据结构考研分类复习真题 第七章 图[43]

  .用最短路径算法求如下图中a到z的最短通路【西南财经大学四】  .已知一有向网的邻接矩阵如下如需在其中一个结点建立娱乐中心要求该结点距其它各结点的最长往返路程最短相同条件下总的往返路程越短越好问娱