(一)深度優先搜索的特點是:
2.深度優先搜索方法有廣義和狹義兩種理解。廣義的理解是,只要最新產生的結點(即深度最大的結點)先進行擴展的方法,就稱為深度優先搜索方法。在這種理解情況下,深度優先搜索算法有全部保留和不全部保留產生的結點的兩種情況。而狹義的理解是,僅僅只保留全部產生結點的算法。本書取前一種廣義的理解。不保留全部結點的算法屬於一般的回溯算法范疇。保留全部結點的算法,實際上是在數據庫中產生一個結點之間的搜索樹,因此也屬於圖搜索算法的范疇。
3.不保留全部結點的深度優先搜索法,由於把擴展望的結點從數據庫中彈出刪除,這樣,一般在數據庫中存儲的結點數就是深度值,因此它占用的空間較少,所以,當搜索樹的結點較多,用其他方法易產生內存溢出時,深度優先搜索不失為一種有效的算法。
4.不一定會得到最優解,這個時候需要修改原算法:把原輸出過程的地方改為記錄過程,即記錄達到當前目標的路徑和相應的路程值,並與前面已記錄的值進行比較,保留其中最優的,等全部搜索完成后,才把保留的最優解輸出。
二、廣度優先搜索法的顯著特點是:
(1)在產生新的子結點時,深度越小的結點越先得到擴展,即先產生它的子結點。為使算法便於實現,存放結點的數據庫一般用隊列的結構。
(2)無論問題性質如何不同,利用廣度優先搜索法解題的基本算法是相同的,但數據庫中每一結點內容,產生式規則,根據不同的問題,有不同的內容和結構,就是同一問題也可以有不同的表示方法。
(3)當結點到跟結點的費用(有的書稱為耗散值)和結點的深度成正比時,特別是當每一結點到根結點的費用等於深度時,用廣度優先法得到的解是最優解,但如果不成正比,則得到的解不一定是最優解。這一類問題要求出最優解,一種方法是使用后面要介紹的其他方法求解,另外一種方法是改進前面深度(或廣度)優先搜索算法:找到一個目標后,不是立即退出,而是記錄下目標結點的路徑和費用,如果有多個目標結點,就加以比較,留下較優的結點。把所有可能的路徑都搜索完后,才輸出記錄的最優路徑。
(4)廣度優先搜索算法,一般需要存儲產生的所有結點,占的存儲空間要比深度優先大得多,因此程序設計中,必須考慮溢出和節省內存空間得問題。
(5)比較深度優先和廣度優先兩種搜索法,廣度優先搜索法一般無回溯操作,即入棧和出棧的操作,所以運行速度比深度優先搜索算法法要快些。