深度优先搜索 广度优先搜索理解

article/2025/9/13 1:37:32

                                     深度优先搜索广度优先搜索

1. 什么是 “搜索” 算法

我们知道,算法都是作用于某种具体的数据结构上的,而深度优先搜索算法和广度优先搜索算法就是作用于图这种数据结构的。

图上的搜索算法,就是从图中的一个顶点出发,到另一个顶点的路径。图有两种存储方法,邻接矩阵和邻接表,在这里我们用邻接表来存储图,并以无向图作为例子,但这两种算法也同样都可以应用在有向图中。

V 为顶点个数,E 为边的条数。

 

深度优先搜索

深度优先搜索(Depth-First-Search),简称 DFS,最直观的例子就是走迷宫。

假设你站在迷宫的某个分岔路口,你想找到出口。你随意选择一个岔路口来走,走着走着发现走不通的时候就原路返回到上一个分岔路口,再选择另一条路继续走,直到找到出口,这种走法就是深度优先搜索的策略。

上图中,我们希望找到一条从 s 到 t 的路径,其中实线表示向前遍历,虚线表示回退。可以看到,深度优先搜索到的并不是从 s 到 t 的最短路径。

 

实际上,深度优先搜索用的是一种比较著名的思想——回溯思想,这种思想非常适合用递归来实现。深度优先搜索的代码里面有几个和广度优先搜索一样的部分 visited、prev 和 Print() 函数,它们的作用也都是一样的。此外,还有一个特殊的 found 变量,标记是否找到终止顶点,找到之后我们就可以停止递归不用再继续查找了。

 

在深度优先搜索算法中,每条边最多会被访问两次,一次是遍历,一次是回退。所以,深度优先搜索的时间复杂度为 O(E)。

visited、prev 数组的大小为顶点个数,而递归函数调用栈的最大深度不会超过顶点的个数,所以深度优先搜索的空间复杂度为 O(V)。

广度优先搜索

广度优先搜索(Breadth-First-Search),一般简称为 BFS。直观地讲,它其实就是一种地毯式层层推进的搜索策略,即先查找离起始顶点最近的,然后是次近的,依次往外搜索。

下面我们来看一下广度优先搜索的时间复杂度和空间复杂度。

最坏情况下,终止顶点 t 距离起始顶点 s 很远,需要遍历完整个图才能找到。这时候,每个顶点都要进出一遍队列,每条边也都会被访问一次。所以,广度优先搜索的时间复杂度为 O(V+E),V 为顶点个数,E 为边的条数。针对一个所有顶点都是联通的图,E 肯定要大于 V-1,所以时间复杂度可以简写为 O(V)。

 

空间复杂度主要是三个变量所占用的额外空间,和顶点个数成正相关,为 O(V)。

 

其中,有三个非常重要的辅助变量需要特别注意。

  • visited,布尔数组,记录顶点是否已经被访问过,访问过则为真,没有访问过则为假,这里用 0 和 1 表示。
  • vertex,记录上一层的顶点,也即已经被访问但其相连的顶点还没有被访问的顶点。当一层的顶点搜索完成后,我们还需要通过这一层的顶点来遍历与其相连的下一层顶点,这里我们用队列来记录上一层的顶点。
  • prev,记录搜索路径,保存的是当前顶点是从哪个顶点遍历过来的,比如 prev[4] = 1,说明顶点 4 是通过顶点 1 而被访问到的。

参考文献

https://zhuanlan.zhihu.com/p/95081559

 

https://blog.csdn.net/curry___/article/details/81742727

在这里插入图片描述


http://chatgpt.dhexx.cn/article/964it4DO.shtml

相关文章

深度优先搜索广度优先搜索

1 概述 算法是作用于具体的数据结构之上的,深度优先搜索算法和广度优先搜索算法都是基于图这种数据结构的。主要原因是因为图的这种数据结构表达能力很强,大部分涉及搜索的场景都可以抽象成图。 图上的搜索算法,最直接的理解就是&#xff0c…

邻接矩阵的深度优先搜索技术

概述 深度优先搜索(Depth First Search,DFS),是最常见的图搜索方法之一。深度优先搜索沿着一条路径一直走下去,无法行进时,回退回退到刚刚访问的结点,似不撞南墙不回头,不到黄河不死…

图-深度优先遍历

概述 深度优先遍历,从初始访问结点出发,初始访问结点可能有多个邻接结点,深度优先遍历的策略就是首先访问第一个邻接结点,然后再以这个被访问的邻接结点作为初始结点,访问它的第-一个邻接结点,可 以这样理解…

深度优先搜索python

深度优先搜索 概念 深度优先搜索和广度优先搜索一样,都是对图进行搜索的算法,目的也都是从起点开始搜索直到到达指定顶点(终点)。深度优先搜索会沿着一条路径不断往下搜索直到不能再继续为止,然后再折返,…

DFS——深度优先搜索

