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
xn
矩阵,有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)是依赖的……”;这两种情况都不是这样。