1-广度优先算法详解

本文较为完善地介绍了广度优先算法原理,并利用matlab实现
摘要由CSDN通过智能技术生成

1 引言-第一篇纪念

注册CSDN已经6年了,一直潜水,最近决定对自己过去几年的学习资料加以整理,先挖一个坑,从最基本的优化算法开始,一步步写写各种常用的优化算法吧。

2 广度优先算法思路图解

优化算法千千万万,相信很多同学和我一样,作为新手刚开始接触时大多很懵,不知从何学起从学起,无从下手。因此,经历过这个阶段的我尝试用尽量通俗易懂的描述对相关常用优化算法进行讲解。而所有优化算法中,广度优先搜索算法(Breadth First Search/BFS)是最简单的搜索算法之一,其思路也一点就通,因此,就允许在下从广度优先算法开始,一步步走近优化算法的海洋。

广度优先算法可以理解为暴力的穷举法,即从起点出发,遍历图中的所有节点,直到找到终点。

基本的描述其他博主已经写了很多了,这里直接上图:

2.1全局搜索

图 1  连接关系图

如图 1 所示,存在10个节点,其中节点0为起点,节点10为终点,用无箭头直线表示各节点之间的连接关系,从节点0搜寻到达节点10的路径流程如下:

第一步:初始化

将起点(节点0)加入队列,此时队列列表为[0];

图 2  第一步

第二步:搜索第一层

依次搜寻节点0的所有邻接节点,并按顺序加入队列,同时将节点0从队列中删除并将节点0放入已访问列表;

图 3 第一层搜索结束

图中灰色表示队列,黄色表示已访问列表。即第二步后,已访问列表为[0],队列列表为[1, 4, 2];

第三步:搜索第二层

a) 按顺序从队列中选取第一个节点(即节点1),依次搜寻当前节点的所有邻接节点,可见节点1的邻接节点为节点0和节点3,由于节点0已经在已访问列表,因此略过,从而得到节点1的邻接节点列表为[3]。

b) 将节点3加入队列,同时将节点1从队列中删除,并将节点1加入已访问列表,此时已访问列表为[0,1],队列列表为[4,  2, 3];

c) 以此类推,循环执行行a)b),需要说明的时,节点4的邻接节点也包含节点3,但是节点3已经作为节点1的邻接节点被搜索到了,为避免重复搜索,这 里规定在队列列表和已访问列表中的节点不再被搜索。

图4 第三步第一小步

完成第一层邻接节点的搜寻后,结果如下:

图 5 第二层搜索结束

此时已访问列表为[0,1,4,2],队列列表为[3,6,7,5];

第四步:搜索第三层

重复第三步的工作,结果如下:

图 6 第三层搜索结束

此时已访问列表为[0,1,4,2,3,6,7,5],队列列表为[9, 8];

第五步:搜索第四层,找到终点

重复第三步的工作,此时发现终点(节点10)已经在队列中,搜索结束:

此时已访问列表为[0,1,4,2,3,6,7,5,9, 8],队列列表为[10];

图 7 第四层搜索结束
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

宇智波-二柱子

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

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

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

打赏作者

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

抵扣说明:

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

余额充值