深搜,顧名思義,是深入其中、直取結果的一種搜索方法。
如果深搜是一個人,那么他的性格一定倔得像頭牛!他從一點出發去旅游,只朝着一個方向走,除非路斷了,他絕不改變方向!除非四個方向全都不通或遇到終點,他絕不后退一步!因此,他的姐姐廣搜總是嘲笑他,說他是個一根筋、不撞南牆不回頭的家伙。
深搜很討厭他姐姐的嘲笑,但又不想跟自己的親姐姐鬧矛盾,於是他決定給姐姐講述自己旅途中的經歷,來改善姐姐對他的看法。他成功了,而且只講了一次。從那以后他姐姐不僅再沒有嘲笑過他,而且連看他的眼神都充滿了贊賞。他以為是自己路上的各種英勇征服了姐姐,但他不知道,其實另有原因……
深搜是這樣跟姐姐講的:關於旅行呢,我並不把目的地的風光放在第一位,而是更注重於沿路的風景,所以我不會去追求最短路,而是把所有能通向終點的路都走一遍。可是我並不知道往哪走能到達目的地,於是我只能每到一個地方,就向當地的人請教各個方向的道路情況。為了避免重復向別人問同一個方向,我就給自己規定:先問北,如果有路,那就往北走,到達下一個地方的時候就在執行此規定,如果往北不通,我就再問西,其次是南、東,要是這四個方向都不通或者抵達了終點,那我回到上一個地方,繼續探索其他沒去過的方向。我還要求自己要記住那些幫過他的人,但是那些給我幫倒忙的、讓我白費力氣的人,要忘記他們。有了這些規定之后,我就可以大膽的往前走了,既不用擔心到不了不目的地,也不用擔心重復走以前的路。哈哈哈……
深搜優缺點
優點
1、能找出所有解決方案
2、優先搜索一棵子樹,然后是另一棵,所以和廣搜對比,有着內存需要相對較少的優點
缺點
1、要多次遍歷,搜索所有可能路徑,標識做了之后還要取消。
2、在深度很大的情況下效率不高
廣搜,顧名思義,是多管齊下、廣撒網的一種搜索方法
如果廣搜是一個人,那么她一定很貪心,而且喜新厭舊!她從一點出發去旅游,先把與起點相鄰的地方全部游覽一遍,然后再把與她剛游覽過的景點相鄰的景點全都游覽一邊……一直這樣,直至所有的景點都游覽一遍。
廣搜屬於一種盲目搜尋法,目的是系統地展開並檢查圖中的所有節點,以找尋結果。換句話說,它並不考慮結果的可能位置,徹底地搜索整張圖,直到找到結果為止。類似樹的按層遍歷,其過程為:首先訪問初始點Vi,並將其標記為已訪問過,接着訪問Vi的所有未被訪問過可到達的鄰接點Vi1、Vi2…Vit,並均標記為已訪問過,然后再按照Vi1、Vi2…Vit 的次序,訪問每一個頂點的所有未被訪問過的鄰接點,並均標記為已訪問過,依此類推,直到圖中所有和初始點Vi有路徑相通的頂點都被訪問過為止。
廣搜優缺點
優點
1、對於解決最短或最少問題特別有效,而且尋找深度小
2、每個結點只訪問一遍,結點總是以最短路徑被訪問,所以第二次路徑確定不會比第一次短
缺點
1、內存耗費量大(需要開大量的數組單元用來存儲狀態)