BFS的优化有双向BFS和A*算法
双向BFS:用来求最短路,是普通BFS求最短路模型的优化,通过每次向不同的方向扩展(一个是从起点往终点搜,还有一个是从终点向起点搜,如果两个队列中有相同的则说明走通),让搜索空间缩小,提高搜索效率
A*算法:为启发式算法,可以看成是堆优化版dijkstra算法的升级,增添了一个估价函数(这个估价函数的值应该小于等于真实值),通过将现在已经走过的路程和估价函数相加,利用最小堆即可实现
而堆优化版的dijkstra算法可以看成是估价函数为0的A*算法
DFS的优化有双向DFS,迭代加深和IDA*算法
双向DFS:打表,因为DFS一搜就要搜到底,所以不能和双向BFS一样,在每次扩展之前都选一次方向,但是双向DFS可以打表,即先将一半的数据处理好储存起来,然后在处理另一半数据的时候利用二分,找表中合适的数据进行更新,是一种空间换时间的做法
迭代加深:相当于加了一个关于搜索层数的剪枝
IDA*算法:一般与迭代加深一起使用,和迭代加深类似也是加了一个关于搜索层数的剪枝,只不过IDA*的剪枝是启发式的,即需要判断当前层数+估价函数(即最少还需要搜索几层) ,与最大层数进行比较剪枝
%%%