回溯算法(Backtracking)
什么是回溯?
回溯是一种基本的搜索算法,通过在搜索过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路经。在探索过程中,当探索到某一步时,发现原先搜索并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
搜索方式:
- 深度优先搜索(dfs)
- 宽度优先搜索(bfs)
基本思想
在包含问题的所有解的空间树中,按照dfs的策略,从根结点出发深度探索空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。
若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。
而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。
算法基本步骤
- 满足一定条件下将当前数据加入到结果集(或检查到不满足要求当即返回)
- 选择一条路经
- dfs向前进行
- 回退路经
一些情况下需要对数据进行预先处理,或在第2步直接检查以决定是否抛弃当前路经,以避免过多地递归,带来时间损耗。换而言之,不满足条件的路经越早抛弃越好。
标签:
algorithm
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2019-02-21 对于开发团队管理的理解