深度優先和廣度優先區別


 

(一)深度優先搜索的特點是:

    1.深度優先搜索法有遞歸以及非遞歸兩種設計方法。一般的,當搜索深度較小、問題遞歸方式比較明顯時,用遞歸方法設計好,它可以使得程序結構更簡捷易懂。當數據量較大時,由於系統堆棧容量的限制,遞歸容易產生溢出,用非遞歸方法設計比較好。

2.深度優先搜索方法有廣義和狹義兩種理解。廣義的理解是,只要最新產生的結點(即深度最大的結點)先進行擴展的方法,就稱為深度優先搜索方法。在這種理解情況下,深度優先搜索算法有全部保留和不全部保留產生的結點的兩種情況。而狹義的理解是,僅僅只保留全部產生結點的算法。本書取前一種廣義的理解。不保留全部結點的算法屬於一般的回溯算法范疇。保留全部結點的算法,實際上是在數據庫中產生一個結點之間的搜索樹,因此也屬於圖搜索算法的范疇。

3.不保留全部結點的深度優先搜索法,由於把擴展望的結點從數據庫中彈出刪除,這樣,一般在數據庫中存儲的結點數就是深度值,因此它占用的空間較少,所以,當搜索樹的結點較多,用其他方法易產生內存溢出時,深度優先搜索不失為一種有效的算法。

4.不一定會得到最優解,這個時候需要修改原算法:把原輸出過程的地方改為記錄過程,即記錄達到當前目標的路徑和相應的路程值,並與前面已記錄的值進行比較,保留其中最優的,等全部搜索完成后,才把保留的最優解輸出。

 

二、廣度優先搜索法的顯著特點是:

1)在產生新的子結點時,深度越小的結點越先得到擴展,即先產生它的子結點。為使算法便於實現,存放結點的數據庫一般用隊列的結構。

2)無論問題性質如何不同,利用廣度優先搜索法解題的基本算法是相同的,但數據庫中每一結點內容,產生式規則,根據不同的問題,有不同的內容和結構,就是同一問題也可以有不同的表示方法。

3)當結點到跟結點的費用(有的書稱為耗散值)和結點的深度成正比時,特別是當每一結點到根結點的費用等於深度時,用廣度優先法得到的解是最優解,但如果不成正比,則得到的解不一定是最優解。這一類問題要求出最優解,一種方法是使用后面要介紹的其他方法求解,另外一種方法是改進前面深度(或廣度)優先搜索算法:找到一個目標后,不是立即退出,而是記錄下目標結點的路徑和費用,如果有多個目標結點,就加以比較,留下較優的結點。把所有可能的路徑都搜索完后,才輸出記錄的最優路徑。

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

5)比較深度優先和廣度優先兩種搜索法,廣度優先搜索法一般無回溯操作,即入棧和出棧的操作,所以運行速度比深度優先搜索算法法要些。

 

 總之,一般情況下,深度優先搜索法占內存少但速度較慢,廣度優先搜索算法占內存多但速度較快,在距離和深度成正比的情況下能較快地求出最優解。因此在選擇用哪種算法時,要綜合考慮。決定取舍。

 

 

 

 


免責聲明!

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



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