“回溯”和“分支和绑定”之间的区别
Posted
技术标签:
【中文标题】“回溯”和“分支和绑定”之间的区别【英文标题】:Difference between 'backtracking' and 'branch and bound' 【发布时间】:2015-05-04 08:07:43 【问题描述】:在回溯中,我们同时使用 bfs 和 dfs。即使在分支定界中,我们也会同时使用 bfs 和 dfs 来进行最低成本搜索。
那么我们什么时候使用回溯,什么时候使用分支和绑定
使用分支定界会降低时间复杂度吗?
什么是分支定界中的最低成本搜索?
【问题讨论】:
【参考方案1】:回溯
-
它用于查找问题的所有可能解决方案。
以DFS(深度优先搜索)方式遍历状态空间树。
它意识到自己做出了错误的选择,并通过备份撤消了最后的选择。
它搜索状态空间树,直到找到解决方案。
涉及可行性函数。
分支绑定
-
用于解决优化问题。
它可以以任何方式遍历树,DFS 或 BFS。
它意识到它已经有了预解决方案导致的更好的最优解决方案,因此它放弃了该预解决方案。
它完全搜索状态空间树以获得最优解。
它涉及一个边界函数。
【讨论】:
回溯是否总能找到最优解? 是的,总是给出最好的解决方案。 @AbhishekDey 实际上,回溯会给出 a 解决方案,不一定是最佳解决方案。回溯最适合约束满足问题,分支定界最适合优化问题。 @CameronGagnon 明确地说,回溯保证理论上的最优性,因为它会探索所有解决方案,只修剪那些它确实知道的解决方案不可能是最优的。当然,在实践中,如果组合的数量是指数的并且不可能进行智能修剪,那么该算法可能会永远用于中型到大型实例。【参考方案2】:回溯
回溯是解决离散约束满足问题 (CSP) 的一般概念。它使用 DFS。一旦到了很明显无法构建解决方案的地步,它就会回到有选择的最后一点。这样它会迭代所有潜在的解决方案,有时可能会提前中止。
分支绑定
Branch-and-Bound (B&B) 是解决离散约束优化问题 (COP) 的概念。它们与 CSP 类似,但除了具有约束之外,它们还具有优化标准。与回溯相比,B&B 使用广度优先搜索。
名称的一部分,即 bound,指的是 B&B 修剪可能解决方案空间的方式:它获得了一个获得上限的启发式方法。如果无法改进,可以丢弃 sup-tree。
除此之外,我看不出与回溯有什么不同。
其他来源
网络上还有其他答案的说法截然不同:
Branch-and-Bound 正在回溯修剪 (source)【讨论】:
【参考方案3】:回溯
回溯是一种通用算法,用于找到一些计算问题的所有(或部分)解决方案,特别是约束满足问题,它逐步构建解决方案的候选者,并放弃每个部分候选者 c(“回溯”)作为一旦它确定 c 不可能完成到一个有效的解决方案。 它列举了一组部分候选者,原则上,这些部分候选者可以以各种方式完成,从而为给定问题提供所有可能的解决方案。完成是通过一系列候选扩展步骤逐步完成的。 从概念上讲,部分候选者表示为树结构、潜在搜索树的节点。每个部分候选者是与其相差一个扩展步骤的候选者的父节点,树的叶子是不能进一步扩展的部分候选者。 它以深度优先顺序 (DFS) 从根向下递归遍历此搜索树。它意识到自己做出了错误的选择,并通过备份撤消了最后的选择。 更多详情:Sanjiv Bhatia's presentation on Backtracking for UMSL.分支和绑定
分支定界算法由通过状态空间搜索的候选解的系统枚举组成:候选解的集合被认为是形成一个以完整集为根的有根树。 算法探索此树的分支,这些分支代表解决方案集的子集。在枚举一个分支的候选解之前,该分支会根据最优解的估计上限和下限进行检查,如果它不能产生比目前由算法。 它可以通过以下任何方式遍历树:-
BFS (Breath First Search)或(FIFO)分支定界
D-Search 或 (LIFO) Branch and Bound
最少计数搜索或(LC)分支定界
【讨论】:
【参考方案4】:回溯: -从解空间中选择最优解。 - 遍历 DFS。 分支和绑定: -BFS 遍历。 - 这里只生成富有成效的解决方案,而不是生成所有可能的解决方案。
【讨论】:
以上是关于“回溯”和“分支和绑定”之间的区别的主要内容,如果未能解决你的问题,请参考以下文章