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