【问题标题】:rectangular matrix complexity矩形矩阵复杂度
【发布时间】:2014-03-02 02:12:22
【问题描述】:

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

【问题讨论】:

  • 这个问题似乎离题了,因为它应该发布在cs.stackexchange.com
  • 你应该描述你的算法,以便我们可以推断出它的时间复杂度。

标签: c algorithm matrix time-complexity


【解决方案1】:

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

  1. 如果m = 1n = 1 则在O(m * n) 时间内处理矩阵。
  2. 否则(m > 1n > 1)将矩阵划分为大小不大于[m / 2]x[n / 2] 的四个矩阵,其中[y] 是不小于y 的最小整数。
  3. 使用这些矩阵中的每一个调用算法。然后“合并”结果为 O(m * n) 时间。

在这种情况下,时间复杂度的递归方程将是

  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)

让我们解决它

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]代表ceil函数。

【讨论】:

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