Answers:
对于所有类似Strassen的算法(即,基于矩阵乘法的秩的上限的算法,空间使用量最多为)。请参阅Coppersmith–Winograd算法的空间复杂度
但是,我在之前的回答中意识到,我没有解释为什么空间使用量为 ...所以这里有些麻烦。考虑一下类似Strassen的算法。它从用于矩阵乘法的固定算法开始,该算法对某些常数使用乘法。特别是,可以将这种算法(无论它是什么形式)编写为WLOG,以便:K × K K c c < 3
它计算不同的矩阵,这些矩阵将第一个矩阵的项乘以各种标量,并将矩阵乘以第二个矩阵类似的形式L 1,… ,L K c A K c R 1,… ,R K c B
它将这些线性组合相乘,然后
它乘法条目通过各种标量,然后将所有这些矩阵高达entrywise以获得。甲⋅ 乙
(这是所谓的“双线性”算法,但事实证明,每个“代数”矩阵乘法算法都可以用这种方式编写。)对于每个,该算法只需要在任何给定点将当前乘积和的当前值(初始设置为全零)存储在内存中,因此空间使用量为。大号我 ⋅ ř 我甲⋅ 乙Ô (ķ 2)
给定这种有限算法,然后通过将大矩阵分解为维度为块,将其扩展到任意矩阵,将有限的算法应用于块矩阵,并在需要将两个块相乘时递归调用该算法。在递归的每个级别,我们只需要在内存中保留字段元素(将不同的矩阵存储)。假设矩阵乘法的空间使用量为 ķ × ķ ķ ℓ - 1 × ķ ℓ - 1 ķ × ķ ø (ķ 2 ℓ)Ô (1 )ķ ℓ × ķ ℓ ķ ℓ - 1 × ķ ℓ - 1小号(ℓ - 1 )小号(ℓ )≤ 小号(ℓ - 1 ),此递归算法的空间使用量为,对于求解为。小号(1 )= 2 ķ 2小号(ℓ )≤ Ô (ķ 2 ℓ)
更一般地,可以在每个处理器的存储器中的处理器上完成快速矩阵乘法。但是,处理器之间的通信则不是最佳的。通过使用更多的内存可以实现最佳通信。据我所知,尚不清楚是否可以同时实现最佳通信和最佳存储。详细信息在http://dx.doi.org/10.1007/PL00008264O (n 2 / p )