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).

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)


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)

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.