美文网首页JAVA进阶
直观理解:单源点最短路径——Dijkstra算法

直观理解:单源点最短路径——Dijkstra算法

作者: 老羊_肖恩 | 来源:发表于2021-11-16 15:19 被阅读0次

  Dijkstra算法是由荷兰计算机科学家 Edsger Wybe Dijkstra于1959年提出的单源点最短路径算法(SSSP:Single Souce Shortest Path)。是一个解决加权图(不含负权重的边)中从一个顶点到其余各个顶点最短路径问题的算法。Dijkstra算法是一个集贪心算法广度优先搜索(BFS)动态规划于一身的最短路径算法。Dijkstra算法的主要特点是从起源点开始,采用贪心算法的策略,每次遍历到始点距离最近且未访问过的顶点的邻接顶点,直到扩展到终点为止。
  Dijkstra算法通过维护两个集合:S(已求出最短路径的顶点)和U(未求出最短路径的顶点),每次迭代地从U中移除路径距离最小的点到集合S中,并通过这个新移入的点来更新U中各个顶点到源点的最短路径,直到集合U为空。下面我们通过一个例子来简单描述Dijkstra算法的过程。
  假设我们有如下的图,其中顶点A未此次算法的起点:

graph

  首先我们需要初始化两个集合S=\{ A\}U=\{ B,C,D,E,F,G \},以及U中每个顶点到源点的距离,若不直接于A相邻,结果置为正无穷∞。

initialize

  Step 1:从集合U中挑选出距离最小的点,这里会挑选出顶点F,集合SU变更为:S=\{A, F\}U=\{B,C,D,E,G \},根据最新的S,重新计算U中顶点到源点A的最短距离。

step 1

  Step 2::从集合U中挑选出距离最小的点,这里会挑选出顶点E,集合SU变更为:S=\{A, E, F\}U=\{B,C,D,G \},根据最新的S,重新计算U中顶点到源点A的最短距离。

step 2

  Step 3:从集合U中挑选出距离最小的点,这里会挑选出顶点C,集合SU变更为:S=\{A, C, E, F \}U=\{B, D, G\},根据最新的S,重新计算U中顶点到源点A的最短距离。

step 3

  Step 4:从集合U中挑选出距离最小的点,这里会挑选出顶点D,集合SU变更为:S=\{A, C, D, E, F\}U=\{B, G\},根据最新的S,重新计算U中顶点到源点A的最短距离。

step 4

  Step 5:从集合U中挑选出距离最小的点,这里会挑选出顶点B,集合SU变更为:S=\{A, B, C, D, E, F\}U=\{G\},根据最新的S,重新计算U中顶点到源点A的最短距离。

step 5

  Step 6:从集合U中挑选出距离最小的点,这里会挑选出顶点G,集合SU变更为:S=\{A, B, C, D, E, F, G\}U=\{ \},由于集合U为空,算法停止迭代,输出结果。

step 6

  以上就是对Dijkstra算法的计算过程的简单描述。

相关文章

网友评论

    本文标题:直观理解:单源点最短路径——Dijkstra算法

    本文链接:https://www.haomeiwen.com/subject/qdehtrtx.html