]> mj.ucw.cz Git - ga.git/commitdiff
APSP: Prepsana cast o regularnich vyrazech a nasobeni matic
authorMartin Mares <mj@ucw.cz>
Thu, 27 Jan 2011 23:33:20 +0000 (00:33 +0100)
committerMartin Mares <mj@ucw.cz>
Thu, 27 Jan 2011 23:33:20 +0000 (00:33 +0100)
Nyni je snad znaceni o neco prehlednejsi.

14-floyd/14-floyd.tex
sgr.tex

index af0a867957798b10e646bf3218fd706c656f3346..d61913dc581f3db951a79ac50a5e96a692644f91 100644 (file)
@@ -1,7 +1,5 @@
 \input ../sgr.tex
 
-\def\alt{\mathop{\vert}}
-
 \prednaska{13}{Nejkrat¹í cesty: Maticové metody}{}
 
 V~pøedchozí kapitole jsme se zabývali algoritmy pro hledání nejkrat¹ích
@@ -72,38 +70,43 @@ dvojic
 z~teorie automatù. Zadaný orientovaný graf pøitom mù¾e obsahovat i smyèky
 a násobné hrany.
 
-\s{Definice:} {\I Sledový regulární výraz} pro vrcholy $u$ a~$v$ (zkrácenì
-{\I $uv$-výraz}) kóduje mno¾inu sledù z~vrcholu~$u$ do vrcholu~$v$. Mno¾inu
-kódovanou výrazem~$\psi$ budeme znaèit $S(\psi)$. Ka¾dý $uv$-výraz má jeden
-z~tìchto tvarù:
+\s{Definice:} {\I Svazek} je mno¾ina sledù, které mají spoleèný poèáteèní
+a koncový vrchol. {\I Typem} svazku nazveme uspoøádanou dvojici tìchto vrcholù.
+Místo \uv{svazek typu $(u,v)$} budeme obvykle øíkat prostì {\I $uv$-svazek.}
 
-\itemize\ibull
-\:$\emptyset$ -- prázdná mno¾ina sledù,
-\:$e$ -- identifikátor nìkteré hrany z~$u$ do~$v$,
-\:$\alpha\alt\beta$ (kde $\alpha$ i $\beta$ jsou $uv$-výrazy) --
-{\I sjednocení:} $S(\alpha\alt\beta) = S(\alpha) \cup S(\beta)$,
-\:$\alpha\beta$ (kde $\alpha$ je $uw$-výraz a $\beta$ je $wv$-výraz pro nìjaké~$w$) --
-{\I zøetìzení:} $S(\alpha\beta)$ je mno¾ina v¹ech sledù, které vzniknou
-napojením nìjakého sledu z~$S(\beta)$ za nìjaký sled z~$S(\alpha)$,
-\endlist
+Triviálními pøípady svazkù jsou prázdná mno¾ina~$\emptyset$, hrana~$uv$ a pro
+$u=v$ také sled~$\varepsilon$ nulové délky. Svazky mù¾eme kombinovat
+následujícími operacemi:
 
-\>Pokud $u=v$, pak navíc:
 \itemize\ibull
-\:$\varepsilon$ -- mno¾ina obsahující pouze sled nulové délky,
-\:$\alpha^*$ (kde $\alpha$ je $uu$-výraz) -- {\I iterace:}
-$\alpha^* = \varepsilon \alt \alpha \alt \alpha\alpha \alt \alpha\alpha\alpha \alt \ldots$
+\:$A\cup B$ -- {\I sjednocení} dvou svazkù tého¾ typu,
+\:$AB$ nebo $A\cdot B$ -- {\I zøetìzení} $uv$-svazku~$A$ s~$vw$-svazkem~$B$: výsledkem je $uw$-svazek
+obsahující v¹echna spojení sledu z~$A$ se sledem z~$B$,
+\:$A^*$ -- {\I iterace} $uu$-svazku: výsledkem je $uu$-svazek
+$\varepsilon \cup A \cup AA \cup AAA \cup \ldots$ (tedy v¹echna mo¾ná
+spojení koneènì mnoha sledù z~$A$).
 \endlist
-\>Operace sjednocení a zøetìzení jsou asociativní, tak¾e je obvykle nebudeme
-závorkovat; operace sjednocení má ve~výrazech ni¾¹í prioritu ne¾ zøetìzení.
 
