📜  矩阵链乘法示例

📅  最后修改于: 2020-12-10 06:31:32             🧑  作者: Mango

矩阵链乘法的例子

示例:给定序列{4、10、3、12、20和7}。矩阵的大小为4 x 10、10 x 3、3 x 12、12 x 20、20 x7。我们需要计算M [i,j],0≤i,j≤5。我们知道M [i,i对于所有i = 0。

让我们继续远离对角线。我们为2个矩阵的乘积计算最佳解。

其中P 0至P 5为Position,M 1至M 5为大小矩阵(p i至p i-1 )

在顺序的基础上,我们制定一个公式

在动态编程中,每个方法的初始化均由'0'完成,因此我们以'0'对其进行初始化。

我们必须对所有组合进行分类,但是要考虑最小输出组合。

  • 我们用等于0的i,j值初始化对角线元素。
  • 整理完第二条对角线后,我们得到与之对应的所有值

现在,第三对角线将以相同的方式求解。

现在是3个矩阵的乘积:

  • 有两种情况可以解决此乘法:(M 1 x M 2 )+ M 3 ,M 1 +(M 2 x M 3 )
  • 解决这两种情况后,我们选择存在最小输出的情况。

M [1,3] = 264

由于在两种情况下比较两个输出264的最小值,因此我们在表中插入264 ,并且(M 1 x M 2 )+ M 3会选择此组合进行输出。

  • 有两种情况可以解决此乘法:(M 2 x M 3 )+ M 4 ,M 2 +(M 3 x M 4 )
  • 解决这两种情况后,我们选择存在最小输出的情况。

M [2,4] = 1320

由于在这两种情况下比较两个输出1320的最小值都是最小的,因此我们将1320插入表中,并选择M 2 +(M 3 x M 4 )作为输出组合。

  • 有两种情况可以解决此乘法:(M 3 x M 4 )+ M 5 ,M 3 +(M 4 xM 5 )
  • 解决这两种情况后,我们选择存在最小输出的情况。

由于在两种情况下比较两个输出1140的最小值都是最小的,因此我们在表中插入1140 ,并且(M 3 x M 4 )+ M 5会选择此组合进行输出。

现在有4个矩阵的乘积:

在三种情况下,我们可以解决此乘法:

  • (M 1 x M 2 x M 3 )M 4
  • M 1 x(M 2 x M 3 x M 4 )
  • (M 1 xM 2 )x(M 3 x M 4 )

解决这些情况后,我们选择存在最小输出的情况

M [1,4] = 1080

在比较不同情况下的输出时,“ 1080 ”是最小输出,因此我们在表中插入1080,并在输出制作中取出(M 1 xM 2 )x(M 3 x M 4)组合,

在三种情况下,我们可以解决此乘法:

  • (M 2 x M 3 x M 4 )x M 5
  • M 2 x(M 3 x M 4 x M 5 )
  • (M 2 x M 3 )x(M 4 x M 5 )

解决这些情况后,我们选择存在最小输出的情况

在比较不同情况下的输出时,“ 1350 ”是最小输出,因此我们在表中插入1350,并在输出制作中取出M 2 x(M 3 x M 4 xM 5)组合。

现在有5个矩阵的乘积:

有五种情况可以解决此乘法:

  • (M 1 x M 2 xM 3 x M 4 )x M 5
  • M 1 x(M 2 xM 3 x M 4 xM 5 )
  • (M 1 x M 2 xM 3 )x M 4 xM 5
  • M 1 x M 2 x(M 3 x M 4 xM 5 )

解决这些情况后,我们选择存在最小输出的情况

在比较不同情况下的输出时,“ 1344 ”是最小输出,因此我们在表中插入1344,并在输出制作中取出M 1 x M 2 x(M 3 x M 4 x M 5)组合。

最终输出为:

步骤3:计算最佳成本:让我们假设矩阵i的维数为p i-1 xp i ,其中i = 1、2、3 … n。输入是一个序列(p 0 ,p 1 ,… p n ),其中长度[p] = n + 1。该过程使用辅助表m [1..n,1 ….. n]来存储m [i,j]花费辅助表s [1 … n,1 ….. .n]记录了k的哪个索引在计算m [i,j]时达到了最佳成本。

对于i = 1、2、3 … n,该算法首先计算m [i,j]←0,这是长度为1的链的最小成本。