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. Li⋅Ri

  3. Li⋅RiA⋅B

i=1,…,KcLi⋅RiA⋅BO(K2)

Kℓ×KℓK×KKℓ−1×Kℓ−1K×KO(K2ℓ)O(1)Kℓ×KℓKℓ−1×Kℓ−1S(ℓ−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)

kfkf−1fkkn2+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.