算法导论——DFS、BFS
Victory_Defeat
2018-08-31 14:10:22
DFS(Depth First Search)为**深度优先搜索**,也就是说**先尽量向下搜索**,若无法继续搜索,则向上回溯
DFS的思路再简单不过,但是时间复杂度**十分玄学**,大致是$O \left ( n^3 \right )$左右,也就是说,DFS**很容易被卡**,这时候就需要**剪枝**
剪枝有很多种,主要分为:**可行性剪枝、最优性剪枝和记忆化搜索**
可行性剪枝是指将**不合法的给去掉**,并没有难度,但是效率**不错**
最优性剪枝是指将**比当前答案还不好的给去掉**,有一定难度,效率**奇高**
记忆化搜索则是最**高效的**,其效率远远大于前面两者,但是**空间会变得很大**,这就是**空间换时间**,时间也就大致相当于空间,这样不会TLE,也基本不用担心MLE,可以说是**几乎完美了**
BFS(Breadth First Search)为**广度优先算法**,**先搜索同层的,再搜索下一层**
BFS的剪枝比DFS要多两样:**队列优化和双向BFS**
队列优化顾名思义,是使用**队列优化BFS**
而双向BFS则是**在一端BFS的同时,另一端也进行BFS,轮流进行,更容易找到答案**,这样的话,**效率会提升许多**,非常实用
BFS码量大,但是**由于其无需递归,所以效率会高一些**