分支定界 vs 回溯

2025年3月17日 | 阅读 7 分钟

在理解分支限界法和回溯法的区别之前,我们应该分别了解分支限界法和回溯法。

什么是回溯法?

回溯法本质上是蛮力法的改进过程。它是一种技术,当一个问题有多种解决方案时,它会在所有可用选项中搜索问题的解决方案。让我们以蛮力搜索为例,因为回溯法遵循蛮力搜索的方法。

考虑一个盒子,我们有三种不同颜色的三个物体。一个物体是红色的,第二个是绿色的,第三个是蓝色的。现在,我们必须将这些物体放入盒子中,我们有多种选择。根据蛮力法,我们必须考虑所有选项,并从所有可能的选项中找出最佳选项。

让我们考虑这个问题的所有可能解决方案。

假设我们先装红色物体,然后是绿色物体,最后是蓝色物体。这是此问题的第一个解决方案。可能的解决方案是红色、绿色和蓝色。

Branch and bound vs backtracking

第二个解决方案是将红色物体放入,然后是蓝色物体,最后是绿色物体。可能的解决方案是红色、蓝色和绿色。

Branch and bound vs backtracking

第三个解决方案可以是先放入绿色物体,然后是红色物体,最后是蓝色物体。可能的解决方案是绿色、红色和蓝色。

Branch and bound vs backtracking

第四个解决方案可以是先放入绿色物体,然后是蓝色物体,最后是红色物体。可能的解决方案是绿色、蓝色和红色。

Branch and bound vs backtracking

第五个解决方案是将蓝色物体放入,然后是绿色物体,最后是红色物体。可能的解决方案是蓝色、绿色和红色。

Branch and bound vs backtracking

第六个解决方案是将蓝色物体放入,然后是红色物体,最后是绿色物体。可能的解决方案是蓝色、红色和绿色。

Branch and bound vs backtracking Branch and bound vs backtracking

以上是可能的解决方案,我们必须从所有可能的解决方案中找出最佳解决方案。这种方法称为蛮力法。回溯法与蛮力法类似,但它是蛮力法的改进过程。

让我们看看回溯法与蛮力法的区别。

上面是显示上述问题可能解决方案的图。现在我们将看到回溯法如何表示这些解决方案。

在回溯法中,解决方案以树的形式表示,该树称为状态空间树。由于回溯法遵循深度优先搜索 (DFS),因此树将使用 DFS 构建,称为状态空间树

让我们创建这棵树。

考虑第一个解决方案,即红色、绿色、蓝色,它可以表示为如下所示的树。

Branch and bound vs backtracking

考虑第二个解决方案,即红色、蓝色、绿色。由于蓝色之后没有其他物体了,我们将回溯并移至绿色。不是先取绿色,而是先取蓝色,然后是绿色,如下所示。

Branch and bound vs backtracking

下一个解决方案是绿色、红色和蓝色。由于我们无法探索绿色物体,因此我们向后移动并到达蓝色物体。我们无法探索蓝色物体,因此我们再次向后移动并回到红色物体。不是使用红色物体,而是使用绿色物体。在绿色物体之后,我们使用红色物体,然后我们使用蓝色物体。我们无法进一步探索蓝色物体。现在形成的序列是绿色、红色和蓝色,如下所示。

Branch and bound vs backtracking

下一个解决方案是绿色、蓝色和红色。由于我们无法探索蓝色物体,我们向后移动并到达红色物体。不是使用红色物体,而是使用蓝色物体,然后使用红色物体。现在形成了绿色、蓝色和红色的序列。

Branch and bound vs backtracking

下一个解决方案是蓝色、绿色和红色。由于我们无法探索红色物体,因此我们回溯并到达蓝色物体。我们无法探索蓝色物体,因此我们回溯并到达绿色物体。不是使用绿色物体,而是使用蓝色物体,然后使用绿色物体,最后使用红色物体。形成的序列是蓝色、绿色和红色,如下所示。

Branch and bound vs backtracking

下一个解决方案是蓝色、红色和绿色。由于我们无法探索红色物体,因此我们回溯并到达绿色物体。不是使用绿色物体,而是使用红色物体,然后使用绿色物体。

Branch and bound vs backtracking