什么是DFS DFS,中文名深度优先搜索,是一种图的搜索方式,本质上是一种递归。 dfs相当自由,学dfs可能最高境界就和打太极似的,无招胜有招 DFS的经典应用: 1.全排列 虽然感觉没有贴题目的必要 这应该是大多数d…

算法详解之深度优先搜索算法

14天阅读挑战赛 文章目录 1、深度优先搜索(Depth-First Search,DFS)介绍2、深度优先搜索算法思想3、深度优先搜索算法步骤:4、深度优先搜索算法的应用 1、深度优先搜索(Depth-First Search,DFS&#xff09…

第七章:深度优先搜索

不撞南墙不回头-深度优先搜索 广度优先搜索BFS是每次将当前状态能够一步拓展出的所有状态,全部拓展出来依次存入队列。而深度优先搜索是将当前状态按照一定的规则顺序,先拓展一步得到一个新状态,再对这个这个新状态递归拓展下去。如果无法拓…

Java实现深度优先搜索

Java实现深度优先搜索 图的遍历 图的遍历就是访问图中的每个节点并且每个节点只访问一次。但图中有那么多节点,要如何进行访问就是一个问题,所以我们需要有特定的策略来进行访问这些节点。图的访问策略一般有两种:深度优先搜索和广度优先搜…

深度优先搜索

深度优先搜索: 深度优先搜索是对先序遍历的一般化。我们从某个节点开始,先处理,并将标记为已知,然后任意选择的一个邻接顶点,对其进行深度优先搜索,这样就递归的遍历了图的所有顶点。当图中有圈时&#xf…

【基础知识】一文看懂深度优先算法和广度优先算法

概览 先上个图 现在我们要访问图中的每个节点,即图的遍历。 图的遍历是指,从给定图中任意指定的顶点(称为初始点)出发,按照某种搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次&#xff…

深度优先搜索(DFS),看这一篇就够了。

一,定义: 深度优先搜索的思路和树的先序遍历很像,下面是百度百科上的定义: 深度优先遍历图的方法是,从图中某顶点v出发: (1)访问顶点v; (2)依次从…

Python实现深度优先遍历(DFS)和广度优先遍历(BFS)

一,简介 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序,寻路(走迷宫),搜索引擎,爬虫等,也频繁出现在 leetcode&am…

算法数据结构——图的遍历之深度优先搜索算法(Depth First Search)

1. 深度优先搜索简介 深度优先搜索算法(Depth First Search):英文缩写为 DFS。是一种用于搜索树或图的算法。所谓深度优先,就是说每次都尝试向更深的节点走。 深度优先搜索采用了回溯思想,该算法沿着树的深度遍历树的节…

【新书速递】实用安全多方计算导论

安全多方计算(MPC)是解决数据安全与隐私保护问题的关键安全数据交换技术,近年来发展迅速,但由于MPC涉及复杂的密码学和工程实现技术,行业长期缺乏同时具备MPC研究、应用和实现能力的综合性人才,这阻碍了MPC…

百万富翁问题--安全多方计算

百万富翁问题—安全多方计算 是由图灵奖获得者姚期智提出的。 有A、B两个富翁,A资产i亿元,B资产j亿元,i、j均在0-10范围内,在互不让对方知道自己资产的情况下,比较A和B的资产谁多谁少。 那么如何去比较呢?…

隐私保护技术之安全多方计算

安全多方计算(Secure Multi-Party Computation,SMPC)用于解决一组互不信任的参与方各自持有秘密数据, 协同计算一个既定函数的问题。安全多方计算在保证参与方获得正确计算结果的同时,无法获得计算结果之外的任何信息。 在整个计算过程中&…

基于同态加密体制的安全多方计算

本文首发公众号VenusBlockChain,关注公众号后可免费阅读!VenusBlockChain致力于区块链技术研究,传播区块链技术和解决方案、区块链应用落地、区块链行业动态等。有兴趣的小伙伴们,欢迎关注。 安全多方计算(Secure Mu…

多方安全计算

说明,本文是转载的,个人觉得作者讲解清晰明了,收录用于学习,原文链接:https://blog.csdn.net/yuxinqingge/article/details/104588197。 如今,互联网已经完成了从IT时代向DT时代转变,数据已经成…

多方安全计算MPC

1.多方安全计算的价值 MPC是密码学的一个重要分支,旨在解决一组互不信任的参与方之间保护隐私的协同计算问题,为数据需求方提供不泄露原始数据前提下的多方协同计算能力。 在目前个人数据毫无隐私的环境下,对数据进行确权并实现数据价值显得…

安全多方计算(MPC)

MPC既适用于特定的算法,如加法、乘法、AES,集合交集等;也适用于所有可表示成计算过程的通用算法。 根据计算参与方个数不同,可分为只有两个参与方的2PC和多个参与方(≥3)的通用MPC 1)安全两方&a…