单源最短路径问题之Dijkstra算法详解

单源最短路径问题之Dijkstra算法详解

单源最短路径:给定一个图 G=(V,E) ,找到从给定源结点 sV 到每个结点 vV 的最短路径。

Dijkstra算法

目标:是解决带权重的有向图的单源最短路径问题。
前提:假设对于所有的边 (u,v)E ,都有 w(u,v)0
该算法会在运行过程中维护一个结点集合 S

符号表示

V:所有结点的集合。
S :结点集合,确定最短路径结点的集合。
Q:最小优先队列。
s :源结点。
u:选择最短路径估计最小的结点。

算法伪代码

Alt text

松弛技术

Dijkstra算法中需要使用松弛技术。对于每个结点 v ,维持一个属性v.d,用来记录从源结点 s 到结点v的最短路径权重的上界,称为最短路径估计。
- 初始化操作
Alt text
- 松弛 relax(u,v,w)
Alt text
将从结点 s 到结点u之间的最短路径距离加上结点 u 与结点v的权重,并与当前的 s v的最短路径进行比较,如果前者更小,则更新 v.d v.π .

#最小优先队列

在该算法中,使用最小优先队列 Q 来保存结点集合,每个结点的关键值为其d值。
- EXTRACTMIN(Q)
最小优先队列中的操作,去掉并返回 S 中具有最小键值的元素。在这里,就是返回并去除具有最小d值的结点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值