平方矩阵和运行时间
Posted
技术标签:
【中文标题】平方矩阵和运行时间【英文标题】:squaring matrix and running time 【发布时间】:2014-03-24 13:36:36 【问题描述】:我可以通过证明它只需要 5 次乘法来证明 2 * 2 的矩阵 A 的平方是 O(n^log5)。到目前为止我没有问题,但是当我想解释为什么我们不能将其推广到其他平方情况(不同的 n*n 大小)的两个原因之后,我可以想出一个如下:
我能想出的第一个原因是我将例如 3*3 矩阵与自身相乘并得出结论,它至少有 6 次乘法,因此它的运行时间至少为 O(n^log6),其中 n^epsalon 更大O(n^log5) 所以它比较慢,我们不能将 O(n^log5) 推广到所有情况。现在我需要另一个原因,但我想不出任何想法如何解释第二个原因任何人都可以提供帮助(我需要一个提示来提出一个想法)?
【问题讨论】:
对任何固定大小的矩阵求平方需要 O(1) 时间,因为只需要固定数量的乘法。说运行时间是 O(n^log 5) 在技术上是正确的,但你得出结论的推理是错误的。 谢谢,通过 strassen 分解我知道每个矩阵乘法是 T(n)=7T(n/2)+n^2 并且通过平方 2*2 矩阵我知道它 O(n ^log5) 现在,如果我证明其他情况是 T(n)>=6T(n/2)+n^2,那么我证明我不能概括 O(n^log5)。现在我很困惑,你能解释一下吗? “平方 2x2 矩阵我知道它是 O(n^log 5)”是什么意思?日志 5 来自哪里? 因为如果你最后将 A*A 相乘,你将得到 5 次乘法,而加法需要 n^2,所以我们有 5T(n/2)+n^2(与我们的结果完全相同)为施特拉森做) Strassen 递归中的 5 并不意味着“五次乘法”;它的意思是“五个子问题”。在 2 x 2 矩阵的情况下,只需要 5 次乘法,但没有子问题。同样 - 对于任何固定大小的矩阵,乘法的运行时间是 O(1)。 【参考方案1】:您不可能从示例中得出大 O 表示法的运行时间。 Big-O 表示法告诉我们算法的复杂性如何随着参数的增加(在本例中为矩阵大小 n)而扩展,因此如果您真的想通过实验近似它,您至少必须计算几个测试大小的运行时间.
但我怀疑您能否找到手动平方 100x100 矩阵的最佳方法……这实际上是一个难题。我们确定的是,它并不比矩阵-矩阵-积复杂。对于那些我们有一个 Omega(n^2) 的下限,因为我们必须至少查看矩阵的每个条目一次。我们有一个大约 O(n^2.3729) 的(理论上的)完美算法的上限,因为有一个已知的算法具有这种复杂性。 (见http://en.wikipedia.org/wiki/Matrix_multiplication#Algorithms_for_efficient_matrix_multiplication)
顺便说一句,您建议将 2.3729
【讨论】:
以上是关于平方矩阵和运行时间的主要内容,如果未能解决你的问题,请参考以下文章
模幂运算问题,使用朴素算法和重复-平方算法(快速幂+C#计算程序运行时间)