关于SPFA Bellman-Ford Dijkstra Floyd BFS最短路的共同点与区别
關于模板什么的還有算法的具體介紹 戳我?這里我們只做所有最短路的具體分析。
那么同是求解最短路,這些算法到底有什么區別和聯系:
對于BFS來說,他沒有松弛操作,他的理論思想是從每一點做樹形便利,那么時間復雜度絕對是在大型圖中難以接受的,所以BFS題目設計很精巧,數據限制,更重要的是他可以處理一些條件很麻煩的聯通情況,比如在途中,每步長相同求到達某一地的時間,那么我們要用最短路,就需要建圖,但是借助BFS就不需要建圖,這么麻煩的事情了。
對于其他最短路,核心思想是松弛,那么先說Floyd,其核心思想是插點法松弛借助動態規劃,這就是重點,那么既然是插點而且是動態規劃,那么他就可以解決過某一點的最短最長路,或最什么什么的問題了,因為DP會不重復的枚舉每一種情況,相當于插了盡可能的點,那么插點的問題就可以解決,比如不經過某一點的最短路問題,不經過超得過某個值的點的最短路。
對于最短路的其他算法,先討論Ford家族,Bellman-Ford 與SPFA 的區別,emmm,名字不一樣,速度不一樣,但是使用情況都一樣,都是可處理負邊權,但是復雜度最惡劣為 O(V*E) 頂點數乘邊數,那么稠密圖直接掛掉。都能能判負環,Bellman是n-1次松弛之后如果還能松弛,那么就有負環,SPFA是若同一點進入隊列兩次,即為存在負環。Bellman時間復雜度為O(V*E) SPFA(隊列優化的Bellman ford)復雜度為O(K*E) K為常數約為3,但是稠密圖會退化到O(V*E)上面說了。
再說dijkstra,這個算法最快,稠密圖稀疏圖都可使用,也有一個隊列優化版,區別參考上文,這個算法因為本身設計的問題是不可以處理負邊權問題的,所以更不能處理負環,但他不會退化,這里我們比較晚異同,我們給出求解思路。
確定為單源最短路:這里是說如果是多源最短路,那么跑N邊最短路也比Floyd快,也算是單源最短路。
1.判斷是否為稠密圖
? ? ①是:判斷是否帶負邊權:有還是Ford算法,兩個都可以,但是SPFA用的多,用它;
? ? ②否:SPFA;
多源最短路,或者就是Floyd算法的特殊問題。
Floyd ;
那么板子就可以只背3個了。
總結
以上是生活随笔為你收集整理的关于SPFA Bellman-Ford Dijkstra Floyd BFS最短路的共同点与区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019 ICPC 南京网络赛 F Gr
- 下一篇: Win10系统鼠标怎么变大 Win调整鼠