Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 在O(n)时间内增加平方矩阵?_Algorithm_Matrix_Complexity Theory - Fatal编程技术网

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

Algorithm 在O(n)时间内增加平方矩阵?,algorithm,matrix,complexity-theory,Algorithm,Matrix,Complexity Theory,假设我们有两个大小相同的方阵n,分别命名为A和B A和B共享一个属性,即它们的主对角线中的每个条目都是相同的值(即,A[0,0]=A[1,1]=A[2,2]…=A[n,n]和B[0,0]=B[1,1]=B[2,2]…=B[n,n]) 是否有一种方法来表示a和B,以便它们可以在O(n)时间内相互添加,而不是O(n^2)?一般来说:否。 对于nxn矩阵,有n^2输出值要填充;这需要O(n^2)时间 在您的情况下:否。 即使输入/输出值的O(n)是依赖的,也会留下独立的O(n^2)。因此,没有一种表示

假设我们有两个大小相同的方阵
n
,分别命名为
A
B

A
B
共享一个属性,即它们的主对角线中的每个条目都是相同的值(即,
A[0,0]=A[1,1]=A[2,2]…=A[n,n]
B[0,0]=B[1,1]=B[2,2]…=B[n,n]


是否有一种方法来表示
a
B
,以便它们可以在O(n)时间内相互添加,而不是O(n^2)?

一般来说:否。

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

在您的情况下:否。

即使输入/输出值的
O(n)
是依赖的,也会留下独立的
O(n^2)
。因此,没有一种表示方法可以将整个运行时减少到
O(n^2)
以下

但是…


为了减少运行时间,有必要(但不一定足够)将依赖值的数量增加到
O(n^2)
。显然,这是否可能取决于特定的场景…

为了补充Oli Cherlesworth的回答,我想指出,在稀疏矩阵的特定情况下,通常可以获得运行时间
O(n)

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


还特别提到了次线性随机算法,它只建议您知道最终值,该值与实际解“不太远”,直到随机错误。

此外,还有
O(n^2)
独立值要计算,因此任何表示都需要
O(n^2)
时间。我不会说/any/尽管;)如果矩阵是稀疏的,那么您可以使用
O(nnz)
nnz
非零的数量,其中,
nnz=O(n)
。特别是,如果他的矩阵是对角的,那么你直接得到了一个
O(n)
解。@WhitAngl:在这两种情况下,O(n^2)的值是相同的,所以这与我的答案并不矛盾;)它与“需要
O(n^2)
时间”的说法相矛盾:如果你只存储对角线,那么它确实需要
O(n)
time:)@WhitAngl:“即使输入/输出值的O(n)是依赖的……”;这两种情况都不是这样。