中國數學建模-編程交流-搜索算法基礎

中國數學建模-編程交流-搜索算法基礎

ID:14400612

大小:101.50 KB

頁數:22頁

時間:2018-07-28

中國數學建模-編程交流-搜索算法基礎_第1頁
中國數學建模-編程交流-搜索算法基礎_第2頁
中國數學建模-編程交流-搜索算法基礎_第3頁
中國數學建模-編程交流-搜索算法基礎_第4頁
中國數學建模-編程交流-搜索算法基礎_第5頁
資源描述:

《中國數學建模-編程交流-搜索算法基礎》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。

1、中國數學建模-編程交流-搜索算法基礎搜索算法基礎搜索算法是利用計算機的高性能來有目的的窮舉一個問題的部分或所有的可能情況,從而求出問題的解的一種方法。搜索過程實際上是根據初始條件和擴展規(guī)則構造一棵解答樹并尋找符合目標狀態(tài)的節(jié)點的過程?!∷械乃阉魉惴◤钠渥罱K的算法實現上來看,都可以劃分成兩個部分──控制結構和產生系統(tǒng),而所有的算法的優(yōu)化和改進主要都是通過修改其控制結構來完成的?,F在主要對其控制結構進行討論,因此對其產生系統(tǒng)作如下約定:FunctionExpendNode(Situation:Tsituation;ExpendWayNInteger):TSituation; 表示對給

2、出的節(jié)點狀態(tài)Sitution采用第ExpendWayNo種擴展規(guī)則進行擴展,并且返回擴展后的狀態(tài)。(本文所采用的算法描述語言為類Pascal。) 第一部分 基本搜索算法 一、回溯算法回溯算法是所有搜索算法中最為基本的一種算法,其采用了一種“走不通就掉頭”思想作為其控制結構,其相當于采用了先根遍歷的方法來構造解答樹,可用于找解或所有解以及最優(yōu)解。具體的算法描述如下:[非遞歸算法]<Type> Node(節(jié)點類型)=Record Situtation:TSituation(當前節(jié)點狀態(tài)); Way-NInteger(已使用過的擴展規(guī)則的數目);End<Var> List(回溯表):Ar

3、ray[1..Max(最大深度)]ofNode; pos(當前擴展節(jié)點編號):Integer;<Init> List<-0; pos<-1; List[1].Situation<-初始狀態(tài);<MainProgram> While(pos>0(有路可走))and([未達到目標])do Begin  Ifpos>=Maxthen(數據溢出,跳出主程序);   List[pos].Way-N=List[pos].Way-No+1;  If(List[pos].Way-NO<=TotalExpendMethod)then(如果還有沒用過的擴展規(guī)則)  Begin   If(可以使用當前擴展

4、規(guī)則)then   Begin    (用第way條規(guī)則擴展當前節(jié)點)    List[pos+1].Situation:=ExpendNode(List[pos].Situation,List[pos].Way-NO);    List[pos+1].Way-N=0;    pos:=pos+1;   End-If;  End-If  ElseBegin   pos:=pos-1;  End-Else End-While;  [遞歸算法]ProcedureBackTrack(Situation:TSituation;deepth:Integer);VarI:Integer;Beg

5、in Ifdeepth>Maxthen(空間達到極限,跳出本過程); IfSituation=Targetthen(找到目標); ForI:=1toTotalExpendMethoddo  Begin   BackTrack(ExpendNode(Situation,I),deepth+1); End-For;End;  范例:一個M*M的棋盤上某一點上有一個馬,要求尋找一條從這一點出發(fā)不重復的跳完棋盤上所有的點的路線?! ≡u價:回溯算法對空間的消耗較少,當其與分枝定界法一起使用時,對于所求解在解答樹中層次較深的問題有較好的效果。但應避免在后繼節(jié)點可能與前繼節(jié)點相同的問題中使用,以

6、免產生循環(huán)?!《⑸疃人阉髋c廣度搜索 深度搜索與廣度搜索的控制結構和產生系統(tǒng)很相似,唯一的區(qū)別在于對擴展節(jié)點選取上。由于其保留了所有的前繼節(jié)點,所以在產生后繼節(jié)點時可以去掉一部分重復的節(jié)點,從而提高了搜索效率。這兩種算法每次都擴展一個節(jié)點的所有子節(jié)點,而不同的是,深度搜索下一次擴展的是本次擴展出來的子節(jié)點中的一個,而廣度搜索擴展的則是本次擴展的節(jié)點的兄弟節(jié)點。在具體實現上為了提高效率,所以采用了不同的數據結構.  [廣度搜索]<Type> Node(節(jié)點類型)=Record Situtation:TSituation(當前節(jié)點狀態(tài)); Level:Integer(當前節(jié)點深度); 

7、Last:Integer(父節(jié)點);End<Var> List(節(jié)點表):Array[1..Max(最多節(jié)點數)]ofNode(節(jié)點類型); open(總節(jié)點數):Integer; close(待擴展節(jié)點編號):Integer; New-S:TSituation;(新節(jié)點)<Init> List<-0; open<-1; close<-0; List[1].Situation<-初始狀態(tài); List[1].Level:=1; List[1].Last:=0;<Main

當前文檔最多預覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數學公式或PPT動畫的文件,查看預覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內容,確認文檔內容符合您的需求后進行下載,若出現內容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網絡波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。