算法导论笔记:24单源最短路径

       最短路径问题:一个带权重的有向图G = (V, E)和权重函数w: E->R,该权重函数将每条边映射到实数值的权重上。一条路径p的权重w(p)是构成该路径的所有边的权重之和,定义从节点u到结点v的最短路径权重δ (u, v)如下:

       在实际应用中,可以用一张图表示道路交通图,结点代表城市,边代表城市之间的道路,边上的权重代表道路的长度。目标就是找出一条从城市A到城市B的最短路径,边上的权重还可以表示时间、费用、罚款、损失或者任何随路径长度的增加而线性积累的,并且需要最小化的数量。

       广度优先搜索算法就是一个求取最短路径的算法,但该算法只能用于无权重的图,即每条边的权重都是单位权重的图。

 

       本章讨论单源最短路径问题:给定图G=(V, E),希望找到从给定源节点s到每个结点v的最短路径。单源最短路径可以有下面的变体:

       单目的地最短路径问题:找出从每个顶点v到指定终点t的最短路径。把图中的每条边反向,就可以把这一问题变为单源最短路径问题

 

       单结点对最短路径问题:找到从给定结点u到给定结点v的最短路径。解决了单源最短路径问题,则这一问题也就获得解决。

       所有节点对最短路径问题:对于每对顶点u和v,找出从u到v的最短路径。虽然将每个顶点作为源点,运行一次单源算法就可以解决这一问题,但通常可以更快地解决这一问题,下一章将详细讨论这个问题。

 

一:概述

1:最短路径的最优子结构

       最短路径具有最优子结构性质:两个结点之间的一条最短路径包含其他的最短路径:

       给定带权重的有向图G=(V, E)和权重函数w。设p=< >为从节点 到结点 的一条最短路径,并且对于任意的i, j, 0 <= i <= j <= k,设  = < >为路径p中从节点 到结点 的子路径。那么是从到节点的一条最短路径。

 

2:负权重的边

       边的权重可以为负值,即使边的权重为负值,对于所有节点v,最短路径权重 (u, v)都可以有精确定义但是,如果图G=(V, E)包含从源节点s可以到达的,权重为负值的环路,则最短路径权重无定义,从s到该环路上的任意节点的路径都不可能是最短路径。如果从节点s到节点v的某条路径上存在权重为负值的环路,则(u, v) = -

       如下图所示:

       从节点s到节点c有无数条路径;<s,c>, <s,c,d,c>,<s,c,d,c,d,c>等,因为环路<c, d, c>的权重为3>0。所以从s到c的最短路径为<s,c>,δ(s, c)=5。

       从节点s到节点e也有无数条路径:<s,e>, <s,e,f,e>, <s,e, f,e, f,e >等,因为环路<e, f, e>的权重为-3,所以,从节点s到节点e没有最短路径,因此δ(s,e)=-。类似的, δ(s,f)=-因为g可以从节点f到达,所以, δ(s, g)=-

       节点<h,i,j>也形成一个权重为负数的环路,但是他们不能从节点s到达,所以: (s, h) = (s, i) = (s, j) = ∞  。

 

4:环路

       最短路径不能包含权重为负值的环路。而且,最短路径也不能包含权重为正值得环路。因为只要将环路从路径上删除就可以得到一条权重更小的路径。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值