动态规划基础概念

目录

定义

原理

优缺点

几个经典的动态规划问题:

动态规划问题写题步骤


定义

DP是Dynamic Programming的简称,即动态规划。

动态规划是一种求解复杂问题的方法,它将原问题分解为相对简单的子问题,并把子问题的求解结果存储起来以避免重复计算。

动态规划适用于有重叠子问题和最优子结构性质的问题,其核心是对问题的状态的定义和状态转移方程的定义。通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推的方式解决。

在设计一个动态规划算法时,通常需要按照以下步骤进行:

  1. 刻画一个最优解的结构特征。
  2. 递归地定义最优解的值。
  3. 计算最优解的值,通常采用自底向上的方法。
  4. 利用计算出的信息构造一个最优解。

动态规划的应用极其广泛,背包问题、生产经营问题、资金管理问题、资源分配问题、最短路径问题和复杂系统可靠性问题等应用极多。

原理

动态规划的原理是将原问题拆分为多个重叠的子问题,通过解决这些子问题来找到原问题的最优解。在解决子问题的过程中,记录每个子问题的解,避免重复计算,提高算法效率。这种方法的适用范围是有重叠子问题和最优子结构性质的问题。

动态规划的核心思想是将整体问题拆分成多个重叠子问题,在解决子问题的过程中记录下每个子问题的解。这样,在需要求解更大规模的子问题时,可以直接利用已经计算出的子问题解。

动态规划的关键步骤包括定义状态、设计状态转移方程和确定边界条件。在定义状态时,要找到一个合适的状态来描述问题的解。设计状态转移方程时,要找出当前状态和最优解的关系,以便递归地求解子问题。确定边界条件时,要确定问题的起始和终止条件。

动态规划的本质是将多阶段决策过程转化为一系列单阶段问题,利用各阶段之间的关系,逐个求解。

(其实内容都大差不差,就是拆分成小问题,然后解决)

优缺点

动态规划的优点主要包括:

  1. 易于确定全局最优解:通过将问题分解为多个子问题,并利用子问题的解来构建原问题的解,动态规划可以更容易地找到全局最优解。
  2. 能得到一族解:动态规划可以求解出一族最优解,这有助于分析问题的多个方面,并从中选择最合适的一个解。
  3. 能利用经验,提高求解效率:由于动态规划会重复计算子问题的解,因此可以利用已经计算出的解,避免重复计算,提高求解效率。

然而,动态规划也存在一些缺点:

  1. 没有统一的标准模型可供应用:到目前为止,没有一个统一的标准模型可以应用于所有动态规划问题。每个问题都需要单独设计动态规划模型,这增加了解决问题的难度。
  2. 应用的局限性:构造动态规划模型时,必须满足“无后效性”条件,这限制了动态规划的应用范围。此外,对于大规模问题,动态规划可能会面临维数障碍,使得求解变得非常困难。
  3. 数值求解时存在维数障碍:在数值求解时,动态规划可能会面临维数障碍。这是因为随着问题规模的增加,子问题的数量会呈指数级增长,导致计算量急剧增加,需要额外的内存空间。

总的来说,动态规划是一种非常有用的方法,适用于解决一些特定类型的问题。在使用动态规划时,需要注意其限制和适用范围,并根据具体问题设计合适的模型。

几个经典的动态规划问题:

  1. 背包问题:给定一组物品,每个物品有各自的重量和价值,求在不超过背包总重量的情况下,使得背包中物品的总价值最大。
  2. 斐波那契数列:给定一个整数n,求斐波那契数列的第n项。斐波那契数列定义为0、1、1、2、3、5、8、13、21、34、……,其中第n项是第n-1项和第n-2项的和。
  3. 最短路径问题:给定一个有向图,求从起点到终点的最短路径。
  4. 排班表问题:给定一组员工和他们的班次需求,求如何排班才能满足所有员工的需求,并使得总工作时间最少。
  5. 机器调度问题:给定一组作业和它们的加工时间,求如何安排作业的加工顺序,使得所有作业的完成时间最早。
  6. 文本编辑问题:给定一个初始文本和一组操作(插入一个字符、删除一个字符、替换一个字符),求通过最少的操作次数将初始文本转化为目标文本。
  7. 拼车问题:给定一组乘客和他们的行程需求,求如何拼车才能满足所有乘客的需求,并使得车辆的总行驶距离最短。
  8. 资源分配问题:给定一组任务和所需的资源,求如何分配资源才能使得所有任务都能完成,并使得总成本最低。

动态规划问题写题步骤

1.要搞清楚dp数组及其下标的含义。

2.找到准确的递推公式。

3.dp数组的初始化应该如何解决。

4.遍历顺序(有的从前往后,有的从后往前)。

5.打印数组(为了检查错误)。

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