算法笔记之DFS与 BFS

基本思想:

深度优先搜索(DFS,Depth-First Search): 

它从某个状态开始,不断的转移状态直到无法转移状态,然后回退到前一步的状态,继续转移到其它状态,如此不继重复,直至找到最终的解。

宽度优先搜索(BFS,Breadth-First Search):

总是先搜索距离初始状态近的状态,也就是说,它是按照开始状态--->只需1次转移就可以到达的所有状态---->只需2次转移就可以到达的所有状态---->.....这样的顺序进行搜索,复杂度为 O(状态数X转移的方式)。 ----一般使用队列


实现方式:
1, DFS,一般使用栈的方式来实现,直接使用递归函数是最方便直接的;
2, BFS, 则使用队列的FIFO原则来实现BFS;
   
使用方式的比较:
1, 大多情况下使用深度优先搜索实现好,递归函数可以简短地编写,而且状态的管理也更简单,
2, 在求取最短路时深度优先搜索需要反复经过同样的状态,所以此时还是使用宽度优先搜索为好。也就是在求某经过路径时使用DFS, 在求最短路径时,则使用BFS.
使用内存的比较:宽度优先搜索会把状态逐个状态放入队列,因此通常需要与状态数成正比的内存空间。宽度优先搜索会把状态逐个状态放入队列,因此通常需要与状态数成正比的内存空间。

你可能感兴趣的:(算法)