zoukankan      html  css  js  c++  java
  • 算法导论图论单源最短路径

    单源最短路径

    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为根的有根树

  • 相关阅读:
    Spring MVC Ajax 嵌套表单数据的提交
    Spring MVC 过滤静态资源访问
    Spring MVC 页面跳转时传递参数
    IDEA Maven 三层架构 2、运行 springMVC
    IDEA Maven 三层架构 1、基本的Archetype 搭建
    EasyUI DataGrid 基于 Ajax 自定义取值(loadData)
    Spring MVC Ajax 复杂参数的批量传递
    Mybatis Sql片段的应用
    在 Tomcat 8 部署多端口项目
    自动升级的设计思路与实现
  • 原文地址:https://www.cnblogs.com/inpeace7/p/2446825.html
Copyright © 2011-2022 走看看