动态规划矩阵链序分析

时间:2017-03-15 21:57:01

标签: algorithm dynamic-programming matrix-multiplication

所以我们有矩阵链序算法,它找到乘法矩阵的最佳方法。我明白为什么它的运行时间为O(n ^ 3),但很难证明它的大欧米茄(n ^ 3)。算法如下 算法矩阵链序(p)

1. n ← p.length − 1
2. for i ← 1 to n do
3.   m[i, i] ← 0
4. for l ← 2 to n do
5.    for i ← 1 to n − l + 1 do
6.      j ← i + l − 1
7.      m[i, j] ← ∞
8.      for k ← i to j − 1 do
9.        q ← m[i, k] + m[k + 1, j] + pi−1pkpj (these are P(base)i-1
10.       if q < m[i, j] then
11.         m[i, j] ← q
12.         s[i, j] ← k
13. return s

O(n ^ 3)是显而易见的,因为有三个循环嵌套并运行O(n)次。我怎么去寻找大欧米茄(n ^ 3)

1 个答案:

答案 0 :(得分:1)

为了更好地理解问题,我可以看一下here

您需要计算上层tirangular矩阵的元素。让我们看看这些子对角线:

  1. 第一个对角线,每个元素只需要 1 操作,对角线有 n-1 元素。
  2. 第二个subidagonal你需要 2 操作,它有 n-2 元素。
    ...

  3. 对于最后一个对角线,您需要 n-1 操作,并且 1 元素。

  4. 所以,你有一个求和i(n-i),0 <&lt;我&lt; ñ。这个总和可以分为两部分:

    • sum(in)= n(1 + 2 + ...(n-1))= n(n / 2)(n-1)= n ^ 3/2-n ^ 2/2
    • sum(i ^ 2)= n(n + 1)(2n + 1)/ 6 = n ^ 3/3 + n ^ 2/2 + n / 6

    现在减去,你将有n ^ 3/6 + ...

    所以,它是Omega(n ^ 3)。