从回溯的角度解释BFS和DFS

2024-03-12

关于深度优先搜索的维基百科:

深度优先搜索(DFS)是一种 遍历或搜索的算法 树、树结构或图。一 从根开始(选择一些 节点作为图例中的根) 并尽可能地探索回溯之前的每个分支。

那么什么是广度优先搜索呢?

“一种选择起始点的算法 节点,检查所有节点回溯, 选择最短路径,选择邻居节点回溯, 最终选择了最短路径 找到最优路径,因为 由于连续遍历每条路径 回溯。

Regex find的修剪——回溯?

回溯一词因其用途广泛而令人困惑。 UNIX 的find修剪 SO 用户用回溯来解释。如果您不限制正则表达式的范围,Regex Buddy 将使用术语“灾难性回溯”。这似乎是一个使用过于广泛的总括术语。所以:

  1. 您如何专门为图论定义“回溯”?
  2. 广度优先搜索和深度优先搜索中的“回溯”是什么?

[Added]

关于回溯的良好定义和示例

  1. 蛮力法 http://web.archive.org/web/20141109193758/http://web.cse.ohio-state.edu/%7Egurari/course/cis680/cis680Ch19.html
  2. 斯托曼(?)发明的术语“依赖定向回溯” http://web.archive.org/web/20130523233954/http://www.kerneltrap.org/node/4484
  3. 回溯和regex http://web.archive.org/web/20090517003722/http://kerneltrap.org/node/16028 example
  4. 深度优先搜索定义。 https://encyclopediaofmath.org/wiki/Depth-first_search

之所以会出现这种混乱,是因为回溯是在搜索过程中发生的事情,但它也指的是一种进行大量回溯的特定问题解决技术。此类程序称为回溯程序。

想象一下开车进入一个社区,总是在你看到的第一个转弯处(假设没有环路),直到你遇到死胡同,此时你开车回到下一条无人访问的街道的交叉路口。这是“第一种”回溯,大致相当于该词的口语用法。

更具体的用法是指类似于深度优先搜索的问题解决策略,但当它意识到不值得继续沿着某个子树向下时会回溯。

换句话说,天真的 DFS 会盲目地访问每个节点,直到达到目标。是的,它在叶节点上“回溯”。但一个回溯器也会在无用的分支上回溯。一个例子是在 Boggle 板上搜索单词。每个图块都被其他 8 个图块包围,因此树很大,并且简单的 DFS 可能会花费很长时间。但是,当我们看到像“ZZQ”这样的组合时,我们可以安全地从此时开始停止搜索,因为添加更多字母不会使其成为一个单词。

我喜欢朱莉·泽连斯基教授的这些讲座。她使用回溯法解决了 8 个皇后、一个数独谜题和一个数字替换谜题,并且所有内容都具有精美的动画效果。编程抽象,第 10 讲 http://www.youtube.com/watch?v=NdF1QDTRkck 编程抽象,第 11 讲 http://www.youtube.com/watch?v=p-gpaIGRCQI

树是一种图,其中任何两个顶点之间只有一条路径。这消除了循环的可能性。当您搜索图表时,您通常会有一些逻辑来消除循环,因此行为是相同的。此外,对于有向图,您不能沿着“错误”方向跟踪边。

据我所知,在斯托曼的论文中,他们开发了一个逻辑系统,它不仅对查询说“是”或“否”,而且实际上通过进行最少数量的更改来建议修复不正确的查询。您可以看到回溯的第一个定义可能会发挥作用。

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

