BFS和DFS有什么区别

目录:

Anonim

主要区别 BFS 和 DFS 之间是 BFS 或广度优先搜索逐级进行,而 DFS 或深度优先搜索遵循从开始节点到结束节点的路径,然后从开始到结束移动到另一条路径,依此类推,直到访问所有节点。

图是一种非线性数据结构,它将数据元素排列为网络模型。图中的节点称为顶点,边连接这些节点。使用搜索方法可以解决大多数图形问题。广度优先搜索 (BFS) 和深度优先搜索 (DFS) 是常用的搜索方法。简而言之,BFS 使用队列,而 DFS 使用堆栈。

BFS、DFS

什么是 BFS

BFS 代表 呼吸优先搜索.它使用队列。过程如下。

一个例子如下。

图 1:BFS

假设上图中的起始顶点是1,连接到1的节点是2和4,所以我们可以将1、2、4放在一个队列中。输出为 1、2、4。对于 1,没有剩余的顶点。因此,我们可以从队列中删除 1。现在我们可以移动到 2。2 的相邻顶点是 3、5 和 6。因此,我们可以将 3、5 和 6 放入队列中。输出是1, 2, 4, 3, 6。除了这三个数字外,没有相邻的顶点连接到2。因此,我们可以从队列中删除2。现在,让我们移动到 4。与 4 相邻的唯一节点是 6。它已经被访问过。 4 没有更多的顶点。因此,我们可以从队列中删除 4。您必须重复此过程,直到队列为空。它表示搜索操作的终止。

什么是 DFS

DFS 代表 深度优先搜索.过程如下。

访问相邻的未访问顶点并将其标记为已访问。然后,将其显示在输出中并将其压入堆栈。

如果没有找到相邻的顶点,则从堆栈中弹出顶点。

继续以上两步,直到栈为空。

图 2:DFS

起始顶点是 A。它被压入堆栈。相邻的顶点是 B 和 E。考虑 B。我们可以将 B 压入堆栈。由于没有与 B 相邻的节点,我们可以将 B 从堆栈中弹出。输出是 A B。与 A 相邻的剩余节点是 E,因此,我们可以将 E 弹出堆栈。现在输出是 A B E。

由于没有与 A 相邻的节点,我们可以将“A”从堆栈中弹出。 E 的相邻节点是 C 和 H。现在,考虑 C。我们可以将 C 压入堆栈。输出为 A B E C。该过程一直持续到堆栈为空。它终止搜索操作。

BFS和DFS的区别

定义

BFS(广度优先搜索)是一种图遍历算法,它从根节点开始遍历图并探索所有相邻节点。 DFS(深度优先搜索)是一种算法,从图的初始节点开始,然后越来越深,直到找到所需的节点或没有子节点的节点。因此,这是 BFS 和 DFS 之间的主要区别。

长表

BFS 代表广度优先搜索,DFS 代表深度优先搜索。

存储节点的方法

BFS 和 DFS 的另一个主要区别是 BFS 使用队列,而 DFS 使用堆栈。

内存消耗

遍历方法

遍历的方法是BFS和DFS的另一个区别。 BFS 侧重于首先访问最旧的未访问顶点,而 DFS 侧重于访问最开始沿边缘的顶点。

结论

BFS 和 DFS 是在图中查找元素的两种搜索方法。 BFS 和 DFS 之间的主要区别在于 BFS 一层一层地进行,而 DFS 遵循从起始节点到结束节点的路径,然后从头到尾移动到另一条路径,依此类推,直到访问所有节点。

参考:

1. 广度优先搜索算法 |伪代码 |介绍,教育 4u,2018 年 3 月 22 日,可在此处获得。2。广度优先搜索 | BFS 示例 |,教育 4u,2018 年 3 月 22 日,可在此处获得。3。深度优先搜索算法 |图遍历算法 |,教育 4u,2018 年 3 月 22 日,可在此处获得。4。 “BFS 算法——Javatpoint。” Www.javatpoint.com,可在此处.5。 “DFS 算法——Javatpoint。” www.javatpoint.com,可在此处获得。

BFS和DFS有什么区别