动态规划与分治法的异同:
相同点:其基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解。
差异点:与分治法不同的是,适合用动态规划法求解的问题经分解得到的子问题往往不是相互独立的。有些问题分解后的子问题往往是重复的,此时若用分支法则会重复计算耗费时间内存。
总结:为了达到避免重复计算,可以用一个表来记录所有已解决的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果填入表中。
步骤:
- 找出最优解的性质,刻画其结构特征。
- 递归地定义最优值。
- 以自底向上的方式计算最优值。
- 根据计算最优值得到的信息构造最优解。
- 矩阵连乘问题
- 分析最优解的结构
- 建立递归关系
- 计算最优值
- 构造最优解
动态规划算法的基本要素
最优子结构:当问题的最优解包含了其子问 题的最优解时,称该问题具有最优子结构性质。
重叠子问题:在用递归算法自顶向下解此问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算。动态规划算法对每个子问题只解一次,然后将解保存在一个表格中。
问题描述:
给定n个矩阵:A1,A2,...,An,其中Ai与Ai+1是可乘的,i=1,2...,n-1。确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。输入数据为矩阵个数和每个矩阵规模,输出结果为计算矩阵连乘积的计算次序和最少数乘次数。
问题解析