Oświadczenie: Następująca metoda nie została dokładnie udowodniona jako optymalna. Dostarczony jest nieformalny dowód.
Problem sprowadza się do znalezienia najbardziej efektywnego zamówienia, biorąc pod uwagę kwadrat produktu.
Na przykład, patrząc na np. , musimy tylko optymalnie rozwiązać ponieważ rozszerza się do . Żadne przydatne informacje dotyczące zamawiania nie są dodawane przez ponowne połączenie . Intuicja polega na tym, że ponieważ problem optymalnego uporządkowania można rozwiązać oddolnie, wyższe uporządkowania składające się z większej liczby elementów korzystających z tych samych macierzy są nieistotne. ( A B C ) 2 A B C A B C A B C( A B C)50( A B C)2)A B CA B CA B C
Znalezienie najlepszej kolejności sprowadza się do problemu mnożenia łańcucha macierzy. Po znalezieniu optymalnego uporządkowania zastosuj potęgowanie do trypletu (ogólnie n-krotki) w uporządkowaniu.A B CA B C
Na przykład, jeśli optymalnym uporządkowaniem kwadratu jest , rozwiązaniem początkowego problemu jest .A ( B ( C A ) ) 49 B CA ( B ( CA ) ) B CA ( B ( CA ) )49B C.
Podsumowując:
1) Pierwszym krokiem do rozwiązania jest rozwiązanie .
2) Rozwiązanie najlepiej jest podejść jako przykład problemu mnożenia łańcucha macierzy.
3) Użycie n-krotki zamawiając z rozwiązania w (2) da nam rozwiązanie (1) jako pewien smak (zauważ, że każdy inny należy również zastosować grupowanie z rozwiązania (2)). ( A 1 A 2 ⋯ A n ) 2 ( A 1 A 2 ⋯ A n ) 2 G A 1 ⋅ A 2 ⋅ G m - 1 ⋅ A n( A1ZA2)⋯An)m( A1ZA2)⋯ An)2)
( A1ZA2)⋯ An)2)
solZA1⋅ A2)⋅ G.m - 1⋅ An
Nieformalny dowód
Uwzględniając najprostszym przypadku przy pomocy dwóch matryc, , możemy zauważyć, że i mają wymiary wzdłuż i , odpowiednio. Każdy produkt wykorzystujący i ma jeden z następujących wymiarów: A B X × Y Y × X A B( A B )nZAbX× YY× XZAb
Y × X Y × Y X × XX× Y
Y× X
Y× Y
X× X
Mamy albo lub .Y ≤ XX< YY≤ X
Założenie 1a): ma wymiar , a to uporządkowanie gwarantuje optymalne podejście od dołu do góry. Każda inna konfiguracja i jest albo równie dobra, albo gorsza. Zatem problem został optymalnie rozwiązany jako .A B X × X A B ( A B ) nX< Y
A B.X× XZAb( A B )n
Założenie 1b): ma wymiar . Jest to optymalna zamawiania wszystkich produktów związanych z i . Tak więc, roztwór jest optymalnie znalezione .B A Y × Y A B A ( B A ) n - 1 BY≤ X
B AY× YZAbA ( B A )n - 1b
To kończy dowód i przyjrzeliśmy się tylko dwóm zamówieniom znalezionym w , problemie kwadratowym.A B A B
Przy użyciu większej liczby macierzy argument jest podobny. Być może możliwy jest dowód indukcyjny? Ogólna idea polega na tym, że rozwiązanie MCM dla kwadratu znajdzie optymalny rozmiar dla operacji z uwzględnieniem wszystkich zaangażowanych macierzy.
Studium przypadku:
julia> a=rand(1000,2);
julia> b=rand(2,1000);
julia> c=rand(1000,100);
julia> d=rand(100,1000);
julia> e=rand(1000,1000);
julia> @time (a*b*c*d*e)^30;
0.395549 seconds (26 allocations: 77.058 MB, 1.58% gc time)
# Here I use an MCM solver to find out the optimal ordering for the square problem
julia> Using MatrixChainMultiply
julia> matrixchainmultiply("SOLVE_SQUARED", a,b,c,d,e,a,b,c,d,e)
Operation: SOLVE_SQUARED(A...) = begin # none, line 1:
A[1] * (((((A[2] * A[3]) * (A[4] * (A[5] * A[6]))) * (A[7] * A[8])) * A[9]) * A[10])
end
Cost: 6800800
# Use the ordering found, note that exponentiation is applied to the group of 5 elements
julia> @time a*(((((b*c)*(d*(e*a)))^29*(b*c))*d)*e);
0.009990 seconds (21 allocations: 7.684 MB)
# I also tried using the MCM for solving the problem directly
julia> @time matrixchainmultiply([30 instances of a,b,c,d,e]);
0.094490 seconds (4.02 k allocations: 9.073 MB)