求解单源最短路的Dijkstra算法

求解单源最短路的Dijkstra算法

Dijkstra算法1,英文为Dijkstra’s algorithm,常被译为迪杰斯特拉算法。该算法由Edsger Wybe Dijkstra2在1956年发现。Dijkstra算法使用类似BFS的方法解决带权无负权图的单源最短路问题。

算法描述

解决单源最短路,便是需要求解图 G G G上某个源点 s s s到其它点 v ∈ V − { s } v\in V- \lbrace s \rbrace vV{ s}的权值和最小的路径,这里显然有两个重要求解目标——权值和、路径,这里我们先不考虑具体路径的求解。

解集dist初始化

Dijkstra算法在过程中动态维护解集 d i s t dist dist,其中 d i s t [ i ] dist[i] dist[i]为当前 s s s到编号为 i i i的点之间的最小权值和。显然在算法开始前,有
d i s t [ s ] = 0 d i s t [ v ] = ∞ dist[s]=0 \\ dist[v]=\infty dist[s]=0dist[v]=

松弛

Dijkstra的基础操作是松弛。显然对于任意时刻,如果存在一条边 w ( u , v ) w(u,v) w(u,v),使得当前 d i s t [ u ] + w e i g h t [ u ] [ v ] < d i s t [ v ] dist[u]+weight[u][v]<dist[v] dist[u]+weight[u][v]<dist[v],则可利用该边,将之前的解路径 p a t h [ v ] path[v] path[v]优化为 p a t h [ u ] → w ( u , v ) path[u]\rightarrow w(u,v) path[u]w(u,v)

贪心地进行松弛操作

算法维护两个顶点集合 S S S Q Q Q。集合 S S S保留所有已知实际最短路径值的顶点,而集合 Q Q Q

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值