回溯法

回溯法是一种高效的搜索策略,相对于穷举法,它能在解决问题时适时‘回头’,避免无效操作。本文介绍了回溯法的概念、基本做法,通过4皇后问题的实例展示了回溯的实施过程,并探讨了回溯法的效益分析。回溯法适用于解决候选解较多、量较大的问题,具有较高的计算效率。
摘要由CSDN通过智能技术生成
  1. 回溯概述
    与穷举的“笨拙”搜索相比,回溯法则是一种“聪明”的求解效益更高的搜索法。下面介绍回溯设计及其应用,体会回溯法相对于穷举的特点与优势。
  2. 回溯概念
    有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往使用回溯法。
    回溯法是一种试探求解的方法:通过对问题的归纳分析,找出求解问题的一个线索,沿着这一线索往前试探,若试探成功,即得到解;若试探失败,就逐步往回退,换其他路线再往前试探。因此,回溯法可以形象地概括为“向前走,碰壁回头”。
    回溯法的基本做法是试探搜索,是一种组织得井井有条的、能避免一些不必要搜索的穷举式搜索法。回溯法在问题的解空间树中,从根结点出发搜索解空间树,搜索至解空间树的任意一点,先判断该结点是否包含问题的解;如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向其父结点回溯;否则,进入该子树,继续搜索。
    从解的角度理解,回溯法将问题的候选解按某种顺序进行枚举和检验。当发现当前候选解不可能是解时,就选择下一个候选解。在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯。倘若当前候选解除了不满足问题规模要求外,满足所有其他要求时,继续扩大当前候选解的规模,并继续试探。如果当前候选解满足包括问题规模在内的所有要求时,该候选解就是问题的一个解。
    与穷举法相比,回溯法的“聪明”之处在于能适时“回头”,若再往前走不可能得到解,就回溯,退一步另找线路,这样可省去大量的无效操作。因此,回溯与穷举相比,回溯更适宜于量比较大,候选解比较多的问题
  3. 回溯描述
    下面简要阐述回溯的一般方法
    回溯求解的问题P,通常要能表达为:对于已知的由n元组(x1,x2,…,xn)组成的一个状态空间E={(x1,x2,…,xn)|xi∈si,i=1,2,…,n},给定关于n元组中的一个分量的一个约束集D,要求E中满足D的全部约束条件的所有n元组。其中si是分量xi的定义域,且|si|有限,i=1,2,…,n。称E中满足D的全部约束条件的任一n元组为问题P的一个解。
    解问题P的最朴素的方法就是穷举法,上面已经作了介绍,即对E中的所有n元组逐一地检验其是否满足D的全部约束,若满足,则为问题P的一个解。显然,其计算量是相当大的。
    对于许多问题,所给定的约束集D具有完备性,即i元组(x1,x2,…,xi)满足D中仅涉及到x1,x2,…,xi的所有约束,意味着j元组(x1,x2,…,xj)一定也满足D中仅涉及到x1,x2,…,xj的所有约束,i=1,2,…,n。换句话说,只要存在0≤j≤n-1,使得(x1,x2,…,xj)违反D中仅涉及到x1,x2,…,xj的约束之一,则以(x1,x2,…,xj)为前缀的任何n元组(x1,x2,…,xj,xj+1,…,xn)也一定违反D中仅涉及到x1,x2,…,xj的一个约束,n≥i>j。因此,对于约束集D具有完备性的问题P,一旦检测断定某个j元组(x1,x2,…,xj)违反D中仅涉及x1,x2,…,xj的一个约束,就可以肯定,以(x1,x2,…,xj)为前缀的任何n元组(x1,x2,…,xj,xj+1,…,xn)都不会是问题P的解,因而就不必去搜索它们,即省略了对部分元素(xj+1,…,xn)的操作与测试。回溯法正是针对这类问题,利用这类问题的上述性质而提出来的比穷举法效率更高的算法。
    4皇后问题的回溯实施
    为了具体说明回溯的实施过程,先看一个简单实例。
    如何在4×4的方格棋盘上放置4个皇后,使它们互不攻击,即任意两个皇后不允许处在同一横排,同一纵列,也不允许处在同一
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值