Introduction to DFS & BFS
DFS(Depth First Search), 深度优先搜索.
利用递归的思想.其中,什么是递归?
递归?参考递归,直到理解递归.
那么递归有两个条件
1)终止条件
2)逐层靠近
[1]
对于一棵树(或者图)的当前节点,如果其子节点中还有未搜索的点,则继续搜索此点.否则回溯.
DFS(x): for v in child(x) and not visit(v) //当child子集为空时,已经包含终止条件 DFS(v)
BFS(Breadth First Search),宽度优先搜索.
[1]
BFS利用queue来实现.
对于一棵树,
1)当队列不为空,则每次从队列取得队首的节点,然后出队.
2)再把当前节点的子节点加入队列.回到1)
BFS(): push(start) while(not empty) x = pop() if x is goal return answer for v in child(x) and not visit(v) push(v)
return not find
Conclusion
DFS和BFS都是搜索,这两种搜索各有优点.
DFS由于递归调用的缘故,花费时间较长,容易出现爆栈的情况
BFS由于用到队列,占用空间大.其中,BFS适合寻找边权相等图的最短路
Last but not Least
善用百度&google,由于DFS和BFS都是最基础的算法,所以读者应该不难理解.
Reference
[1]http://wenku.baidu.com/link?url=Dw9w5-8m_2jDSCK4xbph6t-wn0TPIh42HYhJu28D1nMrl3C8f6Bddh-bnWYZaKt9_XzDpRHtjfdvgcXVjVsYqQrCoootPfYhUIArqpxAVxm
[2]http://blog.csdn.net/njdragonfly/article/details/5450350

浙公网安备 33010602011771号