要点:
动态规划方法与贪心法、分治法的异同;
动态规划方法的基本要素与求解步骤;
动态规划方法的应用。
难点:
如何根据问题的最优子结构性质构造构造动态规划方法中的递归公式或动态规划方程。
-
动态规划的基本思想
动态规划的实质
1) 分治思想:将原问题分解为更小、更易求解的子问题,然后对子问题进行求解,并最终产生原问题的解。
2) 解决冗余:求解过程中,所有子问题只求解一次并以表的方式保存,对于相同子问题并不重复求解而通过查表的方式获得。
动态规划和分治法的异同
1) 相同:都基于分治思想;
2) 不同:分治法中各个子问题是独立的,而动态规划方法中允许子问题之间存在重叠。
-
动态规划的3个基本要素
1)最优子结构性质:(F(5)的最优解包括F(4)的最优解)
问题最优解包含其子问题的最优解。为动态规划的基础。基于最优子结构性质导出递归公式或动态规划基本方程是解决一切动态规划问题的基本方法。反证法证明。
2) 子问题重叠性质:(F(3)和F(2)被多次求解)
求解过程中有些子问题出现多次而存在重叠。第一次遇到就加以解决并保存,若再次遇到时无需重复计算而直接查表得到,从而提高求解效率。该性质不是必要条件,但无该性质该方法即没有优势。
3) 自底向上的求解方法:(Fibonacci数的第二种求解方法)
鉴于子问题重叠性质,采用自底向上的方法。先填停止条件,求解每一级子问题并保存,直至得到原问题的解
//斐波那契数列自顶向下递归求解:
FIB1(n)
IF n = 0
RETURN 0
ELSE IF n = 1
RETURN 1
ELSE
RETURN FIB1(n-1) + FIB1(n-2)
//时间复杂性为O(1.618n),空间复杂性为O(n)。
//自底向上求解伪代码:
FIB2(n)
F[0] = 0 //F[0..n]
F[1] = 1
FOR i = 2 TO n
F[i] = F[i-1] + F[i-2]
RETURN F[n]
//其时间复杂性为O(n),空间复杂性为O(n)。
-
动态规划求解的4个基本步骤
(1)分析最优解的性质,以刻画最优解的结构特征 ——— 考察是否适合采用动态规划方法,即是否具备最优子结构性质;
(2)递归定义最优值(即建立递归公式或动态规划方程),包括停止条件(递归出口)和递归体;
(3)以自底向上的方式计算出最优值,并记录相关信息。应充分利用子问题重叠性质;
(4)最终构造出最优解。
备忘录方法(动态规划方法的变形)
相同点:用表格保存已经解决的子问题的解,下次需要时直接查表而无需重新计算;
不同点:①备忘录方法采用自顶向下的递归方式,动态规划是采用自底向上的递归方式;
②备忘录的控制结构和直接递归的结构同,区别在于备忘录方法为已有解的子问题建立备忘录待需要时查看;
最长公共子序列LCS问题
设序列X={
,
,…,
}和Y={