矩阵链乘法的时间复杂度

时间:2012-01-23 18:56:47

标签: algorithm time-complexity

这是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循环,所以它是正确的。但是通过观察递归,我并不直观地理解这一点。

有人可以帮忙吗?

2 个答案:

答案 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)。