]> mj.ucw.cz Git - ga.git/commitdiff
APSP: Metoda Rozdel a panuj
authorMartin Mares <mj@ucw.cz>
Sun, 30 Jan 2011 21:08:52 +0000 (22:08 +0100)
committerMartin Mares <mj@ucw.cz>
Sun, 30 Jan 2011 21:08:52 +0000 (22:08 +0100)
Tim by kapitola mela byt hotova, tedy az na korektury.

14-floyd/14-floyd.tex

index e0a0cb89dcf8da345a62f4603a395f79aea4463e..122cce98aee17b98bd8e9dc29b4c51cd5118c4ed 100644 (file)
@@ -236,10 +236,65 @@ Dodejme je
 celou øadu dal¹ích trikù. Zájemce o~tento druh algoritmù odkazujeme na Zwickùv
 èlánek~\cite{zwick:apspint}.
 
+\h{Rozdìl a panuj}
+
+Pøedchozí pøevod je ov¹em trochu marnotratný. ©ikovným pou¾itím metody Rozdìl a panuj
+mù¾eme èasovou slo¾itost podstatnì sní¾it. Postup pøedvedeme pro dosa¾itelnost: na vstupu
+tedy dostaneme matici sousednosti~$A$, výstupem má být její transitivní uzávìr~$A^*$
+(matice dosa¾itelnosti). V¹echny souèiny matic v~tomto oddílu budou typu $(\lor,\land)$.
+
+Vrcholy grafu rozdìlíme na dvì mno¾iny $X$ a~$Y$ pøibli¾nì stejné velikosti,
+bez újmy na obecnosti tak, aby matice~$A$ mìla následující blokový tvar:
+$$A = \pmatrix{ P & Q \cr R & S \cr }.$$
+Zde podmatice~$P$ popisuje hrany z~$X$ do~$X$, podmatice~$Q$ hrany z~$X$ do~$Y$, atd.
+
+Pokud matici~$A^*$ zapí¹eme rovnì¾ v~blokovém tvaru:
+$$A^* = \pmatrix{ I & J \cr K & L \cr },$$
+bude platit:
+$$\eqalign{
+I &= (P \lor QR^*S)^*, \cr
+J &= IQS^*, \cr
+K &= S^*RI, \cr
+L &= S^* \lor S^*RIQS^*.
+}$$
+Jednotlivé rovnosti mù¾eme èíst takto:
+\def\nIJKL{\count0=`H\advance\count0 by\itemcount{\bf\char\count0:}}
+\numlist\nIJKL
+\:Sled z~$X$ do~$X$ vznikne opakováním èástí, z~nich¾ ka¾dá je buïto
+hrana uvnitø~$X$ nebo pøechod po hranì z~$X$ do~$Y$ následovaný sledem
+uvnitø~$Y$ a pøechodem zpìt do~$X$.
+\:Sled z~$X$ do~$Y$ mù¾eme rozdìlit v~místì, kdy naposledy pøechází
+po~hranì z~$X$ do~$Y$. První èást pøitom bude sled z~$X$ do~$X$,
+druhá sled uvnitø~$Y$.
+\:Se sledem z~$Y$ do~$X$ nalo¾íme obdobnì.
+\:Sled z~$Y$ do~$Y$ vede buïto celý uvnitø~$Y$, nebo ho mù¾eme rozdìlit
+na èást pøed prvním pøechodem z~$Y$ do~$X$, tento pøechod, sled z~$X$ do~$Y$,
+pøechod zpìt a sled uvnitø~$Y$.
+\endlist
+
+K~výpoètu matice~$A^*$ nám tedy staèí spoèítat 3~tranzitivní uzávìry
+matic polovièní velikosti (k~èemu¾ pou¾ijeme rekurzi), dále pak $\O(1)$
+$(\lor,\land)$-souèinù a $\O(1)$ souètù matic.
+
+Èasovou slo¾itost $t(n)$ mù¾eme popsat následující rekurencí:
+$$t(n) = 3t(n/2) + \Theta(1)\cdot\mu(n/2) + \Theta(n^2),$$
+kde $\mu(k)$ znaèí èas potøebný na jeden $(\lor,\land)$-souèin
+matic $k\times k$. Jeliko¾ jistì platí $\mu(n/2)=\Omega(n^2)$,
+má tato rekurence podle kuchaøkové vìty øe¹ení $t(n) = \mu(n)$.
+
+Ukázali jsme tedy, ¾e výpoèet transitivního uzávìru je nejvý¹e stejnì
+nároèný jako $(\lor,\land)$-násobení matic -- mù¾eme ho tedy provést
+v~èase $\O(n^\omega)$. Dokonce mù¾eme snadno nalézt i opaèný pøevod,
+tak¾e oba problémy jsou asymptoticky stejnì tì¾ké.
+
+Podobnì nalézt matici vzdáleností je stejnì tì¾ké jako $(\min,+)$-souèin,
+tak¾e na to staèí èas $\O(n^3/\log n)$.
+
 \h{Seidelùv algoritmus}
 
-Pro neorientované neohodnocené grafy mù¾eme matici vzdáleností spoèítat v~èase $\O(n^\omega\log n)$
-Seidelovým algoritmem (FIXME: odkaz). Funguje následovnì:
+Pro neorientované neohodnocené grafy mù¾eme dosáhnout je¹tì lep¹ích
+výsledkù. Matici vzdáleností lze spoèítat v~èase $\O(n^\omega\log n)$
+Seidelovým algoritmem (FIXME: odkaz). Ten funguje následovnì:
 
 \s{Definice:} {\I Druhá mocnina grafu~$G$} je graf~$G^2$ na té¾e mno¾inì vrcholù,
 v~nìm¾ jsou vrcholy~$i$ a~$j$ spojeny hranou právì tehdy, existuje-li v~$G$ sled
@@ -277,7 +332,5 @@ v~konstantn
 trvá $\O(n^\omega)$ a jeliko¾ prùmìr grafu poka¾dé klesne alespoò dvakrát,
 je úrovní $\O(\log n)$ a celý algoritmus dobìhne ve~slíbeném èase $\O(n^\omega\log n)$.
 
-\h{Rozdìl a panuj}
-
 \references
 \bye