算法图解之狄克斯特拉算法

应用场景

要找出最快的路径。

狄克斯特拉算法

下面来看看能否找到耗时更短的路径!狄克斯特拉算法包含4个步骤:
(1) 找出“最便宜”的节点,即可在最短时间内到达的节点。
(2) 更新该节点的邻居的开销,其含义将稍后介绍。
(3) 重复这个过程,直到对图中的每个节点都这样做了。
(4) 计算最终路径。

具体实现

  1. 找出最便宜的节点。你站在起点,不知道该前往节点A还是前往节点B。前往这两个节点都要多长时间呢?前往节点A需要6分钟,而前往节点B需要2分钟。至于前往其他节点,你还不知道需要多长时间。由于你还不知道前往终点需要多长时间,因此你假设为无穷大(这样做的原因你马上就会明白)。节点B是最近的——2分钟就能达到。
  2. 计算经节点B前往其各个邻居所需的时间。你刚找到了一条前往节点A的更短路径!直接前往节点A需要6分钟。但经由节点B前往节点A只需5分钟!对于节点B的邻居,如果找到前往它的更短路径,就更新其开销。在这里,你找到了:
    1)前往节点A的更短路径(时间从6分钟缩短到5分钟);
    2)前往终点的更短路径(时间从无穷大缩短到7分钟)。
  3. 重复上述步骤:
    重复第一步 :找出可在最短时间内前往的节点。你对节点B执行了第二步,除节点B外,可在最短时间内前往的节点是节点A。重复第二步 :更新节点A的所有邻居的开销。你发现前往终点的时间为6分钟!你对每个节点都运行了狄克斯特拉算法(无需对终点这样做)。现在,你知道:
    1)前往节点B需要2分钟;
    2)前往节点A需要5分钟;
    3)前往终点需要6分钟。

案例

在算法图解中有个换钢琴的案例。

代码实现





-----------------------本文结束感谢您的阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!
0%