深度優先和廣度優先算法


 1、深度優先算法

遍歷規則:不斷地沿着頂點的深度方向遍歷。頂點的深度方向是指它的鄰接點方向。

最后得出的結果為:ABDECFHG。

Python代碼實現的偽代碼如下:

 

 2、廣度優先算法:

遍歷規則:

1)先訪問完當前頂點的所有鄰接點。(應該看得出廣度的意思)

2)先訪問頂點的鄰接點先於后訪問頂點的鄰接點被訪問。

最后得出的結果為:ABCDEFGH。

Python代碼實現的偽代碼如下:

3.總結

深度優先遍歷:對每一個可能的分支路徑深入到不能再深入為止,而且每個結點只能訪問一次。要特別注意的是,二叉樹的深度優先遍歷比較特殊,可以細分為先序遍歷、中序遍歷、后序遍歷(我們前面使用的是先序遍歷)。具體說明如下:

先序遍歷:對任一子樹,先訪問根,然后遍歷其左子樹,最后遍歷其右子樹。

中序遍歷:對任一子樹,先遍歷其左子樹,然后訪問根,最后遍歷其右子樹。

后序遍歷:對任一子樹,先遍歷其左子樹,然后遍歷其右子樹,最后訪問根。

廣度優先遍歷:又叫層次遍歷,從上往下對每一層依次訪問,在每一層中,從左往右(也可以從右往左)訪問結點,訪問完一層就進入下一層,直到沒有結點可以訪問為止

4、分析

深度優先搜素算法:不全部保留結點,占用空間少;有回溯操作(即有入棧、出棧操作),運行速度慢。

廣度優先搜索算法:保留全部結點,占用空間大; 無回溯操作(即無入棧、出棧操作),運行速度快。

通常深度優先搜索法不全部保留結點,擴展完的結點從數據庫中彈出刪去,這樣,一般在數據庫中存儲的結點數就是深度值,因此它占用空間較少。

所以,當搜索樹的結點較多,用其它方法易產生內存溢出時,深度優先搜索不失為一種有效的求解方法。

廣度優先搜索算法,一般需存儲產生的所有結點,占用的存儲空間要比深度優先搜索大得多,因此,程序設計中,必須考慮溢出和節省內存空間的問題。

但廣度優先搜索法一般無回溯操作,即入棧和出棧的操作,所以運行速度比深度優先搜索要快些

參考簡書:https://www.jianshu.com/p/333d0df84b3e


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM