动态规划 vs 分治法

17 Mar 2025 | 4 分钟阅读

在了解动态规划与分治法之间的区别之前,我们应该分别了解动态规划和分治法。

什么是分治法?

分治法是一种用于解决问题的策略。策略可以定义为解决问题的途径。为了解决计算问题,这种策略已经被设计出来。有各种可用的技术来解决问题,但我们必须决定该技术是否适合该问题。

假设问题很大,那么我们就将问题分解成更小的子问题,然后单独解决这些子问题。一旦所有子问题都得到解决,我们就将所有子问题的解合并起来,以找到大问题的解。如果子问题也很大,那么就再次应用分治策略来解决子问题。分治策略的约束是子问题应该与主要问题相同。假设主要问题是排序,那么子问题也应该是排序。分治策略本质上是递归的。如果问题很大,我们就递归地解决该问题。

分治法的通用方法

由于动态规划是递归的,所以过程是递归的,算法也是递归的。

以下是可以使用分治策略解决的问题

  • 归并排序:将数组分成两半,递归地对左半部分和右半部分进行排序,然后合并这两半。这种技术被称为归并排序。
  • 快速排序:首先,将数组划分为小项和大项,然后递归地对这两组进行排序。这种技术被称为快速排序。

分治法的示例

  • 搜索:分治法策略用于二分查找。
  • 排序:归并排序和快速排序是分治技术的一个例子。
  • 树的遍历
  • 矩阵乘法

什么是动态规划?

动态规划意味着将优化问题分解成更简单的子问题,并存储每个子问题的解,以便每个子问题可以被解决一次。一旦所有子问题都得到解决,我们就将每个子问题的结果连接起来,以找到初始问题的解。

每个动态规划都有四个步骤

  • 动态规划的执行方式是使问题能够分解成最优子问题。
  • 它通过将解表示为更小子问题的最优解来递归地定义解的值。
  • 我们将计算最优解的值。
  • 根据计算出的值构建最优解。

让我们以表格形式理解每个步骤。

步骤 1结构刻画最优解的结构。
步骤 2最优性原理它递归地定义最优解的值。
步骤 3自下而上的计算它通过使用表格结构以自下而上的方式计算最优解的值。
步骤 4最优解的构建它根据计算出的值构建最优解。

以下问题可以使用动态规划解决

  • 最优子结构:问题的最优解包含所有子问题的最优解。
  • 重叠子问题:递归解包含大量重复出现的简单子问题。

动态规划技术

有两种解决问题的方法

  • 自下而上方法: 假设我想成为一名出色的程序员。首先,我会练习,然后参加比赛。我会多练习并努力提高。经过努力,我将成为一名出色的程序员。这是自下而上的一种方法。
  • 自顶向下方法: 这种方法与自下而上方法相反。我将从最终解决方案开始。首先,我将成为一名出色的程序员。然后,我会多练习并努力提高。我将参加比赛,然后我会进行练习。

分治法与动态规划的区别

Dynamic Programming vs Divide and Conquer
动态规划分而治之
在动态规划中,会生成许多决策序列,并考虑所有重叠的子实例。在这种技术中,问题被分解成小的子问题。这些子问题独立求解。最后,将所有子问题的解组合起来,得到给定问题的最终解。
在动态规划中,完全避免了解决方案的重复。在此方法中,忽略了子解决方案的重复,即可以获得重复的子解决方案。
动态规划比分治技术更有效。分治策略的效率低于动态规划,因为我们必须重新处理解决方案。
它是一种非递归方法。这是一种递归方法。
它使用自下而上的问题解决方法。它使用自顶向下的问题解决方法。