Wymagana pamięć do szybkiego mnożenia macierzy

12

Załóżmy, że chcemy pomnożyć macierzy. Algorytm powolnego mnożenia macierzy działa w czasie O ( n 3 ) i wykorzystuje pamięć O ( n 2 ) . Najszybsze mnożenie macierzy przebiega w czasie n ω + o ( 1 ) , gdzie ω jest stałą algebry liniowej, ale co wiadomo o jej złożoności pamięci?n×nO(n3)O(n2)nω+o(1)ω

Wydaje się, że a priori możliwe jest, że szybkie mnożenie macierzy zużywa pamięć . Czy jest jakaś gwarancja, że ​​można to zrobić w pamięci O ( n 2 ) ? Czy to tak, że obecnie znane algorytmy mnożenia macierzy wykorzystują pamięć O ( n 2 ) ?nωO(n2)O(n2)

(Właściwie interesuje mnie mnożenie macierzy prostokątnej, ale zakładam, że odpowiedź byłaby w tym przypadku taka sama jak w przypadku kwadratu, a przypadek kwadratu jest lepiej zbadany).

David Harris
źródło

Odpowiedzi:

16

Wykorzystanie przestrzeni wynosi co najwyżej dla wszystkich algorytmów podobnych do Strassena (tj. Opartych na górnej granicy algebraicznie mnożącej macierz). Zobacz Złożoność przestrzeni algorytmu Coppersmitha – WinogradaO(n2)

O(n2)K×KKcc<3

  1. KcL1,,LKcAKcR1,,RKcB

  2. LiRi

  3. LiRiAB

i=1,,KcLiRiABO(K2)

K×KK×KK1×K1K×KO(K2)O(1)K×KK1×K1S(1)S()S(1)+O(K2)S(1)=2K2S()O(K2)

Ryan Williams
źródło
nωωnωω(n2)
1
O(nω+δ)O(n2)δ>0
f(i)n2i=0,...,knω+o(1)n2+o(1)
kfkf1fkkn2+o(1)
nkknf(k(n))=no(1)k(n)nnω+o(1)
4

pO(n2/p)

Alexander Tiskin
źródło