动态规划算法常用于求解具有某种最优性质的问题 可能有许多可行解, 希望找到具有最优值的那个解.
两个基本要素(重要性质): 最优子结构性质和子问题重叠性质.
例如矩阵连乘计算次序问题的最优解包含着其子问题的最优解。这种性质称为最优子结构性质。
分析方法: 在分析问题的最优子结构性质时,所用的方法具有普遍性:首先假设由问题的最优解导出的子问题的解不是最优的,然后再设法说明在这个假设下可构造出比原问题最优解更好的解,从而导致矛盾。
利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。最优子结构是问题能用动态规划算法求解的前提。
递归算法求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。这种性质称为子问题的重叠性质。
动态规划算法,对每一个子问题只解一次,而后将其解保存在一个表格中,当再次需要解此子问题时,只是简单地用常数时间查看一下结果。
通常不同的子问题个数随问题的大小呈多项式增长。因此用动态规划算法只需要多项式时间,从而获得较高的解题效率。
👉 矩阵连乘问题-动态规划(自底向上,自顶向下,重叠问题)
👉 最长公共子序列-动态规划
👉流水线作业调度问题-动态规划(运用Johnson算法)
👉 0-1背包问题-动态规划