【发布时间】:2015-12-17 08:48:22
【问题描述】:
给定矩阵 A 和 P,我需要计算“转置共轭”(不确定术语是什么)
X = P A Transpose(P)
我在想最快的方法是
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) {
for(int k=0;k<n;k++)
for(int l=0;l<n;l++) X[i][j]+=P[i][l]*A[l][k]*P[j][k];
}
}
}
但是这是 O(n^4),我也可以将它作为两个常规矩阵乘法,所以两次 O(n^3)。我在这里遗漏了什么还是应该坚持使用两次乘法
X = A Transpose(P)
X = P X
【问题讨论】:
-
有乘法算法faster than O(n^3)
-
使用 Strassen 算法 (en.wikipedia.org/wiki/Strassen_algorithm) 进行矩阵乘法运算的 O(n^2.81)。基本思想是将每个矩阵分成 4 个子矩阵,该算法使用 7 个子矩阵乘法而不是 8 个。递归地应用这个,你得到 O(n^2.81)。
标签: c++ matrix matrix-multiplication transpose