📅  最后修改于: 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'对其进行初始化。
我们必须对所有组合进行分类,但是要考虑最小输出组合。
现在,第三对角线将以相同的方式求解。
现在是3个矩阵的乘积:
M [1,3] = 264
由于在两种情况下比较两个输出264的最小值,因此我们在表中插入264 ,并且(M 1 x M 2 )+ M 3会选择此组合进行输出。
M [2,4] = 1320
由于在这两种情况下比较两个输出1320的最小值都是最小的,因此我们将1320插入表中,并选择M 2 +(M 3 x M 4 )作为输出组合。
由于在两种情况下比较两个输出1140的最小值都是最小的,因此我们在表中插入1140 ,并且(M 3 x M 4 )+ M 5会选择此组合进行输出。
现在有4个矩阵的乘积:
在三种情况下,我们可以解决此乘法:
解决这些情况后,我们选择存在最小输出的情况
M [1,4] = 1080
在比较不同情况下的输出时,“ 1080 ”是最小输出,因此我们在表中插入1080,并在输出制作中取出(M 1 xM 2 )x(M 3 x M 4)组合,
在三种情况下,我们可以解决此乘法:
解决这些情况后,我们选择存在最小输出的情况
在比较不同情况下的输出时,“ 1350 ”是最小输出,因此我们在表中插入1350,并在输出制作中取出M 2 x(M 3 x M 4 xM 5)组合。
现在有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的链的最小成本。