BFS 和 DFS 的区别

2024-01-03

我正在读关于DFS in 算法简介由科门.以下为正文 片段。

与 BFS 不同,BFS 的前驱子图形成一棵树, DFS产生的subgrpah可能由几棵树组成,因为 可以从多个来源重复搜索。

除上述注释外,还提到以下内容。

BFS 仅限于一个源,这似乎是任意的,其中 DFS 可以从多个源进行搜索。尽管从概念上讲,BFS 可以从多个来源进行,而 DFS 可以仅限于一个来源 来源,我们的方法反映了这些搜索的结果如何 通常使用。

我的问题是

  1. 任何人都可以举例说明如何将 BFS 与多个源一起使用 DFS 与单一源一起使用吗?

当它说多个源时,它指的是搜索的起始节点。您会注意到算法的参数是BFS(G, s) and DFS(G)。这应该已经暗示 BFS 是单源的,而 DFS 不是,因为 DFS 不接受任何初始节点作为参数。

正如作者指出的,这两者之间的主要区别在于 BFS 的结果始终是一棵树,而 DFS 可以是一个森林(树的集合)。这意味着,如果 BFS 从节点 s 运行,那么它将仅构建从 s 可到达的那些节点的树,但如果图中还有其他节点,则不会触及它们。然而,DFS 将继续搜索整个图,并构建所有这些连接组件的森林。正如他们所解释的,这是大多数用例中每种算法的期望结果。

正如作者提到的,没有什么可以阻止轻微修改以使 DFS 成为单一源。事实上这个改变很容易。我们简单地接受另一个参数s,并且在日常工作中DFS (not DFS_VISIT)而不是第 5-7 行迭代图中的所有节点,我们只需执行DFS_VISIT(s).

同样,更改 BFS 可以使其与多个源一起运行。我在网上找到了一个实现:http://algs4.cs.princeton.edu/41undirected/BreadthFirstPaths.java.html http://algs4.cs.princeton.edu/41undirected/BreadthFirstPaths.java.html尽管这与另一种可能的实现略有不同,后者自动创建单独的树。意思是,该算法看起来像这样BFS(G, S) (where S是节点的集合),而你可以实现BFS(G)并自动生成单独的树。这是对队列的轻微修改,我将把它作为练习。

正如作者指出的,这些没有完成的原因是每种算法的主要用途使得它们本身就有用。尽管思考这一点做得很好,但这是一个应该理解的重要点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

