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题目

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

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

  • 相关阅读:
    【重启C++】-- 序
    关于值传递和指针传递
    *** 没有规则可以创建目标“test”。 停止。
    对无法解析的外部符号
    [转]解决在库中已定义的办法
    对库的选择顺序上的库文件
    去除MFC特性之一
    程序集之·二(修改一)
    使用excel4j生成excel文件
    Java拟合算法
  • 原文地址:https://www.cnblogs.com/Di-iD/p/13785063.html
Copyright © 2011-2022 走看看