Wolna encyklopedia
Problem nawiasowania ciągu macierzy - jest problemem znalezienia takiego nawiasowania ciągu macierzy
, by zminimalizować koszt poszczególnych mnożeń. Nawiasowanie takie nazywa się optymalnym. Mówimy, że iloczyn macierzy
ma ustalone nawiasowanie, jeżeli tworzy go pojedyncza macierz, lub iloczyn dwóch iloczynów macierzy o ustalonym nawiasowaniu.
Spis treści |
Przykład ustalonych nawiasowań
Niech
będzie ciągiem macierzy. Ich iloczyn ma następujące ustalone nawiasowania:
Nawiasowanie a koszt obliczenia iloczynu macierzy
Łatwo przekonać się, że wybór nawiasowania może mieć znaczący wynik na liczbę operacji potrzebnych do obliczenia iloczynu macierzy - koszt pomnożenia dwóch macierzy, o wymiarach odpowiednio a × b i b × c wynosi
(dokładnie - wymaga
mnożeń skalarnych)
Niech dane będą trzy macierze
o rozmiarach odpowiednio 2 × 20, 20 × 1 i 1 × 10. Dla nawiasowania
koszt iloczynu wyniesie:
(koszt obliczenia
) +
(koszt obliczenia
). Razem: 
Dla tych samych macierzy, ale nawiasowania
koszt mnożenia wyniesie:
mnożeń dla
plus
mnożeń skalarnych
co daje łącznie
mnożeń skalarnych potrzebnych do pomnożenia wyniku przez
. Oszczędność nawiasowania pierwszego jest oczywista.
Własność optymalnej podstruktury
Można wykazać, że problem nawiasowania macierzy wykazuje własność optymalnej podstruktury.
Dowód
Załóżmy, że dla optymalnego nawiasowania macierzy
występuje podział między
i
, oraz, niewprost, że dla tego nawiasowania nawiasowanie
nie jest optymalne. Wówczas można by w nawiasowaniu
"podmienić" nawiasowanie
na optymalne, w wyniku czego otrzymalibyśmy nowe nawiasowanie
, lepsze od optymalnego - sprzeczność.
Rozwiązanie problemu nawiasowania macierzy
Problem nawiasowania ciągu macierzy można łatwo rozwiązać stosując algorytm dynamiczny. Definiujemy koszt optymalnego nawiasowania jako funkcję optymalnych rozwiązań podproblemów.
Niech
oznacza minimalny koszt wymnożenia macierzy
Może być zdefiniowane następująco:
- nawiasowanie tylko jednej macierzy - ![\! k[i][i]\ =\ 0](http://upload.wikimedia.org/math/e/d/b/edb1e39e69df649cc9465cb575ca4b6e.png)
- nawiasowanie to musi wyznaczać punkt podziału p, taki, że (zgodnie z podpunktem o własności optymalnego nawiasowania)
i
są optymalnymi rozwiązaniami podproblemów. Wtedy
jest równe sumie minimalnych kosztów obliczenia
i
plus koszt pomnożenia macierzy wynikowych tych podrozwiązań:





![\! k[i][j]\ =\ min_{i\le k <j} \{m[i][k]\ +\ m[k+1][j]\ +\ a_{i-1}\cdot b_k \cdot c_j\}](http://upload.wikimedia.org/math/3/c/a/3ca4cb98c8cd8ae6302606caf795b0c8.png)