回溯法(英语:backtracking)是暴力搜索法中的一种。
对于某些计算问题而言,回溯法是一种可以找出所有(或一部分)解的一般性算法,尤其适用于约束满足问题(在解决约束满足问题时,我们逐步构造更多的候选解,并且在确定某一部分候选解不可能补全成正确解之后放弃继续搜索这个部分候选解本身及其可以拓展出的子候选解,转而测试其他的部分候选解)。
<br>
在经典的教科书中,八皇后问题展示了回溯法的用例。(八皇后问题是在标准国际象棋棋盘中寻找八个皇后的所有分布,使得没有一个皇后能攻击到另外一个。)
<br>
回溯法采用试错的思想,它尝试分步的去解决一个问题。在分步解决问题的过程中,当它通过尝试发现现有的分步答案不能得到有效的正确的解答的时候,它将取消上一步甚至是上几步的计算,再通过其它的可能的分步解答再次尝试寻找问题的答案。回溯法通常用最简单的递归方法来实现,在反复重复上述的步骤后可能出现两种情况:
找到一个可能存在的正确的答案
在尝试了所有可能的分步方法后宣告该问题没有答案
在最坏的情况下,回溯法会导致一次复杂度为指数时间的计算。
<br>
算法架构:
<br>
非递归回溯框架
```
int a[n],i;
初始化数组a[];
i = 1;
while (i>0(有路可走) and (未达到目标)) // 还未回溯到头
{
if(i > n){
搜索到一个解,输出;
} else {
// 处理第i个元素
a[i]第一个可能的值;
while(a[i]在不满足约束条件且在搜索空间内){
a[i]下一个可能的值;
}
if(a[i]在搜索空间内){
标识占用的资源;
i = i+1; // 扩展下一个结点
} else {
清理所占的状态空间; // 回溯
i = i –1;
}
}
}
```
递归的算法框架
```
int a[n];
try(int i)
{
if(i>n) {
输出结果;
} else {
for(j = 下界; j <= 上界; j=j+1) {
// 枚举i所有可能的路径
if(fun(j)){
// 满足限界函数和约束条件
a[i] = j;
... // 其他操作
try(i+1);
回溯前的清理工作(如a[i]置空值等);
}
}
}
}
```
- 概述说明
- 数据结构
- 数组
- 栈
- 队列
- 链表
- 树
- 堆
- 图
- 常用算法
- 排序算法
- 选择排序
- 冒泡排序
- 插入排序
- 快速排序
- 归并排序
- 希尔排序
- 堆排序
- 计数排序
- 基数排序
- 二分查找
- 贪心算法
- 回溯算法
- 剪枝算法
- 分支限界法
- 动态规划
- 设计模式
- 工厂模式
- 抽象工厂模式
- 单例模式
- 建造者模式
- 原型模式
- 适配器模式
- 桥接模式
- 过滤器模式
- 组合模式
- 装饰器模式
- 外观模式
- 享元模式
- 代理模式
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 备忘录模式
- 观察者模式
- 状态模式
- 空对象模式
- 策略模式
- 模板模式
- 访问者模式
- 并发
- 多线程
- 线程安全
- 一致性、事务
- 锁
- 操作系统
- 计算机原理
- CPU
- 进程
- 线程
- 协程
- Linux
- 运维
- 常规监控
- 统计分析
- 自动化运维
- 测试
- 文档管理
- 日志管理
- 中间件
- Web Server
- Nginx
- Apache
- Tomcat
- 缓存
- 消息队列
- 网络协议
- 协议
- OSI 七层协议
- TCP/IP
- HTTP
- HTTP2.0
- HTTPS
- 网络模型
- Epoll
- kqueue
- 数据库
- 基础理论
- MySQL
- NoSQL
- 搜索引擎
- Elasticsearch
- sphinx
- Lucene
- 性能
- 性能优化方法论
- 容量评估
- CDN 网络
- 连接池
- 性能调优
- 安全
- web 安全
- XSS
- CSRF
- SQL 注入
- 脚本注入
- 漏洞扫描工具
- 验证码
- DDoS 防范
- 用户隐私信息保护
- 加密解密
- 对称加密
- 哈希算法
- 非对称加密
- 服务器安全
- 数据安全
- 网络隔离
- 授权、认证
- RBAC
- OAuth2.0
- 单点登录(SSO)
- JWT
- 开源框架
- 开源协议
- 日志框架
- ORM
- PHP开源框架
- 分布式集群
- 扩展性设计
- 稳定性高可用
- 数据库扩展
- 分布式一致
- 分布式文件系统
- 开发模式
- DDD(Domain-driven Design - 领域驱动设计)
- Actor 模式
- 响应式编程
- DODAF2.0
- Serverless
- Service Mesh
- 项目管理
- 架构评审
- 重构
- 代码规范
- 代码 Review
- 看板管理
- 敏捷开发
- 极限编程
- PDCA 循环质量管理
- FMEA管理模式
- 资讯
- 行业资讯
- 公众号列表
- 博客
- 综合门户、社区
- 技术资源
- 开源资源
- 手册、文档、教程
- 在线课堂
- 代码托管
- 云服务商