码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 回溯算法(回溯搜索法)


    回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。

    回溯法是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。

    许多复杂的,规模较大的问题都可以使用回溯法,有“通用解题方法”的美称。

    回溯是递归的副产品,只要有递归就会有回溯。

    回溯算法,不是一个高效的算法,纯暴力算法,实际上是递归算法的一部分,最多再剪枝⼀下。

    回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,穷举过程就是遍历一颗多叉树的过程。

    回溯算法能解决几种问题:

    1、全排列。给定一个没有重复数字的序列,返回其所有可能的全排列。

    2、部分棋盘问题,n皇后问题,解数独等

    3、切割。一个字符串有几种切割的方式

    4、子集。一个字符串或是N个数的集合里有多少符合条件的子集

    5、组合问题。N个数里面按一定规则找出k个数的组合。例如力扣https://leetcode.cn/problems/4sjJUc/有重复元素集合的组合

    回溯法:通常被抽象为一个n叉树,横方向是for循环,纵方向递归

    1. List result;
    2. /**
    3. * 回溯代码框架
    4. */
    5. void backtrack(path,chooseList){
    6. //满足结束条件
    7. if(isOver){
    8. result.add(path);
    9. return;
    10. }
    11. for(choose:chooseList){
    12. //做选择
    13. backtrack(path,choose);
    14. //撤销选择
    15. }
    16. }
    17. /**
    18. *多叉树
    19. */
    20. void traceTree(TreeNode root){
    21. if( root == null){
    22. return;
    23. }
    24. for(TreeNode child: root.children){
    25. raceTree(child);
    26. }
    27. }
    28. 回溯法中递归函数参数很难⼀次性确定下来,⼀般先写逻辑,需要什么参数,填什么参数。

    29. 相关阅读:
      编译原理复习——语法分析(自底向上)3
      玄铁C906——物理内存保护(PMP)介绍
      优化sql语句——mysq亿级数据量查询优化(一)
      vue如何解决跨域?
      13.求面积[有问题]
      ElasticSearch Java API GEO操作(REST命令版)
      编译 mesa
      【Java基础面试十二】、说一说你对面向对象的理解
      5.Docker-harbor私有仓库部署与管理
      macOS 的「预览」有几种用法
    30. 原文地址:https://blog.csdn.net/xiaoxiaovbb/article/details/127940998
      • 最新文章
      • 攻防演习之三天拿下官网站群
        数据安全治理学习——前期安全规划和安全管理体系建设
        企业安全 | 企业内一次钓鱼演练准备过程
        内网渗透测试 | Kerberos协议及其部分攻击手法
        0day的产生 | 不懂代码的"代码审计"
        安装scrcpy-client模块av模块异常,环境问题解决方案
        leetcode hot100【LeetCode 279. 完全平方数】java实现
        OpenWrt下安装Mosquitto
        AnatoMask论文汇总
        【AI日记】24.11.01 LangChain、openai api和github copilot
      • 热门文章
      • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
        奉劝各位学弟学妹们,该打造你的技术影响力了!
        五年了,我在 CSDN 的两个一百万。
        Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
        面试官都震惊,你这网络基础可以啊!
        你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
        心情不好的时候,用 Python 画棵樱花树送给自己吧
        通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
        13 万字 C 语言从入门到精通保姆级教程2021 年版
        10行代码集2000张美女图,Python爬虫120例,再上征途
      Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
      正则表达式工具 cron表达式工具 密码生成工具

      京公网安备 11010502049817号