在回溯方面解释BFS和DFS

hhh*_*hhh 10 graph breadth-first-search backtracking depth-first-search

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

深度优先搜索(DFS)是用于遍历或搜索树,树结构或图的算法.一个从根开始(在图形情况下选择一个节点作为根)并在回溯之前尽可能地沿着每个分支进行探索 .

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

"选择起始节点,检查所有节点回溯,选择最短路径,选择邻居节点回溯,选择最短路径,最终找到最佳路径的算法,因为由于连续回溯而遍历每条路径.

正则表达式find的修剪 - 回溯?

由于其使用的多样性,回溯一词令人困惑.UNIX find修剪SO用户解释了回溯.如果您不限制正则表达式的范围,Regex Buddy使用术语"灾难性回溯".它似乎是一个过于广泛使用的伞形术语.所以:

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

[添加]

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

  1. 蛮力方法
  2. Stallman(?)发明了术语"依赖性指导的回溯"
  3. 回溯和正则表达式的例子
  4. 深度优先搜索定义.

joh*_*cip 23

混淆是因为回溯是在搜索过程中发生的事情,但它也指的是一种特定的问题解决技术,其中进行了大量的回溯.这些程序被称为后退漏斗.

图片开车进入一个街区,总是在你看到的第一个转弯处(让我们假设没有环路),直到你遇到死路,此时你会开车回到下一条未经检查过的街道的交叉路口.这是"第一种"回溯类型,它大致相当于该词的口语用法.

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

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

我很喜欢Julie Zelenski教授的这些讲座.她使用回溯解决了8个女王,数独谜题和数字替换谜题,一切都很好动画. 编程抽象,第10讲 编程抽象,第11讲

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

据我所知,在Stallman的论文中,他们开发了一个逻辑系统,它不仅对查询说"是"或"否",而且实际上通过进行最小数量的更改来修复错误查询.您可以看到第一个回溯定义可能发挥作用的地方.