从回溯的角度解释BFS和DFS

问题描述 投票:0回答:1

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

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

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

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

正则表达式

find
的修剪——回溯?

“回溯”一词因其用途广泛而令人困惑。 UNIX 的

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

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

[已添加]

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

  1. 蛮力法
  2. Stallman(?)发明的术语“依赖定向回溯”
  3. 回溯和正则表达式示例
  4. 深度优先搜索定义。
graph backtracking depth-first-search breadth-first-search
1个回答
48
投票

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

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

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.