回溯法

    回溯法是一种优化的穷举法。所谓穷举法就是穷举问题的所有可能性,直到发现解决问
题的最佳解为止。当然利用穷举法可以解决很大一部分的实际问题,但由穷举法的实现过程
可知它所花费的资源是相当多的。使用穷举法要进行彻底的搜索,彻底的比较,要以大量的
运算为基础,而大量的运算势必要花费大量的时间,有时这种消耗是计算机也承担不起的口
所以用穷举法解决问题往往是不实际的。因此要用到回溯法。
    回溯法会有效地降低穷举法带来的高损耗。下面举一个例子来说明什么是回溯法。
    例如,考虑对迷宫进行遍历。当遇到十字路口时究竟应当向什么方向走呢?回溯法为我
们提供了一个答案,即每当遇到十字路口时便向一个固定的方向前进。在这里假设这个方向
是左,当向左走后如果又遇到了十字路口,那么便继续向左走;如果遇到了死胡同便回溯到
前一个路口并直走(因为此路U的左边已被证实是走不通的)。当直走并遇到路口后继续向
左走:当直走并遇到死胡同后同样回溯到前一个路口。此时这个路口就只剩下右边可走了,
当向右走后如果遇到路口仍然向左走:当向右走并遇到死胡同后仍然回溯到前一个路口。此
时这个路口已被证实是走不通的,于是再向前回溯一个路口。如此循环下去直到找到迷宫的
出口口关于同溯法和迷宫问题的具体求解过程,在本书的后续章节中将会有更为详细的描述。
    以上便是回溯法的基本思想。利用回溯法解决的问题有如下几个特点:
    ●   问题可以划分为几个不相关的子问题。
    ●   几个子问题有类似的求解方式。
    ●   如果子问题还可以划分,便继续对子问题进行划分。
    由此可见利用回溯法解决的问题与利用分治法解决的问题有相似之处丘但回溯法与分治
法并不相同。回溯法的本质是深度优先搜索,在应用回溯法时需建立一个栈保存搜索的路径。
由栈的工作方式可知当前的搜索路径一定保存在栈的顶部,当该搜索路径被确定为不可行时
便从栈顶删除此搜索路径并对新栈顶所保存的搜索路径进行搜索,如此循环下去直到找到问
题的解或栈为空栈。而分治法的实质是递归。分治法每次解决整体问题中的一个子问题,子
问题可能被重复解决,但不会出现像回溯法中那样走进“死胡同”的情形。
    利用回溯法能解决的经典问题有如下几种:
    ●   迷宫问题。
    ●  四色问题。
    ●  骑士周游问题。
    ●  图的深度优先遍历。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值