从【回溯剪枝】到【动态规划】的转化

回溯剪枝和动态规划的区别

从【回溯剪枝】到【动态规划】的转化_第1张图片

  • 回溯法是一种暴力搜索的方法,通过枚举所有可能的情况来寻找最优解。

  • 动态规划的核心思想是分治和记忆化,将问题分解成子问题并存储每个子问题的解,以避免重复计算。

  • 回溯法在不停的试探,能进就记录进备忘,不能进就需要擦除刚记录的备忘。

  • 动态规划可以看做是从1到n有明确的目的地。

  • 回溯法更加灵活,能够处理一些不规则的问题,但时间复杂度可能很高,需要考虑如何剪枝以提高效率。

  • 动态规划虽然时间复杂度较低,但对问题有一定的规律要求,需要先找到子问题之间的重叠和转移关系,再进行优化求解。

  • 回溯法可以寻找所有的解。

  • 动态规划只能求最优解或解的数目。

  • 在回溯法和动态规划中,都可以通过备忘录消除重叠子问题。

  • 标准动态规划问题一定是求最值的,「最优子结构」,即从子问题的最优解推导出原问题的最优解。

  • 动态规划的空间压缩,如果计算状态 dp[i][j] 需要的都是 dp[i][j] 相邻的状态,那么就可以使用空间压缩技巧,将二维的 dp 数组转化成一维,将空间复杂度从 O(N^2) 降低到 O(N)。

动态规划的实现和优化

  1. 寻找最优子结构,寻找小问题到大问题的递推方程
  2. 递归实现
  3. 备忘录优化,避免重复计算子问题
  4. 空间换时间,使用多维数组作为备忘录存储子问题的解
  5. 根据子问题之间的依赖关系进行状态压缩,减少空间占用率

你可能感兴趣的:(算法,剪枝,动态规划,算法)