迭代加深ID-DFS搜索算法


迭代加深ID-DFS搜索算法

迭代加深搜索,實質上就是限定下界的深度優先搜索。即首先允許深度優先搜索K層搜索樹,若沒有發現可行解,再將K+1后重復以上步驟搜索,直到搜索到可行解。

迭代加深搜索算法的實現原理及基本框架

在迭代加深搜索的算法中,連續的深度優先搜索被引入,每一個深度約束逐次加1,直到搜索到目標為止。

基本框架如下:

ProcedureID-dfs(dep:integer);

Var

 J:integer;

Begin

 Ifdep>深度的限界thenexit;//如果搜索的深度大於限界,則返回上一層

 Forj:=1tondo // 按照規則生成子結點

  If子結點安全then

   Begin

     入棧;

     If子結點是目標結點then對目標結點進行處理,退出程序

         Elseid-dfs(dep+1);

     退棧;

   End;

End;

    

Fori:=1todepmaxdo//枚舉深度的限界

Begin

   Id-dfs(i);

   If運行超時thenbreak;

End;

迭代加深搜索算法的復雜度分析

從上述迭代加深搜索算法的實現過程和框架,我們可以看出,迭代加深搜索算法就是仿廣度優先搜索的深度優先搜索。既能滿足深度優先搜索的線性存儲要求,又能保證發現一個最小深度的目標結點。(時間復雜度推算詳見NOI導刊2010年第6期P26)

從實際應用來看,迭代加深搜索的效果比較好,並不比廣度優先搜索慢很多,但是空間復雜度卻與深度優先搜索相同,比廣度優先搜索小很多。

迭代加深搜索算法的應用

使用搜索算法的時候,選擇正確的搜索方式很重要。當有一類問題需要做廣度優先搜索,但卻沒有足夠的空間,而時間卻很充裕,碰到這類問題,我們可以選擇迭代加深搜索算法。

例題:POJ 2286 The Rotation Game

 

四、總結

一般來說,如果目標結點離根結點遠,需要遍歷整棵樹,可以考慮使用深度優先搜索;如果目標離根結點近,或求最小步數,則考慮廣度優先搜索或迭代加深搜索;若廣度優先搜索存在空間不夠的問題,則考慮使用迭代加深搜索。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM