Dijkstra的最短路径算法据/h1>
一种用于在加权图中查找从起始节点到目标节点的最短路径的算法是Dijkstra的算法。这据a href="//www.parkandroid.com/wiki/algorithms/?wiki_title=algorithm" class="wiki_link new" title="算法GydF4y2Ba" target="_blank" rel="nofollow">算法据/a>创造一个据a href="//www.parkandroid.com/wiki/trees-basic/" class="wiki_link" title="树GydF4y2Ba" target="_blank">树据/a>从启动顶点,源,到图表中所有其他点的最短路径。据/p>
Dijkstra的算法于1959年发布并以其创造者荷兰计算机科学家Edsger dijkstra命名,可以应用于加权据a href="//www.parkandroid.com/wiki/graphs-basic/" class="wiki_link" title="图形GydF4y2Ba" target="_blank">图形据/a>。图表可以是指向或无向的。使用该算法的一个规定是该图需要在每个边缘上具有非负重量。据/p>
假设一个学生希望以最短的方式从家里到学校。她知道一些道路严重拥挤,难以使用。在Dijkstra的算法中,这意味着边缘具有大量重量 - 算法发现的最短路径树将尝试避免重量较大的边缘。如果学生使用地图服务查找方向,则可能使用Dijkstra的算法以及其他人。据/p>
在下图中找到从家中学校的最短路径:据/p>
可以使用Dijkstra算法找到的最短路径是据/p>
内容据/h4>
dijkstra的算法据/h2>
Dijkstra的算法通过构建一组距离源的节点来找到来自单个源节点的最短路径树。据/p>
图表具有以下内容:据/p>
- 顶点或节点,在算法中表示据S.pan class="katex"> 或者据S.pan class="katex"> ;据/li>
- 连接两个节点的加权边:(据S.pan class="katex">
这是通过初始化三个值来完成的:据/p>
算法继续如下:据/p>
- 尽管据S.pan class="katex"> 不为空,弹出节点据S.pan class="katex"> ,那还没有据S.pan class="katex"> , 从据S.pan class="katex"> 最小的据S.pan class="katex">
- 如果据S.pan class="katex">
该算法已访问图中的所有节点,并找到了每个节点的最小距离。据S.pan class="katex">
执行据/h2>
这是Dijkstra算法的伪代码,镜像Python语法。它可以用来以任何语言实现算法。据/p>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 17 18据/pre> |
|
例子据/h2>
我们逐步通过Dijkstra的算法在上面的算法中使用的图表:据/p>
根据算法初始化距离。据S.pan class="image-caption center">
选择第一节点并计算与相邻节点的距离。据S.pan class="image-caption center">
选择最小距离的下一个节点;重复相邻节点距离计算。据S.pan class="image-caption center">
最短路径树的最终结果据S.pan class="image-caption center">
在下图中运行dijkstra并确定生成的最短路径树。据/p>
Dijkstra将按以下顺序访问顶点:据S.pan class="katex">
参考据/h2>
- Skiena,S。据E.m>dijkstra的算法动画据/em>。从2016年4月22日恢复过来据a href="http://www3.cs.stonybrook.edu/~skiena/combinatorica/animations/anim/dijkstra.gif">http://www3.cs.stonybrook.edu/~skiena/combinatorica/animations/anim/dijkstra.gif.据/a>
- 大厅,A。据E.m>如何使用dijkstra的算法据/em>。从2016年4月27日检索到的据a href="https://www.youtube.com/watch?v=Cjzzx3MvOcU">https://www.youtube.com/watch?v=cjzzx3mvocu.据/a>
- Hazzard,E.据E.m>教程据/em>。从2016年4月24日检索到的据a href="http://vasir.net/static/tutorials/shortest\path/shortest\path2\1\a\_selected.png">http://vasir.net/static/tutorials/shortest\"em metspath/shortest\1\>a\_selected.png.据/a>
- Hazzard,E.据E.m>教程据/em>。从2016年4月24日检索到的据a href="http://vasir.net/static/tutorials/shortest\path/shortest\path2\1\a\selected\3.png">http://vasir.net/static/tutorials/shortest\"em metspath/shortest\selected\
- Hazzard,E.据E.m>教程据/em>。从2016年4月24日检索到的据a href="http://vasir.net/static/tutorials/shortest\path/shortest\path3\_2.png">http://vasir.net/static/tutorials/shortest\ukuts\"em metspath/shortest\
- Hazzard,E.据E.m>教程据/em>。从2016年4月24日检索到的据a href="http://vasir.net/static/tutorials/shortest\path/shortest\path\_final.png">http://vasir.net/static/tutorials/shortest\"em metspath/shortest\