在O(n)时间内添加平方矩阵?

时间:2013-04-02 19:55:55

标签: algorithm matrix complexity-theory

假设我们有两个大小相同的方形矩阵n,名为AB

AB共享其主对角线对角线中的每个条目具有相同值(即A[0,0] = A[1,1] = A[2,2] ... = A[n,n]B[0,0] = B[1,1] = B[2,2] ... = B[n,n])的属性。

有没有办法表示AB,以便它们可以在O(n)时间内相互添加,而不是O(n ^ 2)?

2 个答案:

答案 0 :(得分:7)

一般情况下:否。

对于n x n矩阵,要填充n^2个输出值;需要O(n^2)时间。

在您的情况下:否。

即使输入/输出值的O(n)是相关的,也会使O(n^2)独立。因此,没有任何表示可以将整体运行时间降低到O(n^2)以下。

<强>可是...

为了减少运行时间,有必要(但不一定足够)将相关值的数量增加到O(n^2)。显然,这是否可能取决于具体情况......

答案 1 :(得分:3)

为了补充Oli Cherlesworth的答案,我想指出,在稀疏矩阵的具体情况中,您通常可以获得O(n)的运行时。

例如,如果您碰巧知道您的矩阵是对角线的,那么您也知道结果矩阵将是对角线的,因此您只需要计算{ {1}}值。 类似地,可以在n中添加带状矩阵,以及更多“随机”稀疏矩阵。通常,在稀疏矩阵中,每行的非零元素的数量或多或少是恒定的(例如,从有限元计算中获得这些元素,或者从图形邻接矩阵等获得),因此,使用适当的表示形式,例如“Compressed row storage”或“压缩列存储”,您最终将使用O(n)操作添加两个矩阵。

还特别提到了次线性随机算法,它只是建议你知道从实际解决方案“不太远”的最终值,直到随机错误。