我找到了some mentions in another question of matrix addition being a quadratic operation。但我认为这是线性的。
如果我将矩阵的大小加倍,我需要计算加法的两倍,而不是四倍。
主要分歧点似乎是问题的大小。对我而言,它是矩阵中元素的数量。其他人则认为它是列数或行数,因此O(n^2)
复杂度。
我将其视为二次运算的另一个问题是,这意味着添加三维矩阵是立方的,并且添加4维矩阵是O(n^4)
等,即使所有这些问题都可以减少解决了添加两个向量的问题,这个向量具有明显的线性解。
我是对还是错?如果错了,为什么?
答案 0 :(得分:7)
正如您已经指出的那样,这取决于您对问题大小的定义:是元素的总数,还是矩阵的宽度/高度。哪个是正确的实际上取决于矩阵加法所属的较大问题。
注意:在某些硬件(GPU,矢量机等)上,添加可能比预期运行得更快(即使复杂性仍然相同,请参见下面的讨论),因为硬件可以一步执行多次添加。对于有界问题大小(如n< 3),它甚至可能是一步。
答案 1 :(得分:5)
对于具有M行和N列的二维矩阵,它是O(M * N)。
或者你可以说它是O(L),其中L是元素的总数。
答案 2 :(得分:3)
通常使用“大小为N”的平方矩阵定义问题,即NxN。根据该定义,矩阵加法是O(N ^ 2),因为您必须恰好访问每个NxN元素一次。
通过相同的定义,矩阵乘法(使用平方NxN矩阵)是O(N ^ 3),因为您需要访问每个源矩阵中的N个元素来计算乘积矩阵中的每个NxN元素。
通常,所有矩阵运算都有一个O(N ^ 2)的下限,因为你必须至少访问每个元素一次以计算涉及整个矩阵的任何内容。
答案 3 :(得分:2)
想到一般案例实施:
for 1 : n
for 1 : m
c[i][j] = a[i][j] + b[i][j]
如果我们采用简单的方阵,即n x n加法