这是Cormen等人在“算法导论”中解决的问题。人。 CH。 15,第15.2节:矩阵链乘法。 PG。 373。
目标是将矩阵链产品 A1.A2.A3 ..... An 括起来,使得标量乘法的数量最少。
对于 Ai.Ai + 1 .... Ak.Ak + 1 ..... Aj ,
Matrix Ai的尺寸为pi-1xpi
作者提出了递归
m[i,j] = 0 if i=j
= min {m[i,k] + m[k+1] + pi-1.pk.pj} where i goes from k to (j-1) if i<j
(m [i,j]是产品Ai所需的标量乘法的最小数量.... Aj)
到目前为止我理解,但他说的时间复杂度是O(n ^ 3)。
当我看到伪代码时,有3个for循环,所以它是正确的。但是通过观察递归,我并不直观地理解这一点。
有人可以帮忙吗?
答案 0 :(得分:6)
最终解决方案是计算m[0,N]
。但是,在计算m[i,j]
之前,需要计算所有m[0,N]
值。这使它成为O(N^2)
。
从递归公式中,您可以看到每个m[i,j]
计算需要O(N)
复杂度。
所以O(N^3)
为完整的解决方案。
答案 1 :(得分:1)
对于任何MCM给定的问题,可能存在O(n ^ 2)个唯一的子问题,并且对于每个这样的子问题,可能存在O(n)分裂。
所以它是O(n ^ 3)。