从回溯的角度解释BFS和DFS 的相关文章

  • 图表贡献者为空

    我在 github 上有几个项目 但其中一些项目的贡献者图是空的 即使我的 gitconfig 设置了名称和电子邮件 https github com jlengrand batchWaterMarking graphs contribut
  • 如何显示 matplotlib 饼图中的实际值

    我有一个饼图 绘制从 CSV 文件中提取的值 当前显示值的比例 百分比显示为 autopct 1 1f 有没有办法显示每个切片的数据集中表示的实际值 Pie for Life Expectancy in Boroughs import pa
  • Gremlin 中的广度优先枚举

    我正在尝试使用 Gremlin 进行广度优先枚举 但是我无法找到一种方法来输出枚举期间观察到的所有步骤 我只能打印出最后一次迭代的结果 我的问题是 给定这样的起始节点 我如何使用 Gremlin 跟踪所有路径 不知道整体深度 并打印出我沿途
  • 参数映射不能用于 MERGE 模式

    我收到错误参数映射不能在合并模式中使用 我如何解决此错误 我正在使用下面的代码 我非常感谢任何帮助 提前致谢 MERGE u Person names RETURN u and data2 names name Keanu Reeves1
  • 如何返回n对括号的所有有效组合?

    def paren n lst for x in range n current string join lst solutions list for i in range len current string 1 close curren
  • Flash 图表和图形的最佳解决方案是什么? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我知道融合图表 http www fusioncharts com 还有其他好的解决方案或 API 用
  • 在鼠标光标位置添加 cytoscape 节点

    我想在画布上的单击事件上的鼠标箭头位置添加一个 cytoscape 节点 我怎样才能做到这一点 我的方法 效果不太好 我可以通过单击创建一个节点 但无法确保创建的节点的位置位于我单击的位置 使用这样的东西 cy click function
  • 数据聚合和缓存:如何按时间间隔快速绘制大型时间序列数据集的图表

    我有一个巨大的时间序列数据集 我想绘制图表 时间序列可以追溯到 5 年前 从后端的角度来看 以各种分辨率 间隔 显示这些数据的常用方法是什么 本质上我想绘制这样的数据图表 https bitcoinwisdom com markets bi
  • 使用 Java 进行树可视化 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个库来生成图形或树 例如组织图表 该库应该能够从该图中生成纯图像 有谁知道一个好的 希望开源
  • 从数据框中绘制多条平滑线

    我对 R 比较陌生 我正在尝试绘制从 csv 文件加载的数据框 数据由 6 列组成 如下所示 xval col1 col2 col3 col4 col5 第一列 xval 由一系列单调递增的正整数 例如 10 40 60 等 组成 其他列
  • 用于计算有向图上非循环路径数量的快速算法

    简而言之 我需要一个fast计算简单有向图中有多少条非循环路径的算法 By simple我的意思是没有自环或多重边的图 Apath可以从任何节点开始 并且必须在没有传出边的节点上结束 一条路径是acyclic如果没有边出现两次 我的图 经验
  • Android 图表[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个项目 其中有一些图表 图形 刻度图 烛台图和范围图 但问题是 没有该图表的库 我有烛台图的
  • 如何跳过财务图中的空日期(周末)

    ax plot date dates dates highs lows 我目前正在使用此命令来绘制财务高点和低点Matplotlib http en wikipedia org wiki Matplotlib 效果很好 但如何删除 x 轴上
  • 如何在matplotlib中部分填充之间,如不同值的不同颜色

    I m trying to color the space between the graph line and the x axis The color should be based on the value of the corres
  • 广度优先搜索:检查访问状态的时机

    在有向图的广度优先搜索中 可能循环 当一个节点出队时 其所有尚未访问的子节点都会入队 并且该过程将继续 直到队列为空 有一次 我以相反的方式实现它 将节点的所有子节点排队 并在节点出队时检查访问状态 如果正在出队的节点之前已被访问过 则该节
  • iOS绘图3D图形库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在搜索一个可以帮助我绘制 3D 图表的库 我想要类似的东西这一页 http www math uri edu bkaskosz fla
  • 使用 matplotlib.animation 从 CSV 文件实时绘图 - 数据绘制到第一个输入错误

    我正在尝试绘制来自不断写入 CSV 文件的传感器的数据 虽然成功创建实时绘图 但每个新数据条目都会创建一条延伸到第一个数据条目的附加线 见下文 Python 3 4 脚本 import matplotlib pyplot as plt im
  • 用于高效大规模图遍历的数据库

    我有一个大型二分有向图数据集 约 2000 万个元素 在当前的使用中 我运行的遍历算法每次运行约 500 000 个节点 这些算法有效 但历史上运行的是从文本文件加载到内存的数据 文本文件似乎是一个不好的方法 所以我将数据作为邻接列表传输到
  • 在skiena的书中给出的关于应用dfs在图中查找循环的代码中存在错误

    这是dfs的代码 bool processed MAXV 1 which vertices have been processed bool discovered MAXV 1 which vertices have been found
  • 在 X 轴刻度上渲染 HTML

    我想在 D3 图表的 x 轴上渲染 HTML 基本上 我希望轴上的每个标签都是到数据中另一列的超链接 我试过了 x domain data map function d return a href d Name a 但它根本不起作用 我得到

随机推荐

  • IE11 是否完全支持 css 3d 转换(preserve-3d)

    我正在制作一个 css 3d 转换网络应用程序 如果可能的话 我希望支持 IE11 我知道IE10不支持preserve 3d的值transform stylecss 属性 但我不确定 IE11 我读过一些内容说 IE11 应该支持它 但我
  • 在 Windows 上使用 Python 虚拟环境时有哪些陷阱和解决方法?

    简短的介绍这个问题并不是要问是否需要使用虚拟环境 而是当使用 Ian Bicking 的虚拟环境 http www virtualenv org在 Windows 中管理环境的最佳方法是什么 如果有 如果您有多个想法 请多次回答 以便选出最
  • Angucomplete-alt:远程 API 处理程序未按预期工作

    我正在使用 angucomplete alt https github com ghiden angucomplete alt https github com ghiden angucomplete alt 在 AngularJS 项目中
  • 如何暂停一个线程?

    我想画点东西 因为 GUI 冻结了 所以我想在线程中绘制 但有时我想暂停绘图 几分钟 Delphi 的文档说 Suspend resume 已经过时 但没有说明哪些函数取代了它们 暂停和恢复已被弃用 Sleep http docwiki e
  • 海龟模块中的 onkeypress() 函数问题

    每当我尝试运行代码并按键盘上的 w s 向上 或 向下 键时 对象都不会移动 onkeypress 功能不起作用 我尝试将其替换为onkey 功能 但无济于事 下面是我的代码 import turtle wn turtle Screen w
  • Material-ui:图标的轮廓版本

    我在我的 React Web 应用程序中使用material ui 我需要组件中的图标 操作 描述 但在outline版本 根据文档 为了方便起见 提供了全套 google Material 图标 在 Material UI 中作为预构建的
  • 从 VBScript 读取 DLL(或 VB6)文件

    我正在尝试使用 VBScript 访问 VBA 文件 或 DLL 中的函数 我有点力不从心 而且我通常不使用这两种语言 所以我会解释一下情况 以防有更好的解决方案 我有一个仪器 它有一个类似 VBScript 的内部窗口 它具有 VBScr
  • Java Swing KeyStrokes:如何使 CTRL 修饰符起作用

    In the following program why does hitting the a key print hello world while hitting CTRL a doesn t import java awt event
  • Jquery 隔离

    我的公司有一个 Web 应用程序 其中包含纯 JavaScript 它以自己的方式使用 美元符号 如下所示 function e return document getElementById e 问题是当我将 jquery 嵌入到页面时发生
  • 如何限制受保护方法只能访问子类

    我们如何限制对任何受保护方法的访问仅限于任何包中的子类 而不是同一包中的类 如果任何类不是子类并且位于同一包中 它也必须抛出异常 例如 受保护的方法 编辑 有什么方法可以检查调用类名实例 然后我们可以使用进行验证实例化 这不可能 您可以选择
  • 依赖注入容器?它有什么作用?

    我一直在阅读有关 DI 的内容 它似乎是一个足够简单的概念 我没有得到的是容器 假设我想创建自己的容器 使用像 检测 这样的动词 我不明白容器如何 检测 创建了新的依赖对象并知道注入它的依赖项 对我来说 这个容器就像是一个光荣的工厂 谁能解
  • Azure静态Web应用程序环境变量

    我正在尝试通过 Azure Static Web 应用程序发布 Gatsbyjs 我有一个插件 gatsby source contentful 我需要传递如下变量 resolve gatsby source contentful opti
  • 如何调试 vscode 扩展的 WebView javascript

    我正在构建 vscode 扩展 但无法在 WebView 中的 Javascript 中设置断点 即使 WebView 是一个单独的进程 有没有办法调试 Javascript 具体来说 我正在尝试合并 Telerik TreeView Tr
  • OpenCV 3.4.3 中对“cv::String::deallocate()”错误的未定义引用[重复]

    这个问题在这里已经有答案了 我最近安装了 OpenCV 3 4 3 但 OpenCV 中的一些库没有运行 这是我的示例代码 include
  • 将 Youtube Gdata json 解析为 ListView

    我一直在尝试在 Android 中找到 解析 Youtube Gdata JSON 的工作示例来填充列表视图 我一直在阅读这个问题 https stackoverflow com questions 9555511 android pars
  • RxJava 并行获取 Observables

    我需要一些帮助来在 RxJava 中实现并行异步调用 我选择了一个简单的用例 其中第一个调用获取 而不是搜索 要显示的产品列表 平铺 随后的调用将获取 A 评论和 B 产品图像 经过几次尝试我到达了这个地方 1 Observable
  • 找不到实体框架 4 注释

    我正在尝试使用注释将 POCO 类映射到我的数据库表 我需要使用Table注释来指定我的表的名称 但我无法解析Table注解 注 我导入了System Data Entity命名空间 但它不起作用 我必须导入哪个命名空间才能使用 EF 注释
  • Flutter Admob AppID 使用 Android 还是 iOS?

    当我们在admob控制台中制作AdMob应用程序时 我们可以选择Android或iOS应用程序 这意味着有 2 个不同的 ID 我们应该在 Flutter AdMob 插件中使用哪一个 FirebaseAdMob instance init
  • 如何将 Rails 视图助手提取到 gem 中?

    我有一组经常使用的 Rails 视图助手 并且想将它们打包成一个 gem 这样我就可以在 Gemfile 中添加一行 并从我的视图中访问这些助手 我在使用 Bundler 和 Jeweler 之前已经创建了 gem 但是 我不太清楚如何在
  • 从回溯的角度解释BFS和DFS

    关于深度优先搜索的维基百科 深度优先搜索 DFS 是一种 遍历或搜索的算法 树 树结构或图 一 从根开始 选择一些 节点作为图例中的根 并尽可能地探索回溯之前的每个分支 那么什么是广度优先搜索呢 一种选择起始点的算法 节点 检查所有节点回溯