回溯法

什么是回溯法

最笨的搜索法是穷举搜索,在穷举搜索的基础上,提出了一些启发式的搜索方法。

回溯法的本质就是搜索,通过剪枝策略,提高搜索的效率。回溯法也称为试探法,在搜索过程中向前试探,走不通时向后回溯。

适用回溯法求解的问题

可用回溯法求解的问题P,通常能表达为:

对于已知的由n元组(x1,x2,...,xn)组成的一个状态空间E={(x1, x2,..., xn)| xi属于Si, i=1,2,...,n},状态空间E成为问题的解空间;

回溯法的基本步骤

  1. 针对所给问题,定义问题的解空间;
  2. 确定易于搜索的解空间结构;
  3. 以深度优先方式搜索解空间,并在搜索过程中用剪枝函数避免无效搜索。

常用的剪枝函数

  • 用约束函数在扩展结点处剪去不满足约束的子树;
  • 用目标函数剪去得不到最优解的子树。(优化问题)

回溯的几个基本概念

  • 回溯法首先将问题P的n元组的状态空间E表示成一棵高为n的带权有序树T,把在E中求问题P的所有解转化为在T中深度优先搜索问题P的所有解。树T类似于检索树,被称为状态空间树。
  • 树T上任意一个结点被称为问题P的状态结点;
  • 树T上任意一个叶子结点被称为问题P的一个解状态结点。
  • 树T上满足约束集D的全部约束的任意一个叶子结点被称为问题P的一个回答状态结点,它对应于问题P的一个解。
  • 回溯法在用来求问题的所有解时,要回溯到根,且根结点的所有子树都已被搜索遍才结束。
  • 回溯法在用来求问题的任一解时,只要搜索到问题的一个解就可以结束。
  • 回溯法在用来求问题的最优解时,要回溯到根,且根结点的所有子树都已被搜索遍,保留问题的目标函数值最优的解。

回溯算法的分类

回溯算法有递归形式和非递归形式两种。

回溯法的应用

 

posted @ 2018-10-16 18:04  快乐工作快乐玩  阅读(770)  评论(0编辑  收藏  举报