回溯法
2017-11-09 本文已影响21人
老羊_肖恩
回溯法是一种通过不断尝试获得问题解的办法。“回溯”的含义是发现当前已经不满足求解的条件时,则采用“回溯”的方式,尝试其他的方法对问题求解,这种尝试的过程也是一种不断枚举的过程。
回溯法进行尝试的过程并不是漫无目的穷举的过程,它在选择求解目标的过程中会利用当前条件与目标的最优匹配进行尝试,即使当前尝试失败,也可以回溯到上一步继续选择最后匹配选择进行。
回溯法在所有的解空间中,按照深度优先原则进行尝试,从初始状态不断深入到各个解空间中,过程如下:
- 对需要解决的问题,确定问题的解空间,确保在解空间的范围内存在最优解。
- 确定回溯法的尝试规则及路径寻找的方式,以减少不必要的计算。
回溯法解题步骤:
- 针对所给问题,确定问题的解空间:首先应明确定义问题的解空间,问题的解空间应至少包含问题的一个(最优)解。
- 确定结点的扩展搜索规则
- 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。
回溯法的基本行为是搜索,搜索过程使用剪枝函数来为了避免无效的搜索。剪枝函数包括两类:1. 使用约束函数,剪去不满足约束条件的路径;2.使用限界函数,剪去不能得到最优解的路径。问题的关键在于如何定义问题的解空间,转化成树(即解空间树)。解空间树分为两种:子集树和排列树。两种在算法结构和思路上大体相同。