• 回溯算法(Backtracking)


    什么是回溯?

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

    搜索方式:

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

    基本思想

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

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

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

    算法基本步骤

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

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

  • 相关阅读:
    JS 中 console 的用法
    C#可扩展编程之MEF学习笔记(二):MEF的导出(Export)和导入(Import)
    C#可扩展编程之MEF学习笔记(一):MEF简介及简单的Demo
    MEF框架使用总结
    webfunny前端监控开源项目
    我从Vue源码中学到的一些JS编程技巧
    nodejs 发送邮件demo
    从零开始手写Promise
    概率论要点
    行列式技巧
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/12341785.html
Copyright © 2020-2023  润新知