淺談迭代加深搜索


淺談迭代加深

本篇隨筆簡單講解一下算法競賽中搜索算法中的迭代加深DFS。

為什么需要迭代加深

先來上發講解圖:

在學習迭代加深深搜之前,我們先簡單回顧一下深搜。深搜的本質是對圖的深度優先遍歷。也就是“先往深了走,走完了沒找到就換條路繼續走”。對於那種無法一眼看出來是圖論的問題,我們需要先把問題給定的條件抽象為一棵“搜索樹”,然后在抽象出來的搜索樹上進行深搜,解決問題。

假設上圖就是我們針對某一個問題所抽象出來的搜索樹。我們給定答案節點是4號節點。

那么,根據深搜的定義,我們進行算法的順序是1-2-5-10-11-6-12-13-3-7-14-15-16-17-8-4-9.

我們發現,直到最后兩步才找到4.

效率貌似很慢的樣子。

為什么呢?

這是深搜本身的性質決定的,它的搜索順序就是這樣,這個算法不能“千變萬化”,根據你問題的答案位置調整順序,迭代加深也不行(你在想peach)。

如果你說,為什么不用廣搜?

剛剛已經說過了,你設計的算法是成型投產的,你不可能針對一組數據,腦算出它的答案地點,然后再重新寫程序吧?

所以,當我們設計出一款深搜程序,又不想因為被出題人特殊構造數據卡掉的時候,也許我們需要迭代加深

迭代加深的概念

迭代加深的過程,就是每次對搜索的深度進行一個限制,如果在當前限定下搜不到答案,就把深度限制增加,然后重新進行一次搜索

比如,對於剛剛的搜索樹。

假如限制是1,不行。

限制是2,搜到,結束。

假設答案是9號點的話,就再限制3,搜到,結束。

但是要提及的是,我們的搜索方式並不是擴展,而是迭代。

也就是說,限制是1,我們搜了1號點,沒搜到答案。

限制換成2的時候,我們就需要重新從1號點開搜,因為如果變成在原有基礎上擴展的話,就變成廣搜了。雖然沒必要,但是對不起,人家算法就是這么設計的,你學就得了。

所以,我們看得出來,這是一個低效率的算法,他的時間復雜度是呈指數級增長的。所以,它的試用條件是:

當搜索樹非常深,但是我們能確定答案一定在淺層節點時,就可以使用迭代加深DFS


免責聲明!

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



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