数据结构与算法(四) 广度优先搜索 上

简介: 数据结构与算法(四) 广度优先搜索

前言


本篇文章继续来学习广度优先搜索算法(Broad-First-Search,BFS)


目录


1、本质

2、核心

3、框架

4、例题

5、优化


正文


1、本质


广度优先搜索本质上还是遍历整个搜索空间,找到给定问题的解

实际上也是一种暴力搜索算法,不过其中的实现细节和优化细节还是值得探讨的

深度优先算法略有不同,广度优先搜索是同时推进各搜索路径的(雨露均沾)

下面以图的遍历作为例子,直观上感受下广度优先搜索是一个怎么样的搜索过程

99.jpeg

假设初始节点为 1,目标节点为 9,则具体遍历步骤如下:

当前节点 当前节点的相邻节点 已被访问的节点
1 (初始) 234 1
234 56 1234
56 789 123456
789 (目标) / 123456789


2、核心


广度优先搜索的实现过程很容易理解,直观上感受就是每次从搜索边界向周围扩散一圈


更具体来说,我们需要维护一组节点,每次取出全部节点对其进行处理,然后将相邻的节点重新加入维护


直至遍历完所有节点、或者到达目标节点、或者满足结束条件时才停止上述过程



对标深度优先搜索,广度优先搜索也有几个核心的概念,分别是:


  • 当前节点集合:目前维护的节点集合,是上一步的相邻节点
  • 相邻节点集合:当前节点的相邻节点,是下一步的当前节点
  • 结束条件:表示遍历到哪些节点停止
  • 约束条件:表示哪些节点不可以遍历


对比深度优先搜索,广度优先搜索可以更快地找到抵达目标节点的最短路径

但是作为代价,广度优先搜索具有更高的空间复杂度,因此在使用过程中,需要根据实际情况进行选择


3、框架


广度优先搜索算法可以使用队列实现,大致过程描述如下


首先将初始节点加入队列,然后开始循环,直至队列为空


每次循环从队列取出所有节点并对其处理,然后再将每个节点的相邻节点加入队列


在这个过程中,还需要使用集合来标记已被处理过的元素,避免重复访问


具体的代码框架如下:


def bfs(初始节点):
  初始化步数为零
  初始化队列为空
  初始化集合为空
  将初始节点加入队列
  将初始节点加入集合
  while 队列不为空:
    for _ in 队列.长度():
          元素 = 队列.出队()
      if  元素能满足结束条件:
        表示当前元素合法,返回对应结果
      if  元素不满足约束条件:
        表示当前元素非法,跳过当前元素
      for 相邻元素 in 元素.相邻元素():
        if  相邻元素不在集合中:
          队列.入队(相邻元素)
          集合.加入(相邻元素)
    步数 += 1


目录
相关文章
|
1月前
|
算法 安全 Java
算法系列之广度优先搜索解决妖怪和尚过河问题
BFS 是一种逐层扩展的搜索算法,适用于寻找最短路径。我们可以将每个状态看作图中的一个节点,合法的移动就是节点之间的边。通过 BFS,我们可以找到从初始状态到目标状态的最短路径。
99 30
算法系列之广度优先搜索解决妖怪和尚过河问题
|
1月前
|
算法 Java
算法系列之深度/广度优先搜索解决水桶分水的最优解及全部解
在算法学习中,广度优先搜索(BFS)适用于解决最短路径问题、状态转换问题等。深度优先搜索(DFS)适合路径搜索等问题。本文将介绍如何利用广度优先搜索解决寻找`3 个 3、5、8 升水桶均分 8 升水`的最优解及深度优先搜索寻找可以解决此问题的所有解决方案。
81 7
 算法系列之深度/广度优先搜索解决水桶分水的最优解及全部解
|
1月前
|
监控 算法 安全
公司电脑网络监控场景下 Python 广度优先搜索算法的深度剖析
在数字化办公时代,公司电脑网络监控至关重要。广度优先搜索(BFS)算法在构建网络拓扑、检测安全威胁和优化资源分配方面发挥重要作用。通过Python代码示例展示其应用流程,助力企业提升网络安全与效率。未来,更多创新算法将融入该领域,保障企业数字化发展。
61 10
|
2月前
|
存储 算法
算法系列之搜索算法-广度优先搜索BFS
广度优先搜索(BFS)是一种非常强大的算法,特别适用于解决最短路径、层次遍历和连通性问题。在面试中,掌握BFS的基本实现和应用场景,能够帮助你高效解决许多与图或树相关的问题。
105 1
算法系列之搜索算法-广度优先搜索BFS
|
1月前
|
监控 算法 安全
基于 Python 广度优先搜索算法的监控局域网电脑研究
随着局域网规模扩大,企业对高效监控计算机的需求增加。广度优先搜索(BFS)算法凭借其层次化遍历特性,在Python中可用于实现局域网内的计算机设备信息收集、网络连接状态监测及安全漏洞扫描,确保网络安全与稳定运行。通过合理选择数据结构与算法,BFS显著提升了监控效能,助力企业实现智能化的网络管理。
40 7
|
6月前
|
机器学习/深度学习 存储 算法
数据结构与算法——BFS(广度优先搜索)
数据结构与算法——BFS(广度优先搜索)
|
10月前
|
存储 算法 Java
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
广度优先搜索(Breadth-First Search,BFS)是一种用于图的遍历或搜索的算法。
|
10月前
|
数据采集 算法 Java
Java数据结构与算法:图算法之广度优先搜索(BFS)
Java数据结构与算法:图算法之广度优先搜索(BFS)
|
10月前
|
算法 计算机视觉
图像处理之基于图的广度优先搜索组件标记算法
图像处理之基于图的广度优先搜索组件标记算法
60 0
|
10月前
|
存储 C语言
数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)
数据结构学习记录——图的遍历(深度优先搜索、广度优先搜索、为什么需要两种遍历、图不连通怎么办)
150 0

热门文章

最新文章