矩阵复杂性

时间:2014-03-02 02:12:23

标签: c algorithm matrix time-complexity

我必须计算搜索矩形矩阵中元素的算法的复杂性。它使用分而治之。对于方阵,我的时间函数变为* T(n / b)+ O(n ^ 2)。但是对于矩形矩阵,如果必须将其分成4个子矩阵,我不知道如何表示除法。它是* T(m * n / 4)+ O(n)?

1 个答案:

答案 0 :(得分:0)

您没有描述算法,因此无法准确回答问题。但我会尝试假设算法如下:

  1. 如果m = 1n = 1则在O(m * n)时间处理矩阵。
  2. 否则(m > 1n > 1)将矩阵划分为四个大小不超过[m / 2]x[n / 2]的矩阵,其中[y]是一个不小于y的最小整数}。
  3. 使用这些基质中的每一个调用算法。然后“合并”结果O(m * n)时间。
  4. 在这种情况下,时间复杂度的递归方程将是

    1. T(1,n)= O(n)
    2. T(m,1)= O(m)
    3. T(m,n)= 4 * T([m / 2],[n / 2])+ O(m * n)
    4. 让我们解决它

      T(m, n) = O(m * n) +
                4 * O([m / 2] * [n / 2]) +
                4 ^ 2 * O([m / 4] * [n / 4]) +
                ... +
                4 ^ L * O([m / 2 ^ L] * [n / 2 ^ L]),  where L = [log(min(m, n))]
      T(m, n) = O(m * n + ... + 4 ^ L * [m / 2 ^ L] * [n / 2 ^ L]) =
              = O(m * n + ... + 2 ^ L * [m / 2 ^ L] * 2 ^ L * [n / 2 ^ L] =
              = O(m * n + ... + m * n  (L times)) =
              = O(L * m * n) = O(m * n * [log(min(m, n))])
      

      所以问题的答案是

      T(m,n)= O(m * n * [log(min(m,n))]),其中log代表二进制对数,[y]代表{{ 1}}功能。