POJ 2286 IDA 搜尋(迭代加深搜尋演算法)

2021-08-25 08:13:51 字數 1406 閱讀 5461

ida*搜尋又成為迭代加深搜尋,感覺迭代加深這個稱謂就基本概括了這種搜尋算沒的核心。首先所以討論一下什麼迭代加深搜尋,深度優先搜尋乙個局面可以搜尋很多很多層,這種情況很可能時間啊複雜度很大;怎麼辦呢?聰明的人們想到了限制限制了搜尋深度,正是所謂的迭代加深搜尋,就是在深度無上限的情況下,先預估乙個深度(盡量小)進行搜尋,如果沒有找到解,再逐步放大深度搜尋。這種方法雖然會導致重複的遍歷 某些結點,但是由於搜尋的複雜度是呈指數級別增加的,所以對於下一層搜尋,前面的工作可以忽略不計;

總的來說,迭代加深搜尋是在速度上接近廣度優先搜尋空間上和深度優先搜尋相當的搜尋方式。由於在使用過程中引入了深度優先搜尋,所以也可以當作深度優先搜尋的優化方案。

迭代加深搜尋適用於當搜尋深度沒有明確上限的情況

又從別的大佬那裡看到一張圖,可以看出ida*搜尋和廣搜的搜尋形式相同,但是只要搜尋到答案的深度就可以了,不像廣蒐會跑完整張圖。

題意:乙個個井字形的棋盤上有8個1,8個2,8個3,有8個操作(標號為a~h),表示把某一行或某一列進行挪動,頭位數字放到尾部,其他依次挪一格,求出字典序最小的操作序列。

#includeusing namespace std;

int step[10][10]=,// a

,// b

,// c

,// d

,//e

,//f

,//g

,//h

};int index[9]=;//中心位置的方塊用於檢查

int map[30];

char ans[100];

int check()

return 1;

}int move(int loc)

map[step[loc][6]]=head;

return 0;

}int pre()

return most;

}int dfs(int d,int dm )

if(i%2==0)

else

move((i+3)%8);

} return 0;

}int main()

// for(int i=0;i<24;i++)

// cout<

if(check())

else

ans[i]='\0';

cout<

} cout<

} return 0;

}

深搜 IDA 演算法 POJ2286

寫得真是太好了 而ida 演算法具有如下的特點 綜合了a 演算法的人工智慧性和回溯法對空間的消耗較少的優點,在一些規模很大的搜尋問題中會起意想不到的效果。它的具體名稱是 iterative deepening a 1985年由korf提出。該演算法的最初目的是為了利用深度搜尋的優勢解決廣度a 的空間...

IDA 搜尋 迭代加深

首先放一道例題 給出n個數,以及目標m,需要用這n個數中的若干個數加起來等於m,問所有方案中使用的數的數量最少的方案是什麼。顯然,對於這道題,我們並不知道搜尋的深度會是多少,如果放任程式像野狗一樣滿場子亂搜,那麼肯定tle無疑了。由於需要記錄答案,所以用廣搜的話空間可能會炸。於是,我們只能用深搜,為...

IDA (迭代加深搜尋)

首先我們先來上一下這個東西的概念 ida 演算法就是基於迭代加深的a star演算法 此演算法的優勢,主要是改成了深度優先的方式,與a比起來,ida更實用 1.不需要判重,不需要排序 2.空間需求減少。最典型的應用就是八數碼問題和十五數碼問題。上面這一條我還是真的沒有看出來!這道題還是比較基礎的,但...