动态规划算法与分页发类似,基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
与分冶法不同的是,适合于用动态规划法求解的问题,经分解得到的子问题往往不是相互独立的。所以若用分冶法解这类问题,则分解得到的子问题太多,以至于最后解决原问题需要消耗指数时间。
在分冶法中,保存下了已解决的子问题的答案,在需要时再找出以求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。
动态规划的步骤:
(1)找出最优解的性质,并刻画其结构特征
(2)递归地定义最优值
(3)以自底向上的方式计算出最优值
(4)根据计算最优值时得到的信息,构造最优解
给定n个矩阵{A1,A2,...,An},其中相邻两矩阵课程,由于矩阵乘法满足结合律,故有不同的次序。这种计算次序可用加括号的方式确定。
若一个矩阵连成绩的计算次序完全确定,也就是说该连成绩已完全加括号,则可以依此次序运算。完全加括号的矩阵连乘积可递归定义为:(1)单个矩阵是完全加括号的(2)矩阵连乘积A是完全加括号的,则A可表示为A=(BC)
首先考虑两个矩阵乘积所需计算量,若A使p*q的矩阵,B是q*r的矩阵,则其乘积C=AB是一个p*r的矩阵,共需要pqr次数乘。
穷举搜索P(n)随n呈指数增长,下面考虑用动态规划法解:
1、分析最优解的结构