Использование пространства не более для всех алгоритмов, подобных Штрассену (т.е. основанных на верхнем ограничении ранга матричного умножения алгебраически). См. Пространственная сложность алгоритма Копперсмита – ВиноградаO ( n2)
Тем не менее, в своем предыдущем ответе я понял, что не объяснил, почему используется пространство ... так что тут что-то волнистое. Рассмотрим, что делает алгоритм, подобный Штрассену. Он начинается с фиксированного алгоритма умножения матрицы K × K, который использует умножения K c для некоторой константы c < 3 . В частности, этот алгоритм (каким бы он ни был) может быть написан на WLOG так, чтобы:O ( n2)К× ККсс < 3
Он вычисляет различных матриц L 1 , … , L K c, которые умножают записи первой матрицы A на различные скаляры и матрицы K c R 1 , … , R K c из второй матрицы B аналогичной формы,КсL1, … , LКсAКср1, … , RКсВ
Он умножает эти линейные комбинации , тогдаLя⋅ Rя
Умножает элементы матрицы различными скаляров, а затем добавляет все эти матрицы вверх entrywise получить A ⋅ B .Lя⋅ RяA ⋅ B
(Это так называемый «билинейный» алгоритм, но оказывается, что каждый «алгебраический» алгоритм умножения матриц может быть записан таким образом.) Для каждого этот алгоритм должен хранить только текущий продукт л я ⋅ R я и текущее значение A ⋅ B (первоначально установлено на все нули) в памяти в любой заданной точке, таким образом , использование пространства O ( K 2 ) .я = 1 , … , КсLя⋅ RяA ⋅ BО ( К2)
С учетом этого конечного алгоритма, то затем продолжается до произвольного матриц, разбивая большие матрицы в K × K блоков размерами K л - 1 × K л - 1 , применяя конечное K × K алгоритм к блоку матрицы и рекурсивный вызов алгоритма всякий раз, когда необходимо умножить два блока. На каждом уровне рекурсии нам нужно хранить только O ( K 2 ℓ ) элементов поля в памяти (сохраняя O ( 1 )Кℓ× КℓК× ККℓ - 1× Кℓ - 1К× КО ( К2 ℓ)O(1)отличается матрицы). Предполагая, что использование пространства для умножения матрицы K ℓ - 1 × K ℓ - 1 равно S ( ℓ - 1 ) , использование пространства этого рекурсивного алгоритма составляет S ( ℓ ) ≤ S ( ℓ - 1 ) + O ( K 2 ℓ ) который для S ( 1 ) = 2 K 2Kℓ×KℓKℓ−1×Kℓ−1S(ℓ−1)S(ℓ)≤S(ℓ−1)+O(K2ℓ)S(1)=2K2решает в .S(ℓ)≤O(K2ℓ)
источник