搜尋演算法是利用計算機的高效能來有目的的窮舉乙個問題的部分和所有的可能情況,從而求出問題的解的一種方法。
常用的搜尋演算法有:
一.回溯法
回溯演算法是所有搜尋演算法中最為基本的一種演算法,其採用了一種「走不通就掉頭」思想作為其控制結構,其相當於採用了先根遍歷的方法來構造解答樹,可用於找解或所有解以及最優解。
二.深度優先搜尋和廣度優先搜尋
深度搜尋與廣度搜尋的控制結構和產生系統很相似,唯一的區別在於對擴充套件節點擊取上。由於其保留了所有的前繼節點,所以在產生後繼節點時可以去掉一部分重複的節點,從而提高了搜尋效率。這兩種演算法每次都擴充套件乙個節點的所有子節點,而不同的是,深度搜尋下一次擴充套件的是本次擴充套件出來的子節點中的乙個,而廣度搜尋擴充套件的則是本次擴充套件的節點的兄弟節點。
廣度優先搜尋一般只用於找最優解,不會用於找所有解;深度優先搜尋可以搜尋出所有的解。
三.雙向廣度優先搜尋
廣度搜尋雖然可以得到最優解,但是其空間消耗增長太快。但如果從正反兩個方向進行廣度搜尋,理想情況下可以減少二分之一的搜尋量,從而提高搜尋速度。
四.分支限界
對於每個擴充套件出來的節點給出乙個預期值,如果這個預期值不如當前已經搜尋出來的結果好的話,則將這個節點(包括其子節點)從解答樹中刪去,從而達到加快搜尋速度的目的。
五.a*演算法
a*演算法中更一般的引入了乙個估價函式f,其定義為f=g+h。其中g為到達當前節點的耗費,而h表示對從當前節點到達目標節點的耗費的估計。其必須滿足兩個條件:
1、h必須小於等於實際的從當前節點到達目標節點的最小耗費h*。
2、f必須保持單調遞增。
a*演算法的控制結構與廣度搜尋的十分類似,只是每次擴充套件的都是當前待擴充套件節點中f值最小的乙個,如果擴充套件出來的節點與已擴充套件的節點重複,則刪去這個節點。如果與待擴充套件節點重複,如果這個節點的估價函式值較小,則用其代替原待擴充套件節點。
六.其他的一些智慧型演算法
一些智慧型演算法:遺傳演算法,蟻群演算法,模擬退火演算法等。
推薦**:好巴鹿(
A 搜尋演算法
啟發式搜尋演算法 要理解 a 搜尋演算法,還得從啟發式搜尋演算法開始談起。所謂啟發式搜尋,就在於當前搜尋結點往下選擇下一步結點時,可以通過乙個啟發函式 來進行選擇,選擇代價最少的結點作為下一步搜尋結點而跳轉其上 遇到有乙個以上代價最 少的結點,不妨選距離當前搜尋點最近一次展開的搜尋點進行下一步搜尋 ...
A 搜尋演算法
a 演算法是基於bfs的一種入門級啟發式搜尋演算法,就是將bfs的佇列改為基於估價的優先佇列,可以快速地找到答案。優先隊列為小根堆 while 優先佇列不為空 取出隊頭並擴充套件 將擴充套件節點以估價值 當前值為優先順序入隊 endwhile估價函式越接近真實值演算法越優,但一定不能大於真實值,否則...
爬山搜尋演算法
1.爬山法 hill climbing 爬山法是向值增加的方向持續移動到簡單迴圈過程,演算法在到達乙個 峰頂 時終止,此時相鄰狀態中沒有比該 峰頂 更高的值。爬山法不維護搜尋樹,當前節點只需要記錄當前狀態及其目標函式值 爬山法不會前瞻與當前狀態不直接相鄰的狀態的值 就像健忘的人在大霧中試圖登頂珠峰一...