狄克斯特拉算法

狄克斯特拉算法包含四个步骤:算法

1·找出“最便宜的节点,便可在最短期内到达的节点”spa

2·更新该节点的邻居的开销搜索

3·重复这个过程,直到对图中的每一个节点都这样作时间

4·计算最终路径

 

1·第一步:找出最便宜的节点。你如今站在起点,不知道应该前往A节点仍是B节点,那么前往这两个节点应该花费多长时间呢?(开始选定一个起点)假设前往节点A须要6分钟,而前往节点B须要2分钟,至于前往A和B以后的那些节点要花费的时间,如今你还不知道,并且因为你还不知道前往终点的时间,所以你假设为无穷大。如今来看从起点前往节点B是最短的用时(2分钟)

2·第二步:计算经节点B前往它的各个邻居须要花费的时间。对于节点B的邻居,若是找到前往它的更短的路径,就更新其开销

3·第三步:重复。重复第一步:找出可在最短期内前往的节点,你如今对节点B执行了第二步,除了节点B外,可在最短期内前往的节点是节点A。重复第二步:更新节点A的全部邻居的开销

 

当你对每一个节点都使用狄克斯特拉算法,你会发现

1·从起点前往节点B须要2分钟

2·从节点B前往节点A须要5分钟

3·从节点A前往终点须要6分钟

 

 

# 须要注意的是:若是咱们使用广度优先搜索,找到的“最短路径”将不是上述的这条,由于这条路包含了3段,而从新来看的话有一条路径从起点到终点一共只有2段

# 咱们使用广度优先搜索来查找2点之间的最短路径,那时的“最短路径”的意思是段数最少。而在狄克斯特拉算法中,给每一段路径都分配了一个“时间数值”所以狄克斯特拉算法找出的是总权重最小的路径

# 狄克斯特拉算法背后的关键理念是:找出图中最便宜的节点,并确保没有到该节点更短的路径

# 固然这里所说的最短路径并不必定指的是物理距离,也多是让某种度量指标最小

 

 

再重复一下狄克斯特拉算法的4个步骤:

1·找出最便宜的点,便可在最短期内前往的节点。

2·对于该节点的邻居,检查是否有前往它们的更短的路径,若是有这种路径,就更新其开销。

3·重复这个过程,直到对途中的每一个节点都这样作了

4·计算最终路径(后面的随笔会解释是如何计算最终路径的)

 

分析与起点(令起点为父节点)相连的几条岔路后,再肯定第二个隘口(记录花销)(将第二个隘口做为新的父节点,后面同理),以后再分析从第二个隘口前往第三个(也是分析与第二个隘口相连的几条岔路后决定第三个隘口)隘口的花销......重复上述步骤,直到到达终点,将前面从起点到第二个隘口,从第二个隘口到第三个隘口,等等的花销进行累加。

当“顺序走彻底程”并进行逐路分析后,为了肯定最终的路径,由终点,一个隘口,一个隘口的进行回溯,最终到达起点,才能肯定最终的路线(即由子节点找父节点)

 

 

# 实现代码以下:

相关文章
相关标签/搜索