最短路径算法综述
???????????????????????????????????????????? 最短路徑算法綜述????????????????????????????????????????????
更新中。。。。
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
轉載于:https://www.cnblogs.com/panweishadow/p/3392778.html
總結
- 上一篇: Linux开发常见问题:GCC:链接器输
- 下一篇: 多个DIV排列时居中