-Pro ka¾dou dvojici vrcholù $i$,~$j$ nyní budeme hledat výraz $R_{ij}$ popisující
-v¹echny sledy z~$i$ do~$j$. Podobnì jako u~Floydova-Warshallova algoritmu zavedeme
-$R^k_{ij}$ coby výraz popisující sledy z~$i$ do~$j$ pøes 1 a¾~$k$ a nahlédneme,
-¾e platí:
+\>Ve~výrazu definujícím~$A^*$ jsme vyu¾ili, ¾e operace sjednocení a zøetìzení
+jsou asociativní, tak¾e je nemusíme závorkovat. Navíc sjednocení má ve~výrazech
+ni¾¹í prioritu ne¾ zøetìzení.
+
+\>Svazky budeme obvykle reprezentovat {\I sledovými výrazy,} co¾ jsou
+výrazy koneèné délky sestávající se z~triviálních svazkù a vý¹e uvedených
+operací.
+
+\s{Pozorování:} Sledy mù¾eme reprezentovat øetìzci nad abecedou, její¾
+symboly jsou identifikátory hran. Sledové výrazy pak odpovídají regulárním
+výrazùm nad touto abecedou.
+
+Uká¾eme, jak pro v¹echny dvojice vrcholu $i,j$ sestrojit sledový výraz $R_{ij}$
+popisující svazek v¹ech sledù z~$i$ do~$j$. Podobnì jako u~Floydova-Warshallova
+algoritmu zavedeme $R^k_{ij}$ coby výraz popisující sledy z~$i$ do~$j$ pøes 1 a¾~$k$
+a nahlédneme, ¾e platí:
 $$\eqalign{
 R^0_{ij} &= \hbox{mno¾ina v¹ech hran z~$i$ do~$j$}, \cr
 R^n_{ij} &= \hbox{hledané $R_{ij}$}, \cr
-R^k_{ij} &= R^{k-1}_{ij} \alt R^{k-1}_{ik}(R^{k-1}_{kk})^*R^{k-1}_{kj}. \cr
+R^k_{ij} &= R^{k-1}_{ij} \cup R^{k-1}_{ik}(R^{k-1}_{kk})^*R^{k-1}_{kj}. \cr
 }$$
 První dvì rovnosti opìt dostaneme pøímo z~definice (mno¾inu v¹ech hran zapí¹eme
 buï jako prázdnou nebo ji vytvoøíme sjednocováním z~jednoprvkových mno¾in). Tøetí
@@ -122,10 +125,19 @@ M
 výrazy, staèí umìt vyhodnotit:
 \itemize\ibull
 \:výsledek pro triviální výrazy $f(\emptyset)$, $f(\varepsilon)$ a $f(e)$ pro hranu~$e$,
-\:hodnoty $f(\alpha\alt\beta)$, $f(\alpha\beta)$ a $f(\alpha^*)$, známe-li ji¾ $f(\alpha)$ a $f(\beta)$.
+\:hodnoty $f(\alpha\cup\beta)$, $f(\alpha\beta)$ a $f(\alpha^*)$, známe-li ji¾ $f(\alpha)$ a $f(\beta)$.
 \endlist
 \>Pro výpoèet v¹ech $f(R_{ij})$ nám pak staèí $\Theta(n^3)$ vyhodnocení funkce~$f$.
 
+\s{Poznámka pro ctitele algebry:} Vý¹e uvedená konstrukce není nic jiného, ne¾ popis
+homomorfismu~$f$ z~algebry $({\cal S},\emptyset,\varepsilon_1,\ldots,\varepsilon_n,
+e_1,\ldots,e_m,\cup,\cdot,{}^*)$ nad mno¾inou~${\cal S}$ v¹ech svazkù do~nìjaké
+algebry $(X,{\bf 0},c_1,\ldots,c_n,h_1,\ldots,h_m,\oplus,\otimes,\circledast)$, kde~$X$ je mno¾ina
+v¹ech ohodnocení sledù, {\bf 0}, $c_1,\ldots,c_n$ a $h_1,\ldots,h_m$ jsou konstanty,
+$\oplus$ a~$\otimes$ binární operace a $\circledast$ unární operace. Prùbìh výpoètu
+upraveného algoritmu je pak homomorfním obrazem prùbìhu výpoètu pùvodního algoritmu
+pracujícího pøímo se svazky.
+
 \s{Pøíklady:}
 
 \>{\I Nejkrat¹í sled:}
@@ -133,7 +145,7 @@ $$\eqalign{
 f(\emptyset)&=+\infty \cr
 f(\varepsilon)&=0 \cr
 f(e)&=\ell(e) \hbox{\quad (délka hrany)} \cr
-f(\alpha\alt\beta) &= \min(f(\alpha),f(\beta)) \cr
+f(\alpha\cup\beta) &= \min(f(\alpha),f(\beta)) \cr
 f(\alpha\beta) &= f(\alpha) + f(\beta) \cr
 f(\alpha^*) &= \cases{0 & \hbox{pro $f(\alpha)\ge 0$} \cr -\infty & \hbox{pro $f(\alpha)<0$} \cr} \cr
 }$$
