【算法设计与分析】动态规划设计思想介绍

动态规划

Dynamic Programming


1.学习要点:

动态规划算法的基本要素

(1)最优子结构性质
(2)重叠子问题性质

设计动态规划算法的步骤。

(1)找出最优解的性质,并刻划其结构特征。
(2)递归地定义最优值。
(3)以自底向上的方式计算出最优值。
(4)根据计算最优值时得到的信息,构造最优解。

2.经典应用范例

(1)矩阵连乘问题;
(2)最长公共子序列;
(3)最大子段和
(4)凸多边形最优三角剖分;
(5)多边形游戏;
(6)图像压缩;
(7)电路布线;
(8)流水作业调度;
(9)背包问题;
(10)最优二叉搜索树。

3.算法总体思想

①动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题

【算法设计与分析】动态规划设计思想介绍_第1张图片

②但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。

【算法设计与分析】动态规划设计思想介绍_第2张图片

③如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。
【算法设计与分析】动态规划设计思想介绍_第3张图片

4.动态规划基本步骤

找出最优解的性质,并刻划其结构特征。

递归地定义最优值。

以自底向上的方式计算出最优值。

根据计算最优值时得到的信息,构造最优解。

步骤(1)~(3)是动态规划算法的基本步骤。在只需要求岀最优值的情形,步骤(4)可以省略,步骤(3)中记录的信息也较少;若需要求出问题的一个最优解,则必须执行步骤(4),步骤(3)中记录的信息必须足够多以便构造最优解。

5.动态规划问题的特征

动态规划算法的有效性依赖于问题本身所具有的两个重要性质:最优子结构性质和子问题重叠性质。

(1) 最优子结构:当问题的最优解包含其子问题的最优解时,称该问题具有最优子结构性质。

(2) 重叠子问题:在用递归算法自顶向下解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只解一次,而后将其解保存在一个表格中,在以后尽可能多地利用这些子问题的解。

你可能感兴趣的:(算法题与技巧【蓝桥】,动态规划)