【原创】浅谈搜索(下-bfs)

64 篇文章 11 订阅

浅谈搜索 下

2016-09:浅谈搜索 上:http://blog.csdn.net/c20182030/article/details/52682475

2016-10:浅谈搜索 中:http://blog.csdn.net/c20182030/article/details/52796321

2016-11:枚举枚上天,暴力出奇迹:http://blog.csdn.net/c20182030/article/details/53127890

2017-07:浅谈搜索 下:这篇博客

时隔九个月,我们来完结暴力系列。
想想心里还是有点小伤感的。
现在来讲讲当初还没有理解现在很理解的广搜。

开场白

搜索,一种最基本,也是最重要的算法。无数高级思想都建立在搜索的基础上。当你学会搜索时,你就跨入了一个新的阶段。所以说,搜索,是每个编程人的进阶科目。

搜索,分为深搜(英文缩写dfs)和广搜(又叫宽搜,英文缩写bfs)。相比较来说,深搜较为简单,广搜更为管用。

深搜,就是有路就走,画成图片来看,就像植物的根,扎根很深,故名深搜。

广搜,我也不知道为什么叫广搜。

废话不多说,让我们在更加深入的了解搜索吧!

开始

开场白是不是很愚蠢?我也这么觉得。

bfs是什么呢?
我们举几个例子你就明白了。

  1. 你的眼镜掉地上了,你先摸你最近的,然后稍远一点的,再远一点,再远一点……
  2. 在画树状图求概率的时候,你仔细检查每一次有没有写对,第一次,第二次……

是不是很简单明了地没有明白?

在正式讲bfs以前,我们先来看一看dfs的坏处。
如果我们想要求迷宫里从起点到终点的最短路径,dfs就是把所有路径都走一遍,计算各条路径的长度。
假设你是真的在走迷宫,你要把所有路走完,那不累死!如果我们有分身术,能够派分身去走那些分支的路,而我本人就安安心心的走一条路。如果有分身到了终点,那就合体,走出去。

bfs的实现

上文的“分身”诠释是我最能诠释bfs的诠释。
那么,我们可以看出,bfs是个分层次的搜索。

我们要达到的效果是这样:
这里写图片描述

我们可以考虑用队列来存储当前的层次的结点。

naive-队列
队列
naive-优先队列
优先队列

我们把层次1的结点入队,在一一取出来,记为结点i,把与i直接相邻的层次2的结点入队。此时层次2在队列后面,而我们可以继续畅通无阻的取其他层次1的结点。把层次1的结点取完以后,队列里只剩层次2的结点了。以此类推。

结语

对,本篇博客很水,连个代码都没有。只是了了个心愿,哎。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值