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

posted @ 2015-08-13 22:59  Mite  阅读(142)  评论(0)    收藏  举报