python 拓扑排序 dfs bfs_bfs与dfs的优缺点?
剛好今天作業(yè)有道題問了相似問題= =,順便來回答一下
DFS和BFS主要差別在于BFS遍歷方式是圍繞著根結(jié)點一圈一圈(level by level)向外遍歷,借助隊列的方式實現(xiàn),而DFS的方式則是從一條路一直走到底后再回退,再走到底,借助棧的方式來實現(xiàn)。在正常情況下二者的時間復雜度都是相同的O(v+e)。一般來說DFS要比BFS好寫一些(函數(shù)遞歸調(diào)用天然滿足棧的結(jié)構(gòu),并且內(nèi)存消耗上會比BFS少一些?而BFS只能老老實實用隊列)。
從宏觀上來看:如果你已經(jīng)知道解離根節(jié)點比較近,那么BFS更好
如果整體上每個節(jié)點的邊很多,那么BFS消耗的內(nèi)存會很大
如果一棵樹很深而解很少,那么DFS可能會很慢(相反如果解很多并且都比較深的話,那么BFS就會很慢)
從名字上就很容易得出,如果一個問題深度無窮而廣度有限,那么DFS就沒法獲得解,但BFS可以,反之也同理。
從具體應用上看:
DFS比較適合判斷圖中是否有環(huán),尋找兩個節(jié)點之間的路徑,有向無環(huán)圖(DAG)的拓撲排序,尋找所有強連通片(SCC),無向圖中尋找割點和橋等;
BFS則比較適合判斷二分圖,以及用于實現(xiàn)尋找最小生成樹(MST),如在BFS基礎上的Kruskal算法。還有尋找最短路徑問題(如Dijkstra算法)。
至于CLRS里四種邊的定義,私以為書上已經(jīng)定義得很清楚了,自己跟著例子看兩遍應該就能理解,(個人感覺它對許多算法分析問題確實都挺有用)
總結(jié)
以上是生活随笔為你收集整理的python 拓扑排序 dfs bfs_bfs与dfs的优缺点?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python字符串中最长的连续升序子串_
- 下一篇: python sdk怎么用_如何使用七牛