zoukankan      html  css  js  c++  java
  • 回溯内容部分总结

    2020 09 20 学回溯有感

    回溯1

    回溯是什么

    回溯是一种技巧,用于用于数据排列的方式的技巧,同时也是另一种形式的枚举。其原理是对数据的处理结果如同对一个数字加上1和减1,最终得出的结果是不变的。我称之为可再现性。尤其是在计算机中可以对原有的数据轻松地更改和恢复,所以才会广泛应用。

    所以回溯的核心原理就是通过部分数据进行增加或者删除之后的,得到其中一部分的结果后进行相反操作如删除和增加,从而恢复现场。同样在此过程可以进行递归,所以一般回溯都会与递归,深度优先连接在一起。最终将所有的部分的结果进行整合成最终结果。

    回溯一般包括剪枝,也就是对不符合条件的内容设立条件进行筛选,优化得到最终结果的性能。这是在过程中筛选出合适的部分结果

    也可以在得到结果之后再进行设立条件进行排除不合适的答案,这样性能会比较差。

    详细要点

    • // 大致模板
      
      res.add(new ArrayList<>(tmp));
      
      if( xxx ){
          tmp.add();  // 增加
          backstrack(); //下一步地迭代回溯
          tmp.remove(); //还原
      }
      
    • 回溯的过程 尤其是需要注意边界。还有递归的终止条件

    • 去重的时候可以采用获取所有结果后利用HashMap的方式进行去重,

    Leetcode题目

    • 子集
    • 全排列
    • 组合总和

    三种类型题各有不同。其中子集的是没有进行规定子数组的大小的,全排列要求的数组是个数是整齐的,组合总和的是能够凑成总和的个数。具体详情可以观看我的解题过程

  • 相关阅读:
    CRB and His Birthday(2015多校)
    B. Bear and Three Musketeers
    Uva657
    cas服务端改造
    有用的maven插件
    maven管理的非标准目录
    struts2中的action交由spring管理
    数据库分库
    linux内核系列之二_资源
    linux内核系列之一_工具
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13785063.html
Copyright © 2011-2022 走看看