穷举所有可能的解,通过剪枝优化,常用于排列组合、子集问题
❓ 什么是回溯算法?
回溯是一种通过穷举来寻找所有可能解的算法。它在每一步做出选择,如果发现当前选择不能得到解,就回退(回溯)到上一步,尝试其他选择。
🎯 为什么使用?
当问题需要找出所有满足条件的解(排列、组合、子集、分割等)时,回溯是标准解法。虽然时间复杂度高,但通过剪枝可以显著优化。
⚙️ 如何工作?
1. 做选择:将当前元素加入路径
2. 递归:进入下一层决策
3. 撤销选择:回溯,恢复状态,尝试其他选择
4. 剪枝:提前排除不可能的分支
🎨 形象比喻
「想象在一棵决策树上行走。每个节点是一个选择,从根到叶子的路径是一个完整的方案。回溯就是遍历这棵树,记录所有有效的路径。」
🔍 识别关键词
当你在题目中看到以下关键词时,考虑使用回溯算法:
所有全部排列组合子集划分可能
📊 时间空间复杂度
时间复杂度
O(n * 2^n) 子集 | O(n * n!) 排列
空间复杂度
O(n) 递归深度
指数级或阶乘级复杂度,剪枝可以优化常数
按?查看快捷键