一.矩阵链事例
![96a6eb9cc1a3ee4138f7ddb6b5e50339.png](https://i-blog.csdnimg.cn/blog_migrate/1062ce62897fc1e0e87ff6d1664f3efa.jpeg)
矩阵链问题主要涉及的时在多个矩阵相乘,如何通过相乘的顺序来减少程序运行。
二.例题分析
这次分析过程按照动态规划的三个基本条件来逐步解答:
1、寻找最优子结构:假设我们已经找到父矩阵链最优解,当我们划分到最后一步时都是两个子矩阵链(分别被括号包围)相乘,如(A1A2A3A4)(A5A6A7),此时显然外括号为父矩阵的最优括号划分。继续往下划分,((A1A2A3)A4)(A5(A6A7)),则两个子矩阵链的划分括号必须也为他们本身的最优括号划分。因为如果子矩阵链的划分括号不是他们本身的最优括号划分时,两个子矩阵链就有另一种最优括号划分,如(A1(A2A3A4))(A5(A6A7))。那么就与我们的假设相悖。((A1A2A3)A4)(A5(A6A7))不是我们父矩阵最优解。所以拥有最优划分的父矩阵的子矩阵链显然也拥有最优划分。
2、子问题重叠:看到步骤一是不是感觉这个问题可以使用递归来解决?显然可以。算法导论给出如下递归公式: