概念:
回溯法是一种非常有效的方法,有“通用的解题法”之称。它有点像穷举法,但是更带有跳跃性和系统性,他可以系统性的搜索一个问题的所有的解和任一解。回溯法采用的是深度优先策略。
回溯法按深度优先策略搜索问题的解空间树。首先从根节点出发搜索解空间树,当算法搜索至解空间树的某一节点时,先利用剪枝函数判断该节点是否可行(即能得到问题的解)。如果不可行,则跳过对该节点为根的子树的搜索,逐层向其祖先节点回溯;否则,进入该子树,继续按深度优先策略搜索。
三个步骤:
- 针对所给问题,定义问题的解空间;
- 确定易于搜索的解空间结构;
- 以深度优先的方式搜索解空间。
优化方法:
搜索过程使用剪枝函数来为了避免无效的搜索。剪枝函数包括两类:
- 使用约束函数,剪去不满足约束条件的路径;
- 使用限界函数,剪去不能得到最优解的路径。
解空间树分为两种:子集树和排列树。两种在算法结构和思路上大体相同。
所给的问题是从n个元素的集合S中找出满足某种性质的子集时,相应的解空间