Dijkstra算法学习笔记

原创 2013年12月03日 19:34:06

Dijkstra算法是一种最短路径算法,用于计算一个节点到其它所有节点的最短路径,动态路由协议OSPF中就用到了Dijkstra算法来为路由计算最短路径。

算法本身并不是按照我们的正常思维习惯,我们一般会,从原点遍历所有与之相连的节点,找到最短路径,再从最短路径上的那个点遍历与之相连的所有其它点(原点除外),然后依次类推。这样做虽然可以算出一个树形,但是在大多数情况下,这种算法会产生很多次优路径,也就是说非最短路径。

Dijkstra算法的大概过程:

假设有两个集合或者说两个表,表A和表B

表A表示生成路径,表B表示最后确定的路径

1.从原点出发,遍历检查所有与之相连的节点,将原点和这些节点存放到表A中,并记录下两节点之间的代价。

2.将代价最小的代价值和这两节点移动到表B中(其中一个是原点)。

3.把这个节点所连接的子节点找出,放入到表A中,算出子节点到原点的代价

4.重复第二步和第三步直到表A为空。然后根据表B中的数据算出最优树。

维基百科中还有另一种说法,Dijkstra算法的输入包含了一个有权重的有向图G,以及G中的一个来源顶点S。 我们以V表示G中所有顶点的集合。 每一个图中的边,都是两个顶点所形成的有序元素对。(u,v)表示从顶点u到v有路径相连。 我们以E所有边的集合,而边的权重则由权重函数w: E → [0, ∞]定义。 因此,w(u,v)就是从顶点u到顶点v的非负花费值(cost)。 边的花费可以想像成两个顶点之间的距离。任两点间路径的花费值,就是该路径上所有边的花费值总和。 已知有V中有顶点s及t,Dijkstra算法可以找到s到t的最低花费路径(i.e. 最短路径)。 这个算法也可以在一个图中,找到从一个顶点s到任何其他顶点的最短路径。

Dijstra算法的基础操作是边的拓展:如果存在一条从u到v的边,那么从s到u的最短路径可以通过将边(u,v)添加到尾部来拓展一条从s到v的路径。这条路径的长度是d[u]+w(u,v)。如果这个值比目前已知的d[v]的值要小,我们可以用新值来替代当前d[v]中的值。拓展边的操作一直执行到所有的d[v]都代表从s到v最短路径的花费。这个算法经过组织因而当d[u]达到它最终的值的时候没条边(u,v)都只被拓展一次。

Dijkstra算法图示:

相关文章推荐

[codevs1557/tyvj1031/USACO OTC09 9TH]热浪[tyvj3187]最小花费 图论算法之dijkstra 学习笔记

图论算法之Dijkstra 【算法思路】 s[i]表示起点到i的最短路径的值; 初始时s[起点]赋为0,其余正无穷; 每一次找到一个s[i]最小的点minj,置标记,然后把所有没有标记过的且与点min...

Dijkstra算法学习笔记(1)

Dijkstra算法(单源最短路径)       单源最短路径问题,即在图中求出给定顶点到其它任一顶点的最短路径。在弄清楚如何求算单源最短路径问题之前,必须弄清楚最短路径的最优子结构性质。 ...
  • chise_
  • chise_
  • 2014年12月17日 12:04
  • 168

单源最短路径-Dijkstra算法 学习笔记

单源最短路径-Dijkstra算法,python3.0 简单实现

[算法导论] 单源最短路径 - Dijkstra 学习笔记

Dijkstra采用的是贪心策略,为什么这种策略是正确的呢?下面我来简单说一下我的学习心得。 首先假设起点为s,终点为e。δ(s,e)代表两点的最短路径权值。ω(s,e)代表δ(s,e)经过的结点...

算法学习笔记(三) 最短路 Dijkstra 和 Floyd 算法

图论中一个经典问题就是求最短路,最为基础和最为经典的算法莫过于 Dijkstra 和 Floyd 算法,一个是贪心算法,一个是动态规划,这也是算法中的两大经典代表。用一个简单图在纸上一步一步演算,也是...

015-Dijkstra算法-贪心-《算法设计技巧与分析》M.H.A学习笔记

在无向图 G=(V,E) 中,假设每条边 E[i] 的长度为 w[i],找到由顶点 V0 到其余各点的最短路径。 Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,注意该算法要求图中不存在负...

算法导论学习笔记(18)——单源最短路径(Dijkstra算法实现)

Dijkstra算法的基本思想是:设G=(V,E)是一个带权有向图,把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,以后每求得一条最短路径v,···vk,...

数据结构 学习笔记(八):图(中):最短路径问题(单源最短路径 Dijkstra,多源最短路径 Floyd)

7.1 最短路径问题7.1.1 概述图论里最少的步骤就是最短路径问题。最短路径问题的抽象在网络中,求两个不同顶点之间的所有路径中,边的权值之和最小的那一条路径。这条路径就是两点之间的最短路径。第一个顶...
  • Jurbo
  • Jurbo
  • 2017年07月10日 14:23
  • 596
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Dijkstra算法学习笔记
举报原因:
原因补充:

(最多只允许输入30个字)