25

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

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

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

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

Regexfind的修剪——回溯?

回溯一词因其用途广泛而令人困惑。UNIXfind对 SO 用户的修剪通过回溯进行了解释。如果您不限制 Regex 的范围,Regex Buddy 使用术语“灾难性回溯”。这似乎是一个使用过于广泛的总称。所以:

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

[添加]

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

  1. 蛮力法
  2. Stallman(?)发明的术语“依赖导向回溯”
  3. 回溯和正则表达式示例
  4. 深度优先搜索定义。
4

1 回答 1

39

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

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

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

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

我喜欢 Julie Zelenski 教授的这些讲座。她使用回溯解决了 8 个皇后、一个数独谜题和一个数字替换谜题,而且一切都非常生动。 编程抽象,第 10 讲 编程抽象,第 11 讲

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

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

于 2010-07-01T08:41:54.290 回答