单源最短路径

本文介绍了单源最短路径问题,包括基础概念、性质和几种算法,如Bellman-Ford算法和Dijkstra算法。Bellman-Ford适用于含有负权重的图,能检测负权环,而Dijkstra算法则要求边权重非负,适用于无环图,具有较高的效率。
摘要由CSDN通过智能技术生成

1.基础

最短路径简单说就是,一个带权重的有向图,图中从u到v的最短路径就是所有从u到v的路径中权重之和最小的。

最短路径具有最优子结构:两个节点之间的最短路径包含着其他的最短路径。这使得我们可以用动态规划或贪心算法来解决该问题。

最短路径可以包含负权重的边,但是不能包含权重为负值的环路。当然也不能包含权重为正值的环路。

下面介绍比较重要的最短路径和松弛操作的性质:

三角不等式性质:对于任何边(u,v) in E,我们有delta(s,v) <= delta(s,u)+w(u,v)。

上界性质:对于所有的节点v in V,总是有v.d >= delta(s,v)。一旦v.d的取值达到delta(s,v),其值将不再变化。

非路径性质:如果从节点s到节点v不存在路径,则总是有v.d = delta(s,v) = +inf。

收敛性质:对于某些节点u,v in V,如果s~u-->v是图G中的一条最短路径,并且在对边(u,v)进行松弛前的任意时间有u.d = delta(s,u),则在之后的所有时间有v.d = delta(s,v)。

路径松弛性质:如果p = <v_0,v_1,...,v_k>是从源节点s  =v_0到节点v_k的一条最短路径,并且我们对p中的边所进行松弛的次序为(v_0,v_1),(v_1,v_2),...,(v_k-1,v_k),则v_k.d = delta(s,v_k)。该性质的成立与任何其他的松弛操作无关,即使这些松弛操作是与对p上的边所进行的松弛操作穿插进行的。

上面的性质并不难理解,但是对于理解后面的算法有着非常重要的作用,尤其是路径松弛性质,直接体现在后面的算法中。

2.算法

2.1 Bellman-Ford算法

通过对边进行松弛操作来渐进的降低从源节点s到每个节点v的最短路径的估计值v.d,直到该估计值与实际的最短路径权重delta(s,v)相同为止。该算法返回true,当且仅当输入图不包含可以从源节点到达的权重为负值的环路。如果存在权重为负值的环路,该算法可以检测到。

伪代码:

BELLMAN-FORD(G,w,s)

1. INITIALIZE-SINGLE-SOURCE(G,s)

2. for i = 1 to |G.V| - 1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值