BackTracking Algorithm Notes
1.定义
在那些涉及寻找一组解的问题或者求满足某些约束条件的最优解的问题中,有许多问题可以用回溯法来求解。
为了应用回溯法,所要求的解必须能表示成一个n-元组(x1,x2,…,xn),其中xi是取自某个有穷集Si。通常,所求解的问题需要求取一个使某一规范函数P(x1,…,xn)取极大值(或取极小值或满足该规范函数条件)的向量。有时还要找出满足规范函数P的所有向量。
2.基本思想
不断地用修改过的规范函数(或限界函数)Pi(x1,…,xn)去测试正在构造中的n-元组的部分向量(x1,…,xn),看其是否可能导致最优解,如果不能,那么将可能要测试的其余向量略去,就是剪枝。
约束条件分为两类:显式约束和隐式约束。显示约束是限定每个x只从一个给定的集合上取值。隐式约束描述了xi必须彼此相关的情况,规定解空间中那些实际上满足规范函数的元组。
3.代表性的问题
a、n-queen问题
有关n后问题的定义自行查阅,这里不给出解释。
解决思路
假定皇后i将放在行i上,因此,8皇后问题可以表示出8-元组(x1,x2,…,x8),其中xi是放置皇后i所在的列号。隐式约束条件:1)没有两个xi可以相同;2)没有两个皇后可以在同一条对角线
假设两个皇后在(i,j)和(k,l)位置,则在同在对角线公式为abs(j-l) = abs(i-k)。即,在PLACE函数中可用此公式来判断。
|
|
b、子集和数问题
定义:已知n+1个正数:Wi,1<=i<=n和M。要求找出Wi的和数为M的所有子集。例如,若n=4,(W1,W2,W3,W4)=(11,13,24,7),M=31,则满足要求的子集是(11,13,7)和(24,7)。值得指出的是,通过给出其和数为M的那些Wi的下标来表示解向量比直接用这些Wi表示解向量更为方便。因此这个解向量由(1,2,4)和(3,4)表示。
显示约束条件要求Xi在1~n之间。隐式约束条件则是要求没有两个Xi是相同的且相应的Wi的和数是M。(为了避免产生同一个子集重复的情况,如(1,4,2)和(1,2,4)),附加另一个隐式约束条件:Xi+1大于Xi,i在1~n之间。
解决思路
c、图的着色
定义:已知一个图G和m>0种颜色,在只准使用这m种颜色对G的结点着色的情况下,是否能使图中任何相邻的两个结点都具有不同的颜色。这个问题称为m-着色判定问题。
解决思路
d、哈密顿环
定义:一个哈密顿环是一条沿着图G的n条边环行的路径,它访问每个结点一次并且返回到它的开始位置。
e、0/1背包问题
定义不解释,这个问题解决的方案很多,可以用动归、贪心算法,这里使用回溯法求解。
代码如下:
解决思路