使用递归进行回溯

使用递归进行回溯

回溯是一种递归地解决问题的算法技术,它试图逐步建立一个解决方案,一次一个,删除那些在任何时间点上不能满足问题约束的解决方案(这里的时间是指到达搜索树的任何一层所花费的时间)。逆向追踪也可以说是对蛮力方法的改进。

因此,基本上,回溯技术背后的想法是,它在所有可用的选项中搜索一个问题的解决方案。最初,我们从一个可能的选项开始回溯,如果该问题通过所选的选项得到解决,那么我们就返回解决方案,否则就回溯并从剩余的可用选项中选择另一个选项。也有可能出现这样的情况:

没有一个选项会给你带来解决方案,因此我们可以理解为回溯不会给这个特定问题带来任何解决方案。我们也可以说,回溯是一种递归的形式。这是因为从各种可用的选项中寻找解决方案的过程是递归的,直到我们找不到解决方案或达到最终状态。

因此,我们可以得出结论,每一步的回溯都会消除那些不能给我们带来解决方案的选择,并继续进行那些有可能将我们带到解决方案的选择。

根据wiki的定义。

回溯可以被定义为一种通用的算法技术,它考虑搜索每一个可能的组合,以解决一个计算问题。

如何确定一个问题是否可以用回溯法解决?

一般来说,每一个约束满足问题,如果对任何客观的解决方案都有清晰明确的约束,逐步建立一个候选的解决方案,并在确定候选方案不可能完成为一个有效的解决方案时立即放弃该候选方案("回溯"),都可以用回溯法解决。

然而,所讨论的大多数问题都可以用其他已知的算法来解决,如动态编程或贪婪算法,其时间复杂度按输入大小排序为对数、线性、线性-对数,因此,在各方面都胜过回溯算法(因为回溯算法一般在时间和空间上都是指数级的)。然而,仍然有一些问题,直到现在还只有回溯算法可以解决。

逆向追踪可以被认为是一种选择性的树/图遍历方法。树是代表一些初始起始位置(父节点)和最终目标状态(叶子之一)的方式。逆向追踪使我们能够处理一些情况,在这些情况下,原始的暴力方法会爆发出不可能的选择数量来考虑。逆向追踪是一种精炼的蛮力。在每一个节点上,我们消除那些明显不可能的选择,并继续递归地检查那些有潜力的选择。这样一来,在树的每一个深度,我们都能减少未来要考虑的选择数量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值