From: Martin Mares Date: Thu, 20 Jan 2011 17:24:54 +0000 (+0100) Subject: APSP: Doplneno povidani o (zobecnenem) nasobeni matic X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=169c6409e5e6fb793f2bf2fb9799835051d8f892;p=ga.git APSP: Doplneno povidani o (zobecnenem) nasobeni matic --- diff --git a/14-floyd/14-floyd.tex b/14-floyd/14-floyd.tex index f3371b3..c2b16b4 100644 --- a/14-floyd/14-floyd.tex +++ b/14-floyd/14-floyd.tex @@ -157,7 +157,67 @@ regul ze~stavu~$u$ do stavu~$v$ po pøechodech z~mno¾iny $S(\psi)$. Vyhodnocování funkce~$f$ odpovídá pøímoèarým operacím s~øetìzci. -\h{Dosa¾itelnost pomocí násobení matic} +\h{Násobení matic} + +Øe¹íme-li grafové problémy pomocí matic, nabízí se pou¾ít známé subkubické algoritmy +pro lineárnì algebraické úlohy. Ty jsou obvykle zalo¾eny na efektivním násobení +matic -- dvì matice $n\times n$ mù¾eme vynásobit v~èase $\O(n^2.808)$ Strassenovým +algoritmem~\cite{strassen:matmult}, pøípadnì asymptoticky nejrychlej¹ím známým algoritmem od Coppersmithe +a Winograda~\cite{coppersmith:matmult} v~èase $\O(n^{2.376})$. Slavná hypotéza øíká, +¾e pro ka¾dé $\omega>2$ existuje algoritmus násobící matice se slo¾itostí $\O(n^\omega)$ +(blí¾e o~tomto fascinujícím tématu viz \cite{szegedy:matmult}). Oznaème tedy~$\omega$ +nejni¾¹í exponent, kterého jsme schopni dosáhnout. + +Co se stane, kdy¾ mocníme matici sousednosti~$A$ grafu? V~matici $A^k$ se na pozici +$i,j$ nachází poèet sledù délky~$k$, které vedou z~vrcholu~$i$ do vrcholu~$j$. +(Snadný dùkaz indukcí vynecháváme.) Pro libovolné $k\ge n-1$ jsou tedy v~$(A+E)^k$ +(kde $E$ znaèí jednotkovou matici; doplnili jsme tedy do grafu smyèky) nenuly +pøesnì tam, kde z~$i$ do~$j$ vede cesta. + +To nám dává jednoduchý algoritmus pro výpoèet matice dosa¾itelnosti~$R$ ($R_{ij}$ +je 1 nebo~0 podle toho, zda z~$i$ do~$j$ vede cesta). Do~matice~$A$ doplníme +na diagonálu jednièky a poté ji $\lceil \log_2 n\rceil$-krát umocníme na~druhou. +Abychom se vyhnuli velkým èíslùm, nahradíme po ka¾dém umocnìní nenuly jednièkami. +Celkem tedy provedeme $\O(\log n)$ násobení matic obsahující polynomiálnì velká +èísla, co¾ trvá $\O(n^\omega\log n)$. + +Na~tento postup se mù¾eme dívat i~obecnìji: + +\s{Definice:} {\I $(\oplus,\otimes)$-souèin} matic~$A,B \in X^{n\times n}$ +kde $\oplus$ a~$\otimes$ jsou dvì asociativní binární operace na~mno¾inì~$X$, +je matice~$C$ taková, ¾e +$$ +C_{ij} = \bigoplus_{k=1}^n A_{ik}\otimes B_{kj}. +$$ +Klasické násobení matic je tedy $(+,\cdot)$-souèin. + +Uva¾ujme nyní podobnì jako v~pøedchozí sekci nìjakou funkci~$f$, která pøiøazuje +mno¾inám sledù nìjaké hodnoty. Nech» $\oplus$ a $\otimes$ jsou operace, +pro nì¾ platí $f(\alpha\alt\beta) = f(\alpha) \oplus f(\beta)$ +a $f(\alpha\beta) = f(\alpha) \otimes f(\beta)$. + +Mìjme nyní pro ka¾dé $i,j$ nìjakou mno¾inu $\alpha_{ij}$ sledù z~$i$ do~$j$ +a matici~$A$ takovou, ¾e $A_{ij} = f(\alpha_{ij})$. Podobnì mìjme mno¾iny $\beta_{ij}$ +a pøíslu¹nou matici~$B$. Potom $(\oplus,\otimes)$-souèin matic $A$ a~$B$ je nìjaká +matice~$C$, pro ní¾ platí: +$$ +C_{ij} = f(\alpha_{i1}\beta_{1j} \alt \alpha_{i2}\beta_{2j} \alt \ldots \alt \alpha_{in}\beta_{nj}). +$$ +Jinými slovy, matice~$C$ popisuje ohodnocení v¹ech sledù, které vznikly spojením +sledu z~$\alpha$ se sledem z~$\beta$. + +Pokud tedy zaèneme maticí popisující sledy délky 0 nebo~1 (to je obdoba matice sousednosti), +staèí $\O(\log n)$ $(\oplus,\otimes)$-souèinù k~tomu, abychom znali ohodnocení v¹ech +sledù délky právì~$k$ pro nìjaké $k\ge n$. + +S~$(\lor,\land)$-souèiny a maticí sousednosti získáme algoritmus pro výpoèet dosa¾itelnosti +(ka¾dý souèin pøitom mù¾eme provést jako násobení matic následované pøepsáním nenul na +jednièky). + +Aplikujeme-li $(\min,+)$-souèiny na~matici délek hran doplnìnou nulami na~diagonále, +získáme matici vzdálenosti. Jediný zádrhel bohu¾el je, ¾e zatím $(\min,+)$-souèiny +neumíme poèítat rychleji ne¾ v~èase $\Theta(n^3)$. +(XXX: Jde to v~$\O(n^3/\log n)$, popsat, jak.) \h{Seidelùv algoritmus} diff --git a/ga.bib b/ga.bib index c56121f..5985c58 100644 --- a/ga.bib +++ b/ga.bib @@ -585,3 +585,45 @@ year={1972}, publisher={ACM} } + +@article{ coppersmith:matmult, + title={{Matrix multiplication via arithmetic progressions}}, + author={Coppersmith, D. and Winograd, S.}, + journal={Journal of symbolic computation}, + volume={9}, + number={3}, + pages={251--280}, + issn={0747-7171}, + year={1990}, + publisher={Elsevier} +} + +@article{ strassen:matmult, + title={{Gaussian elimination is not optimal}}, + author={Strassen, V.}, + journal={Numerische Mathematik}, + volume={13}, + number={4}, + pages={354--356}, + issn={0029-599X}, + year={1969}, + publisher={Springer} +} + +@article{ szegedy:matmult, + author = {Cohn, Henry and Kleinberg, Robert and Szegedy, Balazs and Umans, Christopher}, + citeulike-article-id = {8349164}, + citeulike-linkout-0 = {http://doi.ieeecomputersociety.org/10.1109/SFCS.2005.39}, + citeulike-linkout-1 = {http://dx.doi.org/10.1109/SFCS.2005.39}, + doi = {10.1109/SFCS.2005.39}, + isbn = {0-7695-2468-0}, + journal = {Foundations of Computer Science, Annual IEEE Symposium on}, + keywords = {algebraic, complexity, matrix, multiplication}, + pages = {379--388}, + posted-at = {2010-12-02 18:55:57}, + priority = {3}, + publisher = {IEEE Computer Society}, + title = {{Group-theoretic Algorithms for Matrix Multiplication}}, + url = {http://dx.doi.org/10.1109/SFCS.2005.39}, + year = {2005} +}