以上是显示与问题相关的所有可能解决方案的状态空间树。因此,我们可以说状态空间树可用于表示回溯法中的所有解决方案。使用回溯法,我们可以解决具有某些约束条件的问题,并根据这些约束条件找到解决方案。假设在上面的例子中,约束条件是蓝色物体不能放在中间(界定函数)。

第一个解决方案是红色、绿色和蓝色。由于蓝色物体不在中间,因此我们不需要进行任何修改。

第二个解决方案是红色、蓝色和绿色。由于蓝色物体在中间,因此我们将移除绿色物体,如下所示。

Branch and bound vs backtracking

下一个解决方案是绿色、红色和蓝色。由于蓝色物体不在中间,因此我们不需要进行任何修改。

下一个解决方案是绿色、蓝色和红色。由于蓝色物体在中间,因此我们将移除红色物体,如下所示。

Branch and bound vs backtracking

上面是状态空间树,其中解决方案中不包含蓝色物体。

分支定界

它与回溯法类似。分支限界法和回溯法的概念都遵循蛮力法并生成状态空间树。但它们都遵循不同的方法。生成树的方式是不同的。

回溯法遵循 DFS,而分支限界法则遵循 BFS 来生成树。现在我们将通过一个例子来理解分支限界法。由于它遵循 BFS,因此首先会添加同一级别的所有节点,然后我们移至下一个级别。

让我们考虑在回溯法中讨论过的同一个例子。

首先,我们取根节点。

Branch and bound vs backtracking

现在我们有三种可能性,即选择红色、绿色或蓝色物体,如下所示。在这种情况下,我们已完成第一层。

Branch and bound vs backtracking

现在我们移至下一级别。

在红色物体的情况下,我们有两种可能性,即选择绿色或蓝色物体,如下所示。

在绿色物体的情况下,我们有两种可能性,即选择红色或蓝色物体,如下所示。

Branch and bound vs backtracking

在蓝色物体的情况下,我们有两种可能性,即选择红色或绿色物体,如下所示。

Branch and bound vs backtracking

我们移至第三级别。

在绿色物体的情况下,只能添加一个物体,即蓝色。

Branch and bound vs backtracking

在蓝色物体的情况下,只能添加一个物体,即绿色。

Branch and bound vs backtracking

在红色物体的情况下,只能添加一个物体,即蓝色。

Branch and bound vs backtracking

在蓝色物体的情况下,只能添加一个物体,即红色。

Branch and bound vs backtracking

在绿色物体的情况下,只能添加一个物体,即红色。

Branch and bound vs backtracking

在红色物体的情况下,只能添加一个物体,即绿色。

Branch and bound vs backtracking

示例

可以使用回溯法解决的问题有:

  • 8 皇后问题
  • 回溯法解决的背包问题

可以使用分支限界法解决的问题有:

  • Travelling Salesman Problem

分支限界法与回溯法的区别

Branch and bound vs backtracking
回溯分支定界
回溯法是一种问题解决方法,它解决的是判定性问题。分支限界法是一种问题解决方法,它解决的是优化问题。
当我们使用回溯法找到解决方案时,可能会做出一些错误的决定。当我们使用分支限界法找到解决方案时,它会提供一个更好的解决方案,因此没有做出错误决定的机会。
回溯法使用深度优先搜索。分支限界法不一定使用深度优先搜索。它甚至可以使用广度优先搜索和最佳优先搜索。
状态空间树被搜索,直到获得问题的解决方案。状态空间树需要被完全搜索,因为最优解可能存在于状态空间树的任何地方。
在回溯法中,会尝试所有可能的解决方案。如果解决方案不满足约束条件,我们将回溯并寻找另一个解决方案。在分支限界法中,根据搜索;计算界定值。根据界定值,我们要么停止在那里,要么扩展。
回溯法的应用包括 N 皇后问题、子集求和。分支限界法的应用包括背包问题、旅行商问题等。
回溯法比分支限界法更有效。分支限界法效率较低。
它包含可行性函数。它包含界定函数。
回溯法通过首先找到子问题的解,然后根据第一个子问题的解递归地解决其他问题来解决给定的问题。分支限界法通过将问题至少分成两个子问题来解决给定的问题。

下一个主题分支限界法