回溯法初探(一)

 回溯法是的应用范围很广,主要用于数据量不是很大的暴力求解问题,比如"图的m着色问题","八皇后问题"。                            

  回溯法的主要思想,简单来说就是"能进就进,进不了就换,换不了就退",用迷宫的形式来讲解回溯法的思想十分形象,探索迷宫时要先向前走一步,之后再判断走的对不对,在实际的回溯算法中一般是要先判断当前的状态是否符合约束条件,如果符合,就向前走,不符合那就换个方向或是换条路。

在使用回溯法时,一般分为递归算法与非递归算法,两种方法各有利弊,递归算法最主要的缺点就是对空间的消耗很大,但是代码简洁,思路简单,而非递归算法则恰恰相反,根据我自学的经验,我认为在初学时不妨先用递归算法入门,先将思路搞清楚,在熟练后再去尝试非递归算法。)

用回溯法解题大致分为以下几个步骤:

1.明确解向量

回溯法的解一般都可以用  x={x[1],x[2]...x[n]}表示,比如在图的3着色问题中,用1,2,3分别表示三种不同的颜色,图的区域有5个地方,则x[i]=1表示i区域涂色为"1"颜色,其中1<=i<=5。

2.明确解空间

解空间主要对应的是子集树和排列树,依据题意进行选择。(根据题意画个图,就知道了)

3.明确约束条件

所谓约束条件就是判断你是否能在"迷宫"中继续前进的条件,是回溯算法的核心。

4.明确限界条件

主要在求最优解时使用,通过进一步的限制,完成剪枝,从而提高效率。举一个简单的例子,假如之前的运算中已经算出当前的最优解为10,而在回溯中,发现"迷宫"走到一半就已经是11>10了,那就没有必要在往下走,这样就节省了时间。

你可能感兴趣的:(回溯法初探(一))