深度优先和广度优先搜索
目錄
前言
1 深度優先搜索
2 廣度優先搜索
3 深度優先和廣度優先的比較
前言
最近面試,被問到了深度優先和廣度優先搜索,這個我似曾相識,曾經大學的時候學到過,但是由于這幾年的工作都未接觸到,所以就已經忘的差不多了。這里必須重拾舊貨,重新認識下深度優先搜索和廣度優先搜索算法了。
1 深度優先搜索
思想:假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點,然后依次從它的各個未被訪問的鄰接點出發深度優先搜索遍歷圖,直至圖中所有和v有路徑相通的頂點都被訪問到。 若此時尚有其他頂點未被訪問到,則另選一個未被訪問的頂點作起始點,重復上述過程,直至圖中所有頂點都被訪問到為止。由此可見,深度優先搜索是一個遞歸的過程。
通俗點說就是,從初始點出發,不斷向前走,如果碰到死路了,就往回走一步,嘗試另一條路,直到發現了目標位置。這種不撞南墻不回頭的方法,即使成功也不一定找到一條好路,但好處是需要記住的位置比較少。
?
?
2 廣度優先搜索
思想:從圖中某頂點v出發,在訪問了v之后依次訪問v的各個未曾訪問過的鄰接點,然后分別從這些鄰接點出發依次訪問它們的鄰接點,并使得“先被訪問的頂點的鄰接點先于后被訪問的頂點的鄰接點被訪問,直至圖中所有已被訪問的頂點的鄰接點都被訪問到。如果此時圖中尚有頂點未被訪問,則需要另選一個未曾被訪問過的頂點作為新的起始點,重復上述過程,直至圖中所有頂點都被訪問到為止。換句話說,廣度優先搜索遍歷圖的過程是以v為起點,由近至遠,依次訪問和v有路徑相通且路徑長度為1,2...的頂點。
通俗點說就是,從初始點出發,把所有可能的路徑都走一遍,如果里面沒有目標位置,則嘗試把所有兩步能夠到的位置都走一遍,看有沒有目標位置;如果還不行,則嘗試所有三步可以到的位置。這種方法,一定可以找到一條最短路徑,但需要記憶的內容會非常多。
?
?
3 深度優先和廣度優先的比較
一般情況下,深度優先搜索算法占內存少但速度較慢,廣度優先搜索算法占內存多但速度較快,在距離和深度成正比的情況下能較快地求出最優解。因此,當內存不夠大時,為了防止內存溢出最好使用深度優先搜索算法。
?
?
總結
以上是生活随笔為你收集整理的深度优先和广度优先搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 智能驾驶领域专业术语
- 下一篇: EOS:一些必要的知识与常见错误:clo