回溯法
1.实验目的及要求
回溯法是一种组织得井井有条的,能避免不必要搜索的穷举式搜索法。这
种方法适用于解一些组合数相当大的问题。
回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间
树。
算法搜索至解空间树的任意一点时,先判断该结点是否满足约束。如果不
满足,则跳过对该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进
入该子树,继续按深度优先策略搜索
2.实验内容
n 皇后问题可以表示成 n-元组(x1,…,xn),其中 xi 是放在第 i 行的皇后所在的列
号。于是,解空间由 nn 个 n-元组组成。
显示约束条件为 Si={1,2,…….,n},1£i £n。
隐式约束条件之一为没有两个 xi 相同(即任意两个皇后不在同一列上)。将其
加入到显式条件中,于是解空间的大小由 nn 个元组减少到 n!个元组。
设(x1,x2,…,xi-1)是状态空间树中由根到一问题结点的路径,
T (x1,x2,…,xi-1)是下述所有结点 xi 的集合,它使得对于每个 xi, (x1,x2,
…,xi)是一条由根到结点 xi 的路径。
所谓限界函数 Bi 是一谓词,如果路径(x1,x2,…,xi)不可能延伸到一个答案结
点,则 Bi (x1,x2,…,xi)取 false。
限界即指停止产生这样的子结点。
从根结点出发,以深度优先的方式搜索整个解空间。在当前的扩展结点
处,搜索向纵深方向移至一个新结点。这个新结点就成为活结点,并成为当
前扩展结点。
如果在当前的扩展结点处不能再向纵深方向移动,则当前扩展结点就成为
死结点。此时,应往回移动(回溯)至最近的一个活结点处,并使这个活结
点成为当前的扩展结点。
回溯法即以这种工作方式递归地在解空间中搜索,直至找到所要求的解或
解空间中已没有活结点时为止。
3.算法的分析
问题 P 通常要能表达为对已知的、由 n 元组(x1,…,xn)组成的状态空间
E={(x1,…,xn)| xiÎSi,i=1,2,…n},给定关于 n 元组中的分量的一个约束集 D,
求满足 D 的全部约束条件的所有 n 元组。 Si 是 xi 的定义域且 Si 是有穷集,称
E 中满足 D 的全部约束条件的所有 n 元组为问题 P 的一个解。对于许多问题,
所给定的约束集 D 具有完备性,即 i 元组 (x1,…,xi)满足 D 中仅涉及到 x1,
…,xi 的所有约束意味着 j(j<i) 元组 (x1,…,xj) 也一定满足 D。换句话说,只