首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >回溯和深度优先搜索有什么区别?

回溯和深度优先搜索有什么区别?
EN

Stack Overflow用户
提问于 2009-08-18 23:40:27
回答 10查看 71.6K关注 0票数 135

回溯和深度优先搜索有什么区别?

EN

回答 10

Stack Overflow用户

发布于 2013-07-27 05:09:23

我认为this answer对另一个相关问题提供了更多的见解。

对我来说,回溯和DFS的区别在于回溯处理的是隐式树,而DFS处理的是显式树。这看似微不足道,但却意义重大。当通过回溯访问问题的搜索空间时,隐式树在其中间被遍历和修剪。然而,对于DFS,它处理的树/图是显式构造的,在完成任何搜索之前,不可接受的情况已经被抛出,即被修剪掉。

因此,回溯是隐式树的DFS,而DFS是不修剪的回溯。

票数 38
EN

Stack Overflow用户

发布于 2018-05-22 05:04:00

回溯通常被实现为DFS加上搜索修剪。您遍历搜索空间树深度优先,一路上构建部分解决方案。暴力DFS可以构建所有搜索结果,即使是那些在实际中没有意义的搜索结果。这也可能是非常低效的构造所有的解决方案(n!或2^n)。因此,在实际执行DFS时,您还需要删除在实际任务上下文中没有意义的部分解决方案,并将重点放在部分解决方案上,这可能会导致有效的最优解。这就是实际的回溯技术--你尽可能早地丢弃部分解,后退一步,然后再次尝试找到局部最优。

使用BFS遍历搜索空间树并在此过程中执行回溯策略是没有任何意义的,但这在实践中没有意义,因为您需要在队列中逐层存储搜索状态,并且树的宽度呈指数级增长到高度,因此我们很快就会浪费大量空间。这就是为什么通常使用DFS遍历树的原因。在这种情况下,搜索状态存储在堆栈(调用堆栈或显式结构)中,并且不能超过树的高度。

票数 12
EN

Stack Overflow用户

发布于 2009-08-18 15:43:28

通常,深度优先搜索是在实际的图/树结构中迭代查找值的一种方式,而回溯是在问题空间中迭代查找解决方案。回溯是一种更通用的算法,甚至不一定与树相关。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1294720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档