奇异值分解的时间复杂性

时间:2015-03-23 19:33:28

标签: c algorithm matrix linear-algebra

我过去几周一直在尝试在C中实施SVD,目前我一直在使用找到here的算法6,根据我的理解,此算法将在时间O(n ^ 5),因为有两个循环(其中一个循环不会从0变为n,我知道但是n ^ 5作为粗略界限),并且在内部循环矩阵内部必须进行乘法运算是一个n ^ 3过程。

然而,根据this website,对于n×n矩阵,SVD可以用O(2n ^ 3)计算。有谁知道我在哪里可以找到那个时间复杂度的算法?

1 个答案:

答案 0 :(得分:6)

如果有人在将来寻找答案,如果矩阵是方阵,则在O(n ^ 3)中计算SVD的算法是Jacobi Rotations的方法。

有关特定算法的更多信息,请参阅this website上的算法7。

由于拼写错误,网站上的符号有点令人困惑,但是在确定d1,d2,c和č的值的步骤中(抱歉,这是我最接近c的帽子在顶部),他们的意思是c = cos(theta),s = sin(theta),č= cos(phi)和š= sin(phi)。

您可以通过消除和替换来计算theta和phi的这些值,或者您可以查看this StackExchange post以了解如何计算它们。

之后就是遵循该算法。