zoukankan      html  css  js  c++  java
  • 最短路径算法综述

                                                 最短路径算法综述                                            

    更新中。。。。

    1.单源最短路径问题

    涵义:从给定的源顶点s到每个顶点v的最短路径。

    在弄清楚如何求算单源最短路径问题之前,必须弄掌握几点知识。

     最短路径的最优子结构   最短路径算法通常依赖于一种性质,也就是一条两顶点之间的最短路径包含路径上其他的最短路径。这种最优子结构性质是动态规划和贪心算法是否适用的一个标记。Dijkstra算法是一个贪心算法,而找出所有顶点对之间的最短路径的Floyd_Warshall算法是一个动态规划算法。下面的引理更加准确地陈述了最短路径的最优子结构的性质。

     引理1(最短路径的子路径是最短路径) 证明略,请参考《算法导论》P358

     负权值边:单源最短路径的某些示例中,可能存在权值为负值的边。但是不可能存在负权回路。Dijkstra不能处理负权值的图,Bellman-Ford能处理。

     回路:最短路径上不可能有回路。

     最短路径的表示:已知图G=(V,E),对于每个顶点v∈V,设置其前驱(predecessor)顶点∏(v)为另一顶点或NIL。通过这种方法,就可以使用PRINT-PATH(G,s,v)函数来打印路径。

    松弛技术(relaxation):对于每个顶点设置一个属性的d[v]来描述从源点s到v的最短路径上权值的上界。具体请参考《算法导论》P360

    最短路径以及松弛的性质:三角不等式、上界性质、无路径性质、收敛性质、路径松弛性质、前驱子图性质等等。具体请参考《算法导论》P361

     问题的3个变体:

           ♠.单终点最短路径

           ♠.单对顶点最短路径

           ♠.每对顶点间最短路径

    2.Bellman-Ford算法分析与实现(C/C++)

    http://www.wutianqi.com/?p=1912

    3.Dijkstra算法分析与实现(C/C++)

         http://www.cnblogs.com/panweishadow/p/3396001.html

    4.SPFA(Shortest Path Faster Algorithm)算法分析与实现(C/C++)

          http://www.wutianqi.com/?p=2285

       

         感谢Tanky Woo大神的博客,他的算法专题链接:http://www.wutianqi.com/sfzt.html

  • 相关阅读:
    sizeof、strlen、length、size
    extern关键字
    结构
    引用
    指针
    数组
    linux端口 ,打开服务端口
    linux用户禁用
    防止验证码的恶意发送
    springboot 项目windows下打包、注册服务。
  • 原文地址:https://www.cnblogs.com/panweishadow/p/3392778.html
Copyright © 2011-2022 走看看