深度优先搜索(DFS)与宽度优先搜索(BFS)

8 篇文章 0 订阅

深度优先搜索和宽度优先搜索是两种不用的搜索理念。

 

深度优先搜索

深度优先搜索会选择当前节点的一个子节点进行深入,然后对子节点再进行深度优先搜索,一直搜索到叶节点,然后向上回溯,再对另一个子节点进行深度优先搜索。既先进行深度搜索,深度搜索无目标时进行宽度搜索。找到目标则结束搜索。

深度优先搜索用栈(stack)来实现 

1、把根节点压入栈中。

2、从栈中弹出一个元素,检查是否为目标元素,如果是则结束。如果不是,则将其所有的子节点压入栈中,然后重复此步骤。

3、如果树遍历完毕还没有搜素到则结束。

宽度优先搜索(又称广度优先搜索)

宽度优先搜索则是对于当前节点,首先将当前节点的所有子节点都搜索一遍,如果没有目标,则对每一个子节点进行广度搜索,直到找到目标或者搜索完毕。既先进行宽度搜索,宽度搜索无目标时进行深度搜索。找到目标则结束搜索。

宽度优先搜索使用队列(queue)来实现,整个过程也可以看做一个倒立的树形:

1、把根节点放到队列的末尾。

2、从队列的头部取出一个元素,检查是否为目标元素,如果是则结束。如果不是则将这个节点的所有子节点放到队列的末尾。然后重复此步骤。

3、如果树遍历完毕还没有搜素到则结束。

示例

对于以上树:

深度优先搜索的搜索顺序为:A->B->D->H->E->C->F->G

广度优先搜索的搜索顺序为:A->B-->C->D->E->F->G->H

参考:

百度百科:深度优先搜索

百度百科:宽度优先搜索

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yue_hu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值