动态规划算法
【动态规划的定义】
动态规划(Dynamic Programming)是一种算法设计技术,是用来解决一种多段决策过程最优的通用方法。
【动态规划VS分而治之】
相同点:动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
不同点:与分治法不同的是,适合用动态规划法求解的问题,经分解得到的子问题往往不是相互独立的。
【动态规划算法的基本要素】
动态规划算法的有效性依赖于问题本身所具有的两个重要性质:最优子结构性质和子问题重叠性质。
从一般意义上讲,问题所具有的这两个重要性质是该问题可用动态规划算法求解的基本要素。
最优子结构性质:当问题的最优解包含了其子问题的最优解时,称该问题具有最优子结构性质。
子问题重叠性质:在用递归算法自顶向下求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。
【动态规划算法的设计步骤】
(1)找出最优解的性质,并刻画其结构特征。
(2)递归地定义最优值。
(3)以自顶向上的方式计算出最优值(并添入表格中保存)。
(4)根据计算最优值时得到的信息,构造最优解。