我想将两个矩阵相乘,但三重循环具有O(n 3 )复杂度。动态规划中是否存在将两个矩阵与O(n)复杂度相乘的算法?
好的,我们不能得到最好的O(n 2.81 )编辑,但有没有任何解决方案甚至可以将结果逼近某些特定的号码。矩阵的列和行
我的意思是我们得到O(n 2.81 )中最好的一个复杂的解,但结果很完美但是如果有任何解决方案甚至近似矩阵的乘法,因为我们有因式近似的公式等
如果你知道它会帮助我
问候。
答案 0 :(得分:40)
目前已知的最佳矩阵乘法算法是 "Coppersmith-Winograd algorithm" , O(n 2.38 )强>复杂但它 用于实际目的。
但是,您总是可以使用 "Strassen's algorithm" ,其 O(n 2.81 )复杂度但是没有这样的已知算法矩阵乘法与O(n)复杂度。
答案 1 :(得分:14)
在O(n ^ 2)处存在矩阵乘法的理论下界,因为您必须触摸许多存储器位置来进行乘法。正如其他人所说,有些算法将我们降低到O(n ^ 3)以下,但在实际使用中通常是不切实际的。
如果您需要加快速度,可能需要查看Cache Oblivious Algorithms,例如这一算法(http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.44.5650),它通过以缓存一致的方式执行操作来加速性能,确保数据在需要时缓存。
答案 2 :(得分:8)
简答:否
长答案:如果你有特殊类型的基质(例如对角矩阵),有很多方法。更好的矩阵乘法算法可以减少像O(n 2.4 )(http://en.wikipedia.org/wiki/Coppersmith-Winograd_algorithm)这样的东西。我熟悉的主要方法是使用分而治之算法来分割工作量(而不是我链接的工作负载)。
我希望这有帮助!
答案 3 :(得分:2)
如果已知矩阵是对角线,则可以在O(N)
运算中将它们相乘。但总的来说,你不能。
答案 4 :(得分:2)
矩阵具有O(n 2 )元素,并且每个元素必须至少考虑一次才能得到结果,因此矩阵乘法算法无法在小于O的情况下运行( n 2 )操作。
答案 5 :(得分:1)
如果
您可以设计算法,其复杂性仅取决于非零元素的数量。对于某些问题(例如有限元方法),这可能是强制性的。
答案 6 :(得分:0)
没有!我不这么认为。
除非您使用并行处理机,否则没有办法。它也有自己的依赖性和局限性。
到目前为止,尚未实现。
答案 7 :(得分:0)
如果你有n²
处理器和共享读存储器架构,你可以在O(n)
时间内将两个矩阵相乘......但这只是现在的理论。