DFS/回溯算法
思考
DFS、回溯、递归、DP之间的关系
递归
就是自我调用,经常作为一种编程的实现方式,比如的DFS 、动态规划、回溯法都可以用递归来实现,当然也可以用非递归来实现。回溯
是一种通用的算法,把问题分步解决,在每一步都试验所有的可能,当发现已经找到一种方式或者目前这种方式不可能是结果的时候,退回上一步继续尝试其他可能。很多时候每一步的处理都是一致的,这时候用递归来实现就很自然。当回溯用于树的时候,就是
DFS
。当然了,几乎所有可以用回溯解决的问题都可以表示为树。那么这俩在这里就几乎同义了。如果一个问题解决的时候显式地使用了树,那么我们就叫它dfs。很多时候没有用树我们也管它叫dfs严格地说是不对的,但是dfs比回溯打字的时候好输入。别的回答里提到了砍枝,实际上这二者都可以砍枝。动态规划
。回溯可以用于所有用穷举法可以解决的问题,而DP只用于具有最优子结构的问题。所以不是所有问题都适合用dp来解决,比如八皇后。dp需要存贮子问题的解,回溯不需要。
框架
解决一个回溯问题,实际上就是一个【决策树的遍历】过程
路径:也就是已经做出的选择。
选择列表:也就是你当前可以做的选择。
结束条件:也就是到达决策树底层,无法再做选择的条件。
空间复杂度:O(logn)
最后更新于