回溯算法(Backtracking)

什么是回溯?

回溯是一种基本的搜索算法,通过在搜索过程中寻找问题的解,当发现已不满足求解条件时,就"回溯"返回,尝试别的路经。在探索过程中,当探索到某一步时,发现原先搜索并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

搜索方式:

  • 深度优先搜索(dfs)
  • 宽度优先搜索(bfs)

基本思想

在包含问题的所有解的空间树中,按照dfs的策略,从根结点出发深度探索空间树。当探索到某一结点时,要先判断该结点是否包含问题的解,如果包含,就从该结点出发继续探索下去,如果该结点不包含问题的解,则逐层向其祖先结点回溯。(其实回溯法就是对隐式图的深度优先搜索算法)。

若用回溯法求问题的所有解时,要回溯到根,且根结点的所有可行的子树都要已被搜索遍才结束。

而若使用回溯法求任一个解时,只要搜索到问题的一个解就可以结束。

算法基本步骤

  1. 满足一定条件下将当前数据加入到结果集(或检查到不满足要求当即返回)
  2. 选择一条路经
  3. dfs向前进行
  4. 回退路经

一些情况下需要对数据进行预先处理,或在第2步直接检查以决定是否抛弃当前路经,以避免过多地递归,带来时间损耗。换而言之,不满足条件的路经越早抛弃越好。

posted @   johnny_zhao  阅读(801)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
历史上的今天:
2019-02-21 对于开发团队管理的理解
点击右上角即可分享
微信分享提示