[回溯法] 回溯法介绍-回溯与递归的区别

【回溯法】

  1. 有一类问题,我们不知道它明确的计算法则。而是先进行试探,试探到最终状况,发现不满足问题的要求,则回溯到上一个状态继续试探。这种不断试探和回溯的思想,称为回溯法(Backtrcking)
  2. 这类问题有求最优解、一组解、求全部解这类问题,例如八皇后问题

【回溯的算法思想】一直往下走,然后再一步步往回走
面对一个问题,每一步有多种做法。先做其中一个做法,然后再此基础上一直做下去,把这个做法的所有可能全部做完,再回来,做第二种做法。

【例子】

  1. 深度优先搜索
  2. 求一个序列的幂集
  3. 八皇后问题
  4. 涂色问题

【回溯法实质】它的求解过程实质上是先序遍历一棵“状态树”的过程。只不过,这棵树不是遍历前预先建立的,而是隐含在遍历过程中。如果认识到这点,很多问题的递归过程设计也就迎刃而解了。

【回溯与递归的区别】回溯这个算法思想可以由递归这个算法结构来实现

递归 回溯
是一种算法结构 是一种算法思想,可以用递归来实现
递归即是自己调用自己或间接调用自己 回溯就是一种试探,类似于穷举,但是回溯比穷举少很多计算量,俗称剪枝
例如计算阶乘问题: n ! = ( n − 1 ) ! ∗ n n!=(n-1)!*n n!=(n1)!n 例如求和问题:给定7个数字(1、2、3、4、5、6、7),在7个数字中选几个数字,令它们的和等于8
我们可以从小到大搜索,选择1+2+3+4=10>8,已经超过8,之后567就没必要继续了。此时就是一种搜索过程优化

相关博客:https://blog.csdn.net/u014772862/article/details/51789015

你可能感兴趣的:(数据结构与算法,回溯)