算法-狄杰斯特拉-Dijkstra Algorithm

自己画图真的是一件很累的事情,麻烦大家互相学习引用的同时注明出处,互相学习,不胜感激。

一、最短图路径算法

1、Dijkstra Algorithm
  • 是一个贪心算法
    解决的是带权重的有向图上单源最短路径问题,并且所有权值非负
  • 基本思想:从源点出发,每次选择离源点最近的一个顶点前进,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径
2、Floyd-Warshall Algorithm:动态规划算法
  • 任意两点之间的最短路径,这称为多源最短路径问题

二、Pseudocode

DIJKSTRA(G,w,s)
​
1. INITIALIZE_SINGLE_SOURCE(G,s)
2. S=∅
3. Q=G.V
4. while Q≠∅
5.     u=EXTRACT_MIN(Q)
6.     S=S∪{u}
7.     for each vertex v∈G.Adj[u]
8.         RELAX(u,v,w)

S:已访问过节点集合
Q:保存节点集合(最小优先队列)
u:最小的节点     

RELAX(u,v,w):松弛操作

三、推导

  • 简要分为8步,来进行分析和推导
1、初始化

在这里插入图片描述

2、找到第一个点A,遍历他,此时,由于A和其他点之间的距离位置,均初始化为∞

在这里插入图片描述

3、第一个点A已访问完成,找到他可到达的节点为B和C,此时,B和C节点的具体分别为6和3,均比∞小,故修改到A的最短距离。

在这里插入图片描述

4、由于和A相连的点有B和C,此时,按照伪代码第5步来说,需要找到最小的点,接着遍历,故开始遍历C点。与C点相连的点有B、D、E,故此时基于已有的A-C的距离为3的基础,开始计算距离,分别为5、6、7

在这里插入图片描述

5、同理可得,取最小的点,开始遍历B,计算与其相关的点的距离。

在这里插入图片描述

6、遍历D

在这里插入图片描述

7、遍历E

在这里插入图片描述

8、至此,到了F点后,所有的点遍历完成。路径如下表所示,一目了然。

在这里插入图片描述

四:总结

  • 时间复杂度:

设图的边数为E,顶点数为V

  • 依赖于最小优先队列的实现数据结构
    通过节点1~|V|数组,第V个的值存在第V个位置 :O( V^{2} + E) =O(V^{2})
    使用斐波那契堆 O(Vlg{V} + E) = O( Vlg{V} )

  • 缺陷:当所搜索的图存在非负值时,
    导致u—>v之间存在一条负权回路

[参考资料]

算法导论第三版

写在最后

打个小广告:希望大家关注三个程序猿的成长史
微信号:Technology Army

在这里插入图片描述

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值