算法导论-----图论-----单源最短路径

单源最短路径

1.边权可以为时间、费用、罚款、损失或者任何其他沿一条路径线性积累的和我们试图将其

最小化的某个量

2.单源最短路径的变体:

(1)单终点最短路径问题:找出每个点到指定终点的最短路径

    解决方法:把图中每条边反向,可转换为单源最短路径

(2)单对顶点最短路问题:对每个顶点u,v找出从u到v的最短路径

    解决方法:从渐进意义看,目前没有比单源算法更快的算法解决这个问题

(3)每对顶点间的最短路径问题:下一节介绍

3.最短路径最优子结构

对任一带权有向图G=(V,E)所定义的权函数为w:E->R。设p=<v1,v2,…,vk>是从v1到vk的最短路径。对任意i,j其中1<=i<=j<=k,设pij=<vi,…,vj>为从顶点vi到vj的子路径。那么pij是从vi到vj的最短路

4.负值权变

    若存在一条从s可达的负权回路,那么最短路径权的定义就不成立了

    如果从s到v的某路径中存在一条负权回路就定义σ(u,v)=负无穷

    Dijk输入边权必须为非负边

    Bellman-ford可输入负边,只要不存在从源点可达的负权回路就能给出正确答案。若存在,则检查报错

5.一最短路径中不能包含负权回路也不能包含正权回路

    可以从任一路径中移去0权回路

6.最短路径的表示

对每一顶点v都设置其前驱π(v)为另一顶点或者NIL

    顶点集Vπ为G中所有具有非空前驱的顶点集合,再加上源点s

    Vπ={v属于V:π(v)!=NIL}并{s}

    有向边集Eπ是由Vπ中的顶点的π的值导出的边集

7.设图G=(V,E),是带权有向图,其加权函数为w:E->R,假定R中不包含s属于V的负权回路,那么最短路径是良定义的

8.松弛技术

    对每个顶点v属于V都设置一个属性d[v]用来描述从s到v的最短路径的上界,称为最短路径估计

对最短路径估计和前趋进行初始化

    INITIALIZE-SINGLE-SOURCE

        For each vertex v属于 V[G]

            do d[v]=负无穷

             π[v]=NIL

     d[s]=0

    对u,v进行松弛操作

    RELAX(u,v,w)

        If d[v]>d[u]+w[u,v]

            Then d[v]=d[u]+w[u,v]

                π[v]=u

    叫松弛的原因:设σ(s,u)=d[u],σ(s,v)=d[v]

    所以满足约束d[v]<=d[u]+w(u,v)无压力,所以是松弛的

9.最短路及松弛的性质

    三角不等式:对任意边(u,v)属于E,有σ(s,v)<=σ(s,u)+w(u,v)

    上界定理:对任意顶点v属于V有d[v]>=σ(s,v),而且一旦达到σ(s,v)值就不再改变

    无路径性质s到v无路径,则d[v]=σ(s,v)=正无穷

    收敛性质:s~u->v是图G某u,v的最短路径,而且在松弛边(u,v)之前的任何时间d[u]=σ(s,u),则在操作过后总有d[v]=σ(s,v)

路径松弛性质:任意s=v0到vk的最短路径p=<v0,v1,…,vk>按顺序进行松弛,(v0,v1),(v1,v2),…,(vk-1,vk),那么这些松弛以后以及在以后的任意时刻都有d[vk]=σ(s,vk)

    无论其他边是否发生松弛,(包括与p的变交错的发生松弛),这一性质都保持

    前趋子图性质:一旦对所有的v属于V ,d[v]=σ(s,v),前趋子图就是一个以s为根的有根树

posted on 2012-04-14 10:17  Inpeace7  阅读(547)  评论(0编辑  收藏  举报

导航