BFS是一种使用十分广的算法,很多地方都会用到它。
可是。。。由于是一种暴搜,其时间以及空间的复杂度都极大,很小的数据量就会超时或爆内存
于是,我们需要将其进行优化~
双向BFS就是对于其中一种情况的十分有效的优化方法。
使用双向的首要条件是:每一种状态的扩展,从开始到目标或者倒过来都是相同的;如果符合这样的情况,就可以用到双向~
主要思想:
从开始状态扩展,形成一层新的状态节点;
与目标状态的最新一层比较,判断有无相同的状态
从目标状态以相同的方式扩展,形成一层新的状态节点;与开始的最新状态比较,判断有无相同的状态;
只要有相同的状态存在,则说明:可以从开始节点以最短的路径:开始节点的扩展数+目标节点的扩展数到达目标节点。
其中,需要注意的是同一个状态的判重。
这样一来,时间以及空间就节省不少;
因为每向外扩展一层,状态节点就要增加一个数量级;
如果用的双向,那么就将这个数量级的增加减慢了,但是效果并不减少。