【问题标题】:What is the complexity of matrix addition?矩阵加法的复杂度是多少?
【发布时间】:2009-12-08 22:30:27
【问题描述】:

我找到了some mentions in another question of matrix addition being a quadratic operation。但我认为它是线性的。

如果我将矩阵的大小加倍,我需要计算加法的两倍,而不是四倍。

主要分歧点似乎是问题的规模。对我来说,这是矩阵中元素的数量。其他人认为这是列数或行数,因此是 O(n^2) 复杂性。

我将其视为二次运算的另一个问题是,这意味着添加 3 维矩阵是三次,添加 4 维矩阵是 O(n^4) 等,即使所有这些问题都可以简化为两个向量相加的问题,有一个明显的线性解。

我是对还是错?如果错了,为什么?

【问题讨论】:

  • 你是加倍矩阵中的元素总数还是矩阵的每个维度?
  • 为什么投反对票?这个问题是不清楚还是没用?

标签: matrix complexity-theory


【解决方案1】:

正如您已经指出的,这取决于您对问题大小的定义:是元素的总数,还是矩阵的宽度/高度。哪个是正确的实际上取决于矩阵加法所属的更大问题。

注意:在某些硬件(GPU、向量机等)上,加法可能比预期运行得更快(即使复杂性仍然相同,请参阅下面的讨论),因为硬件可以在一个步骤中执行多个加法.对于有限的问题大小(例如 n

【讨论】:

  • 硬件不会改变渐近复杂度。它可能一次执行更多的加法,但你不能添加两个矩阵,它们的加法比它们中的元素少。这是一个常见的误解,尤其是多线程。它更快的事实并不意味着它的渐近复杂度更低。
  • 这就是我想得太晚了。为什么两种观点都不正确?我现在感觉很笨。
  • @martinho 你说得对,是渐近复杂性,我想得太晚了:) 也许我可以说如果问题大小有上限,硬件可能会增加O(1) 时间内足够短的矩阵列
  • 我认为这种逻辑有点作弊。
  • 是的,在 big-O 表示法中不考虑常量;但是您倾向于将时间复杂性与操作数复杂性混淆
【解决方案2】:

对于具有 M 行和 N 列的二维矩阵,它是 O(M*N)。

或者你可以说它是 O(L),其中 L 是元素的总数。

【讨论】:

    【解决方案3】:

    通常使用“大小为 N”的方阵来定义问题,即 NxN。根据该定义,矩阵加法是 O(N^2),因为您必须对每个 NxN 元素仅访问一次。

    根据相同的定义,矩阵乘法(使用 NxN 方阵)是 O(N^3),因为您需要访问每个源矩阵中的 N 个元素来计算乘积矩阵中的每个 NxN 元素。

    通常,所有矩阵运算的下限都是 O(N^2),因为您必须至少访问每个元素一次才能计算涉及整个矩阵的任何内容。

    【讨论】:

    • 密集矩阵中的所有运算,稀疏矩阵运算都以非零项为界。
    • @Adrian:Touche...这里没有考虑稀疏/带状/其他结构化矩阵。
    【解决方案4】:

    想想一般的案例实现:

    for 1 : n
     for 1 : m
       c[i][j] = a[i][j] + b[i][j]
    

    如果我们采用简单的方阵,即 n x n 加法

    【讨论】:

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