我有以下表达式,我需要计算该算法的时间复杂度。任何人都可以帮助获得该算法的正确时间复杂度。
% save a matrix-vector multiply
Atb = A'*b;
% cache the factorization (using cholesky factorization)
[L U] = factor(A, a);
for( k = 0; k < maxiter; k++)
{
x^k+1 = (A^TA + a* I)^-1 (A^Tb + a (z^k - u^k))^T
}
其中A = mxn矩阵,n >>> m,b,u,z = nx1个向量,I =单位矩阵,a = 0.001
答案 0 :(得分:0)
这里计算量最大的操作是矩阵求逆,因此这取决于您如何实现此操作。如果我们假设您使用takes O(n^3)
的高斯-乔丹算法实现,则总体复杂度为O(maxiter * n^3)
。这里我考虑到n
比m
大(A^T*A
占O(m*n^2)
)。
如果您在外面计算(A^T*A + a*I)^-1
和A^Tb
,那么您会得到
Inv * (Atb + a(z^k - u^k))^T
O(n^2)
是因为您需要将nxn矩阵乘以nx1向量,而加法和减法则使用O(n)
。
仍然,您在尺寸上有一些不一致之处,我在该问题的评论中对此进行了描述。