@@ -145,16 +157,16 @@ $$\eqalign{
 f(\emptyset)&=0 \cr
 f(\varepsilon)&=\infty \cr
 f(e)&=w(e) \hbox{\quad (¹íøka hrany)} \cr
-f(\alpha\alt\beta) &= \max(f(\alpha),f(\beta)) \cr
+f(\alpha\cup\beta) &= \max(f(\alpha),f(\beta)) \cr
 f(\alpha\beta) &= \min(f(\alpha),f(\beta)) \cr
 f(\alpha^*) &= \infty \cr
 }$$
 
 \>{\I Pøevod koneèného automatu na regulární výraz:} Vrcholy multigrafu budou odpovídat
 stavùm automatu, hrany mo¾ným pøechodùm mezi stavy. Ka¾dou hranu ohodnotíme symbolem
-abecedy, po jeho¾ pøeètení automat pøechod provede. Funkce~$f$ pak pøiøadí $uv$-výrazu~$\psi$
+abecedy, po jeho¾ pøeètení automat pøechod provede. Funkce~$f$ pak pøiøadí $uv$-svazku~$\psi$
 regulární výraz popisující mno¾inu v¹ech øetìzcù, po jejich¾ pøeètení automat pøejde
-ze~stavu~$u$ do stavu~$v$ po pøechodech z~mno¾iny $S(\psi)$. Vyhodnocování funkce~$f$
+ze~stavu~$u$ do stavu~$v$ po pøechodech z~mno¾iny~$\psi$. Vyhodnocování funkce~$f$
 odpovídá pøímoèarým operacím s~øetìzci.
 
 \h{Násobení matic}
@@ -191,28 +203,22 @@ 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)$.
+\s{Pozorování:} Pokud $A$ a~$B$ jsou matice svazkù ($A_{ij}$ a $B_{ij}$
+jsou $ij$-svazky) a $C$ jejich $(\cup,\cdot)$-souèin, pak $C_{ij}$ je
+svazek v¹ech sledù vzniklých spojením nìjakého sledu z~$A$ zaèínajícího
+v~$i$ a nìjakého sledu z~$B$ konèícího v~$j$.
 
-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$.
+Podobnì jako v~pøedchozí sekci si tedy mù¾eme poøídit funkci~$f$ pøiøazující
+svazkùm hodnoty z~nìjaké mno¾iny~$X$ a operace $\oplus$ a $\otimes$ na~$X$,
+pro nì¾ platí $f(\alpha\cup\beta) = f(\alpha) \oplus f(\beta)$ a $f(\alpha\beta)
+= f(\alpha) \otimes f(\beta)$. Pak staèí vzít matici popisující ohodnocení
+v¹ech sledù délky 0 nebo~1 (to je obdoba matice sousednosti), a provést $\O(\log n)$
+$(\oplus,\otimes)$-souèinù k~tomu, abychom znali ohodnocení svazkù sledù délky
+právì~$k$ pro nìjaké $k\ge n$.
 
-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).
+S~$(\lor,\land)$-souèiny a maticí sousednosti s~jednièkami na diagonále 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).
 
 Podobnì mù¾eme poèítat i matici vzdáleností: zaèneme s~maticí délek hran doplnìnou o~nuly na~diagonále
 a pou¾ijeme $(\min,+)$-souèiny. Tyto souèiny ale bohu¾el neumíme pøevést na klasické násobení matic.
@@ -227,8 +233,6 @@ Dodejme je
 celou øadu dal¹ích trikù. Zájemce o~tento druh algoritmù odkazujeme na Zwickùv
 èlánek~\cite{zwick:apspint}.
 
-%% FIXME: Indexovat matice mno¾inami, ne èísly
-
 \h{Seidelùv algoritmus}
 
 \h{Rozdìl a panuj}
diff --git a/sgr.tex b/sgr.tex
index 2a3166566638a24b5de5062a9fbc8f76023f8996..af3d3cf20969506627678a4049c40f7ed45aaa0a 100644 (file)
--- a/sgr.tex
+++ b/sgr.tex
@@ -3,6 +3,7 @@
 \input mjmac.tex
 \input epsf.tex
 \input btxmac.tex
+\input amssym.tex
 
 \language=\czech
 \chyph