【问题标题】:Time complexity of matrix chain multiplication矩阵链乘法的时间复杂度
【发布时间】:2012-01-23 18:56:47
【问题描述】:

这是 Cormen 等人在“算法简介”中解决的问题。人。 通道。 15,第 15.2 节:矩阵链乘法。 PG。 373.

目标是将矩阵链积 A1.A2.A3.....An 括起来,以使标量乘法的次数最少。
对于Ai.Ai+1....Ak.Ak+1.....Aj
矩阵 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 循环,所以它是正确的。但是通过查看递归,我并不能直观地理解这一点。

有人可以帮忙吗?

【问题讨论】:

    标签: algorithm time-complexity


    【解决方案1】:

    最终的解决方案是计算m[0,N]。但是在计算m[0,N] 之前,需要计算所有m[i,j] 值。这使它成为O(N^2)

    从递归公式可以看出每个m[i,j]计算需要O(N)复杂度。

    所以O(N^3) 以获得完整的解决方案。

    【讨论】:

    • 哦,谢谢你的解释。我想我现在明白了。!
    • 最终的解是 m[1,N-1] 而不是 m[0,N]
    【解决方案2】:

    任何 MCM 给定问题都可能存在 O(n^2) 个独特的子问题,并且对于每个这样的子问题,可能存在 O(n) 个拆分。

    所以它是 O(n^3)。

    【讨论】:

      猜你喜欢
      • 2018-03-30
      • 2012-01-22
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多