搜索算法總結

搜索算法總結


  所謂搜索算法,就是在解的空間裏,從一個狀態轉移(按照要求拓展)到其他狀態,這樣進行下去,將解的空間中的狀態遍歷,找到答案。

  搜索又分爲廣搜(BFS)和深搜(DFS)。

  深搜(DFS)即深度優先搜索,始終對下一層的結點優先進行搜索,後面層數的結點遍歷過後再返回上一層,逐層返回,直到根節點。深搜強調的是“全”,即所有結點都將至少遍歷一遍。因此,深搜往往適用於解決一些“所有”類型的問題,如求:“所有方案”,“所有個數”。

      

  廣搜(BFS)即廣度優先搜索,往往利用queue隊列,始終優先遍歷前一層的結點,當前一層的結點全部遍歷過後再遍歷下一層的結點。當發現所需目標時,立即結束搜索,不再進行下一步的遍歷。因此,廣搜往往適用於求“最”類型的問題,如求:“最少步數的”,“最小轉折次數”。

       

  搜索的實質是遞歸(尤其是深搜)、是窮舉,遍歷的過程中,所需求的狀態必須滿足一定的條件,最常見的如:不能超出地圖範圍,行走的方式等。

  搜索實際上也是利用電腦的強大的計算能力進行大規模的運算求解答案,因此“剪枝”也非常的重要(對於oj的題來說,有時候不剪枝還會TLE),利用剪枝來減少計算量以及減少重複運算,從而降低時間複雜度。在剪枝時,常用的方法如:使用一個數組,來儲存遍歷過的位置、狀態。 

  當掌握了搜索算法的思想、熟悉了DFS和BFS格式之後,解決問題的難點就在對問題的分析和條件的分析上了。要清楚如何利用搜索這個工具去解決這個問題,這關係着代碼的具體實現。而當問題比較複雜的時候,需要滿足的條件往往也不是那麼顯而易見,需要去思考、捉摸,考慮有可能出現的各個情況(符合要求的和不符合要求的條件都要考慮到),不能漏條件,更不能錯。



發佈了48 篇原創文章 · 獲贊 4 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章