回溯法是分治穷举搜索的一个方法。有点绕人,我复制wiki的解释如下:
回溯法(英语:backtracking)是暴力搜寻法中的一种。
回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。
- 对于一个问题又是后尝试所有的可能才是最好的办法。
- 这会导致解决过程很慢,我们还是有一些标准化的工具的。
- 例如:对于基本问题,二进制序列(n位的二进制序列有2n种可能),排列(n!),组合(n!/r!(n-r)!),一般序列(长度为n的k元序列的可能性有kn),等等。
回溯算法应用的例子
- 二进制序列:产生给定位数所有可能的二进制序列。
- 产生k元序列。
- 背包问题。
- 一般字符串。
- 汉弥尔顿路径问题。
- 图的着色问题。
代码实例:产生n bit所有可能的序列