理论基础
什么是回溯法
回溯法也可以叫做回溯搜索法,它是一种搜索的方式。
回溯是递归的副产品,只要有递归就会有回溯。
回溯函数也就是递归函数
使用原因以及解决的问题
虽然回溯法很难也不好理解,但是回溯法并不是高效的算法。因为回溯的本质是穷举,如果想让回溯法高效一些,可以加一些剪枝的操作。
回溯法并不高效但还要用它是因为一些问题能暴力搜出来就不错了,最多再剪枝一下,还没有更高效的解法。
回溯法,一般可以解决如下几种问题:
- 组合问题:
N
个数里面按一定规则找出k
个数的集合 - 切割问题:一个字符串按一定规则有几种切割方式
- 子集问题:一个含
N
个数的集合里有多少符合条件的子集 - 排列问题:
N
个数按一定规则全排列,有几种排列方式 - 棋盘问题:
N
皇后,解数独
如何理解回溯法
回溯法解决的问题都可以抽象为树形结构
回溯法解决的问题都是在集合中递归查找子集,集合的大小构成了树的宽度,递归的深度构成了树的深度
是递归就要有终止条件,所以必然是一棵高度有限的树