BFS 和 DFS 的区别 的相关文章

  • 运行时间为 O(n) 且就地排序的排序算法

    有没有运行时间为O n 并且还分类到位 在某些情况下 最好的情况是 O n 但这可能是因为项目集合已经排序 你正在看 O nlogn 一些较好的平均值 话虽如此 排序算法的 Wiki 还是相当不错的 有一个表格比较了流行的算法 说明了它们的
  • 如何检查无向图是否有奇数环

    我试图找到一个 O V E 时间算法来检查是否已连接 无向图有或没有奇数环 我正在考虑对图进行广度优先搜索 并尝试将顶点标记为黑色和白色 以便没有两个标记为相同颜色的顶点相邻 是否有任何已知的更简洁的算法可以在线性时间内解决这个问题 你的方
  • 神经网络的层和神经元

    我想更多地了解神经网络 我正在开发一个 C 程序来制作神经网络 但我坚持使用反向传播算法 很抱歉没有提供一些工作代码 我知道有很多库可以用多种语言创建神经网络 但我更喜欢自己制作一个 关键是我不知道要实现特定目标 例如模式识别或函数近似或其
  • 一种良好且简单的随机性测量方法

    获取一长整数序列 例如 100 000 个 并返回序列随机性的测量值的最佳算法是什么 该函数应返回单个结果 如果序列并非完全随机 则返回 0 如果完全随机 则返回 1 如果序列有点随机 它可以给出介于两者之间的东西 例如0 95 可能是一个
  • 如何在 JavaScript 中构建树模式匹配算法?

    好吧 这是一个有点复杂的问题 但是 tl dr 基本上是如何使用 模式树 解析 实际树 如何检查特定的树实例是否与特定的模式树匹配 首先 我们有我们的结构模式树 模式树通常可以包含以下类型的节点 sequence节点 匹配一系列项目 零个或
  • 从原点开始在离散 2D 网格上迭代向外螺旋的算法

    例如 这是预期螺旋的形状 以及迭代的每个步骤 y 16 15 14 13 12 17 4 3 2 11 18 5 0 1 10 x 19 6 7 8 9 20 21 22 23 24 其中线条是 x 轴和 y 轴 以下是算法每次迭代 返回
  • 关于Marching Cubes算法的澄清

    关于Marching Cubes 我对其算法和实现有一些疑问 我已经阅读了 Marching Cubes 的 Paul Bourke 优秀文章以及网站上可用的源代码 但是 我在理解以及如何以自己的方式实现算法方面仍然遇到了一些问题 问题如下
  • 自动跟踪算法

    我正在尝试写一个simple跟踪例程来跟踪电影中的某些点 本质上我有一系列 100 帧长的电影 在黑暗背景上显示一些亮点 我每帧有大约 100 150 个点 它们在电影的过程中移动 我想跟踪它们 所以我正在寻找一些有效的 但可能不会过度实施
  • 数独算法,暴力破解[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我正在尝试
  • 分而治之算法找到两个有序元素之间的最大差异

    给定一个整数数组 arr 找出任意两个元素之间的差异 使得较大的元素出现在 arr 中较小的数字之后 Max Difference Max arr x arr y x gt y 例子 如果数组是 2 3 10 6 4 8 1 7 那么返回值
  • 如何计算 3D Morton 数(交织 3 个整数的位)

    我正在寻找一种快速计算 3D Morton 数的方法 这个网站 http www graphics stanford edu seander bithacks html InterleaveBMN有一个基于幻数的技巧来处理 2D Morto
  • 覆盖二维平面上给定点的最小圆

    问题 覆盖 2D 平面上给定 N 个点的圆的最小可能直径是多少 解决这个问题最有效的算法是什么 它是如何工作的 这是最小圆问题 http en wikipedia org wiki Smallest circle problem 请参阅参考
  • 用于查找最近邻居的空间划分算法如何工作?

    为了找到最近的邻居 空间分区 http en wikipedia org wiki Nearest neighbor search Space partitioning是算法之一 它是如何工作的 假设我有一组 2D 点 x 和 y 坐标 并
  • String.contains() 的时间复杂度

    String contains 的时间复杂度是多少 假设 n 是与另一个长度为 k 的字符串进行比较的字符串的长度 如果不知道您感兴趣的 String contains 的实际实现 就没有答案 或者你打算使用什么算法 一个完全幼稚的实现可能
  • 计算序列而无法存储值?

    问题陈述 here http www spoj com problems EC SER 令 S 为无限整数序列 S0 a S1 b Si Si 2 Si 1 对于所有 i gt 2 你有两个整数 a 和 b 您必须回答有关序列中第 n 个元
  • 密文窃取算法 - 哪一种是正确的?

    网络上提出了两种算法 在这两种算法中 第一部分是相同的 1 Pad the last partial plaintext block with 0 2 Encrypt the whole padded plaintext using the
  • Java 中查看 ArrayList 是否包含对象的最有效方法

    我有一个 Java 对象的 ArrayList 这些对象有四个字段 我用其中两个字段来将对象视为与另一个对象相等 我正在寻找最有效的方法 给定这两个字段 以查看数组是否包含该对象 问题在于这些类是基于 XSD 对象生成的 因此我无法修改类本
  • while循环的时间复杂度是多少?

    我正在尝试找出 while 循环的时间复杂度 但我不知道从哪里开始 我了解如何找到 for 循环的复杂性类别 但是当涉及到 while 循环时 我完全迷失了 关于从哪里开始有什么建议 提示吗 这是一个问题的示例 x 0 A n some a
  • 如何实现n个元素的查找和插入操作的动态二分查找

    这个想法是使用多个数组 每个长度为 2 k 根据 n 的二进制表示来存储 n 个元素 每个数组都是排序的 不同的数组没有以任何方式排序 在上述数据结构中 SEARCH是通过对每个数组进行一系列二分查找来进行的 INSERT 是通过一系列相同
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该

随机推荐

  • 如何将“File1.cshtml”插入主视图中的部分

    好吧 我可能做错了 但是在我的 main Layout 中我有这个 div RenderSection Navigation div 它在我的 Index cshtml 视图中指向这一点 section Navigation lt Need
  • Swift 中的 import func、struct、class 和 @_exported 是什么?

    在 Apple 的 github 中 他们使用 Swift 包管理器 import func POSIX isatty import func libc strerror r import var libc EINVAL import va
  • 理解Python中DataFrame的执行

    我是 python 新手 我想了解如何在 DataFrame 中执行 让我们用 kaggle com 中找到的数据集的示例来尝试一下 泰坦尼克号 灾难中的机器学习 我想要将 NaN 值替换为相应性别的mean IE 男性的 NaN 值应替换
  • Svelte:如何处理组件中自定义可写存储的异步初始化承诺?

    我有几个 Svelte 组件和一个自定义可写存储 店里有一个init函数是async并用一些 REST API 的数据库表的数据填充存储的值 我的组件都必须使用自动订阅来订阅该商店 订阅时 init必须被调用 总体思路是在数据库上实现 CR
  • 我的堆是否碎片化

    0 000 gt dumpheap stat total 1755874 objects Statistics MT Count TotalSize Class Name 7b9b0c64 1 12 System Windows Forms
  • 如何解决flywaydb中脚本的版本号冲突

    我有 3 个 git 分支 develop fixbug 和 master 分支master中最新的FlywayDB脚本版本是1 2 43 分支开发中的版本是1 2 54 Branch Fixbug的脚本版本更新至1 2 55 并且基于Br
  • 当用户选择文件夹时,Mac 沙盒应用程序可以访问什么?

    我正在阅读有关 Mac 应用程序沙箱的内容 并且想知道当用户在 NSOpenPanel 或 NSSavePanel 中选择文件夹时到底会发生什么 这 应用程序沙箱设计指南 http developer apple com library m
  • 在 Android 2 (API 5) 中模拟堆栈视图?

    我的应用程序必须有一个可以显示卡片的小部件 并且用户可以翻 cards StackWidget示例 在 Android 的资源中 有一个很好的小部件 但有一个StackView在小部件的布局中 它可以使用API Level 11我必须实现
  • 当对象属性不正确时 Wcf (400) 错误请求

    我有一个 Wcf 启用 ajax 服务 它接受方法调用的对象 我的 Wcf 方法如下所示 OperationContract XmlSerializerFormat WebInvoke Method POST UriTemplate XML
  • 构造函数 Service(URL, QName, WebServiceFeature[]) 未定义

    I got 构造函数 Service URL QName WebServiceFeature 是未定义错误在我为我的客户端 Web 服务运行 wsimport 后 我使用 JDK 1 6 请帮忙 在使用 wsimport 生成 JAX WS
  • 为什么 Socket.io 在 Safari 和 Chrome 上的连接速度很慢

    我是 Node js 和 Socket io 的真正新手 所以如果这是一个愚蠢的问题 请耐心等待 我在 Heroku 上设置了一个非常基本的虚拟对象来测试 Socket io 您所能做的就是单击一个按钮 所有连接的浏览器都会看到相应的消息
  • 提交 DataContext 更改时发生 Linq ChangeConflictException

    System Data Linq ChangeConflictException 2 of X updates failed at System Data Linq ChangeProcessor SubmitChanges Conflic
  • 如何在 Tumblr 上添加标签云?

    我已经使用 Tumblr 有一段时间了 但我不知道如何在博客上显示 Tumblr 标签云 我想问一下如何在我的Tumblr博客上显示标签云 第三方 JavaScript 解决方案 http rive rs projects tumblr t
  • 将单元格拆分为不同数量的单元格 - Excel

    如果回答了类似的问题 我们深表歉意 我进行了搜索 但找不到我要找的东西 我有一个电子表格 在其中复制并粘贴了有关各种类型啤酒的大量数据 我想将包含文本的字符串单个单元格拆分为与啤酒类型和酒精百分比相对应的任意数量的单元格 我遇到的问题是 有
  • 每(x)个JAVA插入一个空格,使用正则表达式

    我想知道正则表达式是否可以做到这一点 或者我应该将其分成一个字符数组并执行循环 在他们输入的字符串中每隔 x 个字符 由用户指定 插入一个空格 例如 他们有字符串 oogabooga 他们首先想每 2 个字符插入一个空格 他们会得到 oo
  • 使用 Retrofit 将 JSON 属性简单自定义映射到对象属性

    在 RetroFit 中定义 JSON 属性到特定对象属性的自定义映射的最简单方法是什么 一组 奖励 的 JSON 响应示例 name 5 Voucher description Get 5 off your next purchase a
  • 授予 Kubernetes 服务帐户权限以从所有命名空间获取 pod

    我想授予 Kubernetes 服务帐户执行权限kubectl token token get pod all namespaces 我熟悉对单个名称空间执行此操作 但不知道如何对所有名称空间执行此操作 包括将来可能创建的新名称空间且无需授
  • vim表格插件问题

    Before stallone Factory user name gt Sylvester age gt 64 schwarzenegger Factory user name gt Arnold age gt 63 一些魔法 After
  • 如何在 ReSharper 中添加自定义代码分析

    我是 ReSharper 的新手 对于使用Resharper的人来说 有没有办法添加自定义代码分析规则 例如我可能有一条规则说所有私有变量都应以字母 m 开头 如何将其添加到 Resharper 以便如果我违反此规定 它可以显示为警告或错误
  • BFS 和 DFS 的区别

    我正在读关于DFS in 算法简介由科门 以下为正文 片段 与 BFS 不同 BFS 的前驱子图形成一棵树 DFS产生的subgrpah可能由几棵树组成 因为 可以从多个来源重复搜索 除上述注释外 还提到以下内容 BFS 仅限于一个源 这似