美文网首页
cs61b2018sp WEEK11.1 图的最短路径

cs61b2018sp WEEK11.1 图的最短路径

作者: 且乐一杯酒 | 来源:发表于2022-04-02 11:11 被阅读0次

2022.4.3

WEEK11.1 图的最短路径

一、内容

1.迪杰斯特拉算法(Dijkstra Algorithm)

我们上节课讲过BFS,从某种程度说,BFS就是求到源节点的距离的算法,但如果我们加上权重,BFS就不够我们用了。于是我们介绍这种Dijskstra算法(前提是无环的,且权重非负)

带权的图 同样,为了防止循环,我们需要数组记录

其实,根据性质,最后结果应该刚好是一个树
对任意的图,从某节点到任意节点的最短路径树的边数是V-1(假设每个节点都是可达的)

求这个图从A节点开始的最短路径 答案

Relaxation(松弛法)

对于直接用DFS来求最短路径,会得到一个错误的结果,原因之一是我们访问的节点或许不是最好的节点,但一旦访问后就不会再访问,这明显是不好的
于是我们提出松弛法,对于已经访问的节点,我们仍去访问,如果新的路径更短,我们就去更新其路径

如图所示,一开始的距离都是无穷,每一次BFS都会更新节点的路径

最佳优先查找(Best First Search)

我们现在讲另一种更新方法,这既不是DFS,也不是BFS
现在开始按照节点距离起点的距离大小的顺序来考虑(如何选取下一步的)最短路径

假设有这个图 距离A最短的(除了A自己)是C,于是我们选择C 然后再选B,最后到D

这钟算法有贪婪算法的味道

总结算法

我们讲了很多求最短路径的算法,下面我们正式开始讲Dijkstra算法

如图 首先,我们把所有可供选择的节点加入Fringe队列(最小优先队列)中,括号里第一个元素是节点标号,第二个是距开始节点的距离(一开始都为无穷) 信息数组,第一个是距离数组,第二个是记录路径的数组 随后,Fringe队列里的元素出队,如果有小的,换,并更新其信息数组 继续,再出队一个小的元素(最佳优先搜索) 由出队的节点,找到下一个更新的元素 再下,出队最小的元素1 再进行松弛操作(注意这里2也会被访问,虽然没有变化) 进行更新 继续出队最小元素4 进行更新(注意这里5节点原先的值大于新的值,要被更新) 更新

就这样继续出队,直到Fringe队列元素都出完队为止

最后结果 最后结果 伪代码 PQ消耗

我们小结一下,Dijkstra算法可以得到从一个节点到全部节点的最小路径。

相关文章

  • 图的应用-最短路径求解

    图的最短路径   图的最短路径是一个起点到一个终点之间最短的路径。  用于解决最短路径问题的算法被称做“最短路径算...

  • 最短路径问题

    无权图单源最短路径 有权图单源最短路径 有权图单源最短路径和无权图最短路径不一样,不能单从节点数来看,比如上图中,...

  • 【数据结构】最短路径之迪杰斯特拉(Dijkstra)算法与弗洛伊

    图的最短路径 【对于非网图】没有边上的权值,它的最短路径就是两个顶点之间经过的边数目最少的路径。 【对于网图】最短...

  • 最短路径

    无权图的最短路径用BFS来求 O(|V|+|E|) 有向带权图两点之间的最短路径也包含了路径上其他顶点间的最短路径...

  • 图-最短路径-迪杰斯特拉算法

    最短路径 在网图和非网图中,最短路径的含义是不同的。对于非网图,由于其边上没有权值,所谓的最短路径,其实就是指两顶...

  • 最短路径

    最短路径 在网图和非网图中,最短路径的含义是不同的。由于非网图没有边上的权值,所谓的最短路径其实是指两顶点之间经过...

  • 19-最短路径(Shortest Path)

    最短路径(Shortest Path) 最短路径是指两个顶点之间权值之和最小的路径(有向图,无向图均可,不能有负权...

  • 图 求解最短路径 时间复杂度 空间复杂度 单源最短路径 多源最短路径 条数最短(点权为1) 边权之和最小或最大(花...

  • 数据结构与算法-图的最短路径Dijkstra算法&Floyd算法

    最短路径 最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径。在...

  • 算法 | 最短路径问题

    最短路径 最短路径问题是图论研究中的一个经典算法问题, 旨在寻找图(由结点和路径组成的)中两结点之间的最短路径,在...

网友评论

      本文标题:cs61b2018sp WEEK11.1 图的最短路径

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