可能很多初學者看到了迭代加深搜索這個名字就感覺“哇,好高級啊,學起來一定很復雜。”
但是事實卻不是這樣,只要你有過BFS和DFS的基礎,理解起來其實是非常容易的。
為了形象地解釋迭代加深搜索(IDDFS,Iterative Deepening Depth-first Search。網上找了一下,發現並沒有這個全稱。)
從圖中可以看出,從起點開始搜索。使用DFS,搜到的第一個解便是X3。而使用BFS,搜到的第一個解便是X2。但目前的最優解是X1。盡管兩種方法最終都可以搜到解X1,但卻無法保證最優的時間復雜度。
迭代加深搜索(IDDFS)就這樣誕生了。本質上它其實是給DFS加了一個限制。我們都知道DFS有層數這個概念。IDDFS便規定了一個層數,讓DFS只能在這一個規定的層數里進行。
比如我們規定DFS只能在上圖的深度為1的地方進行,很明顯它便可以輕松地搜索的了最優解。
於是便可以得出IDDFS基本的框架:
void iddfs(層數參數) {
if(層數>規定最大層數) return ;
進行搜索......
}
int main() {
for(從一開始枚舉規定最大層數) {
iddfs(1);
}
}