代码之家  ›  专栏  ›  技术社区  ›  R. Martinho Fernandes

矩阵加法的复杂性是什么?

  •  11
  • R. Martinho Fernandes  · 技术社区  · 15 年前

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

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

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

    我认为它是二次运算的另一个问题是,增加三维矩阵是三次的,而增加四维矩阵是 O(n^4) 等等,即使所有这些问题都可以归结为加上两个向量的问题,这两个向量具有明显的线性解。

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

    4 回复  |  直到 15 年前
        1
  •  7
  •   akuhn    15 年前

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

    注意: 在某些硬件(GPU、向量机等)上,添加可能比预期运行得更快(尽管复杂性仍然相同,请参阅下面的讨论),因为硬件可以在一个步骤中执行多个添加。对于有界问题大小(如n<3),它甚至可能是一个步骤。

        2
  •  5
  •   rlbond    15 年前

    对于具有m行和n列的二维矩阵,它是o(m*n)。

    或者你可以说它是o(l),其中l是元素总数。

        3
  •  3
  •   Drew Hall    15 年前

    通常,问题是用“大小为n”的正方形矩阵来定义的,也就是nxn。根据这个定义,矩阵加法是O(n^2),因为您必须访问每个nxn元素一次。

    根据同样的定义,矩阵乘法(使用平方nxn矩阵)是O(n^3),因为您需要访问每个源矩阵中的n个元素来计算产品矩阵中的每个nxn元素。

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

        4
  •  2
  •   µBio    15 年前

    想想一般的案例实施:

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

    如果我们取简单的平方矩阵,那就是n x n加法