目录
回顾/本期梗概
上期我们学习了搜索优化、搜索进阶(空降链接)本期我们将学习迭代加深搜索、启发式搜索、A、IDA。
一、迭代加深搜索(IDDFS)
1、IDDFS基础知识
1)什么是迭代加深搜索
迭代加深搜索(IDDFS)是深度优先搜索,与普通的dfs不同的是,每次深搜都会有搜索的最大深度限制,如果没有找到解,那么就增大深度,再进行深搜,如此循环直到找到的解为止,这样可以找到最浅层的解。
IDDFS适和求解:搜索深度较深,但正确的解再较浅的深度的问题。
IDDFS的使用前提是:一定要有解。
2)迭代加深的基本结构
while(!dfs(maxdep))
maxdep++;
3)IDDFS和BFS比较优势是什么
BFS 的基础是一个队列,队列的空间复杂度很大,当状态比较多或者当状态比较大时,使用队列的BFS就显出了了劣势。事实上,迭代加深就类似于用DFS方式实现的BFS,他的空间复杂度相对较小。
IDDFS和BFS相比的优势在于:空间复杂度会小很多,也可以配合剪枝来提升搜索效率。
4)IDDFS中的复杂计算问题
当搜索树的分支比较多时,每增加一层的搜索复杂度会出现指数级爆炸式增长,这时前面重复的部分所带来的复杂度几乎可以忽略,这也就是为什么迭代加深可以近似看成BFS的。
二、A*算法
1、A*算法基础知识
启发式搜索(Heurisrically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜索,达到减少搜索范围、减低问题复杂度的目的,这种利用启发信息的搜索过程称为启发式搜索。
启发式策略:可以通过指导搜索向最有希望的方向前进,降低了复杂度。通过删除某些状态及其延伸,启发式算法可以消除组合爆炸,并得到令人能接受的解。