(学习八)矩阵链问题

问题描述:

 A1、A2...An为n个矩阵的序列,其中Ai为Pi-1×Pi阶矩阵,这个矩阵链的输入用向量P=<P0,P1,....Pn>给出。给定向量P,确定一种乘法次序,使得基本运算的总次数达到最小。

 

分析:我是利用动态规划的思想做的,因为递归方式的复杂度是很大的。然后自己造数据,按照伪代码模拟了好几遍,那就放一个稍微不凌乱点的。

开始被(A1A2)A3这个东西的表象蒙蔽了,其实每次对k进行讨论时,算(A1A2)A3,只要算P0P2P3即可,P0是第一个矩阵的row,P2是第二个矩阵的col,P3是第三个矩阵的row,为什么可以这么算,可以自己用特殊值代一下。

伪代码:

For r from 2 to n:
    For i from 1 to n-r+1:
      j=i+r-1;
      m[i][j]=m[i+1][j]+Pi-1PiPj;
      s[i][j]=i;
       For k from i to j-1:
             t=m[i][k]+m[k][j]+Pi-1PkPj;
If(t<m[i][j]){m[i][j]=t;s[i][j]=k;}
View Code

复杂度:O(n³)

源码:https://github.com/yizhihenpidehou/bananas/blob/master/%E7%AC%AC%E5%85%AB%E5%91%A8/%E4%BD%9C%E4%B8%9A8/main.cpp

原文地址:https://www.cnblogs.com/pipihoudewo/p/12704135.html