最短路径算法综述

                                             最短路径算法综述                                            

更新中。。。。

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

posted @ 2013-10-28 17:04  西芒xiaoP  阅读(619)  评论(0编辑  收藏  举报