]> mj.ucw.cz Git - ga.git/commitdiff
Vylepseni po prednasce.
authorMartin Mares <mj@ucw.cz>
Tue, 21 Nov 2006 21:26:33 +0000 (22:26 +0100)
committerMartin Mares <mj@ucw.cz>
Tue, 21 Nov 2006 21:26:33 +0000 (22:26 +0100)
6-borjar/6-borjar.tex

index 3662e65b37520ad374fc1c8ce6a8747dff633d5c..56e6dcfb436780097704808c3729bf5f8a9703f2 100644 (file)
@@ -1,6 +1,6 @@
 \input ../sgr.tex
 
-\prednaska{6}{Vylep¹ení Borùvkova a Jarníkova algoritmu}{zapsali Petr ©koda a Tomá¹ Gavenèiak}
+\prednaska{6}{Rychlej¹í algoritmy na~minimální kostry}{zapsali Petr ©koda a Tomá¹ Gavenèiak}
 
 \h{Upravená verze Borùvkova algoritmu pro rovinné grafy}
 
@@ -32,8 +32,8 @@ Ozna
 Ka¾dý z~krokù 1--7 trvá $\O(m_i)$, proto i celý cyklus algoritmu trvá $\O(m_i)$.
 Poèet vrcholù grafu klesá s~ka¾dým cyklem exponenciálnì: $n_i \leq n / 2^i$.
 Na~zaèátku ka¾dého cyklu je graf rovinný (kontrakcí hrany v~rovinném grafu se rovinnost
-zachovává) a poèet hran rovinného grafu je lineární v poètu vrcholù, tak¾e
-platí $m_i < 3n_i$. Celkovou èasovou slo¾itost dostaneme jako souèet doby trvání
+zachovává) a není to multigraf, tak¾e poèet jeho hran je lineární v poètu vrcholù:
+$m_i < 3n_i$. Celkovou èasovou slo¾itost dostaneme jako souèet doby trvání
 v¹ech cyklù: $\O(\sum_i m_i) = \O(\sum_i n_i) = \O(n)$.
 
 \h{Minorovì uzavøené tøídy}
@@ -42,8 +42,9 @@ P
 ne¾ jsou grafy rovinné. Tím správným universem jsou minorovì uzavøené tøídy:
 
 \s{Definice:}
-Graf $H$ je {\I minorem} grafu $G$ $\equiv$ $H$ lze z $G$ získat
-mazáním vrcholù èi hran a kontrahováním hran. Znaèíme $H \preceq G$.
+Graf $H$ je {\I minorem} grafu $G$ (znaèíme $H \preceq G$) $\equiv$ $H$ lze z $G$ získat
+mazáním vrcholù èi hran a kontrahováním hran.
+\foot{Zde myslíme kontrakci s~odstranìním násobných hran.}
 
 \s{Pozorování:}
 $H \subseteq G \Rightarrow H \preceq G$.
@@ -72,17 +73,17 @@ a alespo
 
 \s{Dùsledek:}
 Jeliko¾ v¹echny grafy vygenerované pøedchozím algoritmem jsou minory grafu ze~vstupu,
-mù¾eme pro odhad jejich hustoty pou¾ít pøedchozí vìtu a dostaneme tak, ¾e pøedchozí
-algoritmus má lineární èasovou slo¾itost dokonce pro ka¾dou netriviální minorovì uzavøenou
-tøídu grafù.
+mù¾eme pro odhad jejich hustoty pou¾ít pøedchozí vìtu a dostaneme lineární èasovou slo¾itost
+dokonce pro ka¾dou netriviální minorovì uzavøenou tøídu grafù.
 
 %%%Tomas Gavenciak
 
 \h{Jarníkùv algoritmus s Fibonacciho haldou}
 
 Pùvodní Jarníkùv algoritmus s~haldou má díky ní slo¾itost $\O(m\log n)$, to zlep¹íme pou¾itím
-Fibonacciho haldy $H$, do~které si budeme ukládat trojice $(v,w,w(vw))$ vrcholù $v$ sousedících 
-s~dosavadní podkostrou $T$ pøes hranu $vw$, $w\in T$, která bude navíc nejlevnìj¹í mo¾ná. 
+Fibonacciho haldy $H$, do~které si budeme ukládat trojice $(v,w,w(vw))$ vrcholù $v$ sousedících
+s~dosavadní podkostrou $T$ pøes hranu $vw$, $w\in T$, která bude navíc nejlevnìj¹í mo¾ná.
+Tyto trojice bude halda udr¾ovat uspoøádané podle vah.
 
 \newcount\algcnt
 \s{Algoritmus: Jarníkùv algoritmus~\#2 (Fredman, Tarjan)}
@@ -94,18 +95,18 @@ s~dosavadn
 \::$T:=T\cup\{vw\}$
 \::Pro v¹echny sousedy $u\in E\backslash T$ vrcholu $v$ upravím haldu:
 \:::Pokud je $u$ v~$H$ nový, pøidáme jej spolu s~nejlevnìj¹í hranou vedoucí z~$u$ do~$T$.
-\:::Pokud u¾ $u$ v~$H$ je a $uv$ je levnìj¹í ne¾ pùvodní nejlevnìj¹í hrana z~$u$ 
+\:::Pokud u¾ $u$ v~$H$ je a $uv$ je levnìj¹í ne¾ pùvodní nejlevnìj¹í hrana z~$u$
 do~$T$, nahradím jeho záznam v~$H$ za~$(u,v,w(uv))$ a provedu $\<DecreaseKey>(u,w(uv))$.
 \global\algcnt=\itemcount
-\endalgo 
+\endalgo
 
-Správnost algoritmu pøímo plyne ze~správnosti Jarníkova algoritmu.
+\>Správnost algoritmu pøímo plyne ze~správnosti Jarníkova algoritmu.
 
 \s{Èasová slo¾itost:}
-Slo¾itost tohoto algoritmu bude $\O(m+n\log n)$, nebo» vnitøní cyklus se provede 
-nanejvý¹ $n$-krát, za~\<DeleteMin> v~nìm tedy zaplatíme $\O(n\log n)$, za~pøidávání
-vrcholù do~$H$ a~nalezání nejlevnìj¹ích hran zaplatíme $\O(m)$ (na~ka¾dou hranu takto
-sáhneme nanejvý¹ dvakrát), za~sni¾ování vah vrcholù v~haldì rovnì¾ pouze $\O(m)$ 
+Slo¾itost tohoto algoritmu bude $\O(m+n\log n)$, nebo» vnitøní cyklus se provede
+nanejvý¹ $n$-krát, za~\<DeleteMin> v~nìm tedy zaplatíme celkem $\O(n\log n)$, za~pøidávání
+vrcholù do~$H$ a~nalezání nejlevnìj¹ích hran zaplatíme celkem $\O(m)$ (na~ka¾dou hranu takto
+sáhneme nanejvý¹ dvakrát), za~sni¾ování vah vrcholù v~haldì rovnì¾ pouze $\O(m)$
 (nanejvý¹ $m$-krát provedu porovnání vah a \<DecreaseKey> v~$\the\algcnt.$ za~$\O(1)$).
 
 Toto zlep¹ení je dùle¾itìj¹í, ne¾ by se mohlo zdát, proto¾e nám pro grafy s~mnoha hranami
@@ -113,8 +114,8 @@ Toto zlep
 
 \h{Kombinace Jarníkova a Borùvkova algoritmu}
 
-K~dal¹ímu zlep¹ení dojde, kdy¾ nejprve spustíme $\log\log n$ cyklù Borùvkova algoritmu
-s~kontrahováním vrcholù, tímto dojde k~velkému sní¾ení poètu vrcholù.
+K~dal¹ímu zlep¹ení dojde, kdy¾ pøed pøedchozím algoritmem spustíme $\log\log n$ cyklù Borùvkova
+algoritmu s~kontrahováním vrcholù, èím¾ graf zahustíme.
 
 \s{Algoritmus: Jarníkùv algoritmus~\#3 (pùvod neznámý)}
 \algo
@@ -125,15 +126,14 @@ s~kontrahov
 \s{Èasová slo¾itost:}
 Slo¾itost první èásti je $\O(m\log\log n)$.
 Poèet vrcholù se po~první èásti algoritmu sní¾í na~$n'\leq n/\log n$ a slo¾itost druhé èásti bude
-tedy nanejvý¹ $\O(m+n\log n'/\log n)=\O(m)$. Nyní ji¾ máme lineární algoritmus i~pro grafy 
-s~$m\geq n\log\log n$.
+tedy nanejvý¹ $\O(m+n\log n'/\log n)=\O(m)$.
 
 \h{Jarníkùv algoritmus s~omezením velikosti haldy}
 
-Je¹tì vìt¹ího zrychlení dosáhneme, omezíme-li Jarníkovu algoritmu \#2 vhodnì 
+Je¹tì vìt¹ího zrychlení dosáhneme, omezíme-li Jarníkovu algoritmu \#2 vhodnì
 velikost haldy a takto budeme bìhem jednoho Jarníkova algoritmu skládat pouze
-jednotlivé podkostøièky zastavené v rùstu pøeteèením haldy, podle kterých 
-graf následnì skontrahujeme a budeme pokraèovat s mnohem men¹ím grafem.
+jednotlivé podkostøièky zastavené v rùstu pøeteèením haldy, podle kterých
+graf následnì zkontrahujeme a budeme pokraèovat s mnohem men¹ím grafem.
 
 \s{Algoritmus: Jarníkùv algoritmus~\#4 (Fredman, Tarjan)}
 \algo
@@ -143,52 +143,62 @@ graf n
 \::$T=\emptyset$
 \::Opakuji, dokud existují vrcholy mimo $T$:
 \:::Najdu vrchol $v_0$ mimo $T$.
-\:::Spustím Jarníkùv alg. \#2 pro celý graf od $v_0$, zastavím ho, pokud:
+\:::Spustím Jarníkùv alg. \#2 pro celý graf od $v_0$. Zastavím ho, pokud:
 \global\algcnt=\itemcount
-\::::$\vert H\vert\geq k$ (pøekroèena vel. haldy) nebo
+\::::$\vert H\vert\geq k$ (byla pøekroèena velikost haldy) nebo
 \::::$H=\emptyset$ (do¹li sousedé) nebo
-\::::do $T$ jsem pøidal hranu oboustrannì incidentní s~hranami v~$T$ (pøipojil 
+\::::do $T$ jsem pøidal hranu oboustrannì incidentní s~hranami v~$T$ (pøipojil
 jsem novou podkostru k~nìjaké u¾ nalezené).
-\::Skontrahuji $G$ podle podkoster nalezených v~$T$.
+\::Zkontrahuji $G$ podle podkoster nalezených v~$T$.
 \endalgo
 
 \s{Pozorování:}
-Ka¾dá z~nalezených podkoster v~$T$ je incidentní s~alespoò $k$ hranami (a~nebo 
-algoritmus u¾ konèí).
+Pokud algoritmus je¹tì neskonèil, je ka¾dá z~nalezených podkoster v~$T$ incidentní s~alespoò $k$ hranami.
 Jak to vypadá pro jednotlivá ukonèení:
 \numlist\ndotted
 \itemcount=\algcnt
-\:$\vert H\vert\geq k$ -- bylo u¾ pøidáno dost vrcholù.
-\:$H=\emptyset$ -- nalezena celá kostra, konèím.
+\:$\vert H\vert\geq k$ -- v¹echny hrany v~haldì jsou incidentní s~$T$, tak¾e incidentních je dost.
+\:$H=\emptyset$ -- nemù¾e nastat, algoritmus by skonèil.
 \:Pøipojím se k~u¾ existující podkostøe -- jen ji zvìt¹ím.
 \endlist
 
 \s{Èasová slo¾itost:}
-Dùsledkem pozorování je, ¾e poèet podkoster v~jednom prùchodu je nanejvý¹
+Dùsledkem pøedchozího pozorování je, ¾e poèet podkoster v~jednom prùchodu je nanejvý¹
 $2m/k$. Pro $t'$ a $k'$ v následujícím kroku potom platí $t'\leq 2m/k$ a $k'=2^{2m/t'}\geq 2^k$,
 prùchodù bude tedy nanejvý¹ $\log^* n$\foot{$\log^* n$ je inverzní funkce k~\uv{vì¾i
 z~mocnin}, èili $\min\{i:\log^{(i)} n<1 \}$, kde $\log^{(i)} n$ je $i$-krát iterovaný
 logaritmus.}, proto¾e prùchod s~$k>n$ bude u¾ urèitì poslední.
 Jeden vnìj¹í prùchod trvá $\O(m+t\log k)$, zvolím-li tedy $k=2^{2m/t}$, potom bude mít
 jeden prùchod slo¾itost $\O(m)$. Celková slo¾itost bude $\O(m\log^{*}n)$.
-Podrobnìj¹í analýza pak dá je¹tì o~nìco lep¹í výsledek, a~to $\O(m\beta(m,n))$, kde 
-$\beta(m,n)=\min\{i:\log^{(i)}n<m/n\}$, co¾ opìt dává lineární algoritmus pro 
-grafy s~$m\geq n\log^{(k)}n$ pro libovolnou konstantu $k$ ($\beta(m,n)$ tehdy vyjde konstantní).
-
 
-%\newbox\tombox\newdimen\tomwd
-%\setbox\tombox=\hbox{$\log\log\log\dots\log$} 
-%\tomwd=\wd\tombox 
-%\raise 7pt\hbox{$\underbrace{\box\tombox}\kern-\tomwd
-%\lower 16pt\hbox to\tomwd{$\hfill\log^{*}n$\hfill} n<1$},
-%\message{dim: \the\tomwd, \the\tombox}
+I~odhad $\log^* n$ je ale pøíli¹ hrubý, proto¾e nezaèínáme s~haldou velikosti~1, nýbr¾
+$2^{2m/n}$. Mù¾eme tedy poèet prùchodù pøesnìji omezit funkcí $\beta(m,n)=\min\{i:\log^{(i)}n<m/n\}$
+a èasovou slo¾itost odhadnout jako $\O(m\beta(m,n))$. To nám dává lineární algoritmus
+pro grafy s~$m\geq n\log^{(k)}n$ pro libovolnou konstantu $k$, jeliko¾ $\beta(m,n)$ tehdy vyjde
+omezená konstantou.
 
 \h{Dal¹í výsledky}
 
-Chazelle popisuje algoritmus se slo¾itostí $\O(m\alpha(m,n))$. Podle Pettieho je mo¾né dosáhnout 
-a¾ optima, tedy slo¾itosti $\O(T(m,n))$, kde $T$ je hloubka optimálního rozhodovacího stromu 
-pro grafy na~$n$ vrcholech s $m$ hranami (není ale známo, jak ho sestrojit, ani jak je hluboký);
-zajímavé je, ¾e tento algoritmus funguje i na Pointer Machine, tak¾e pokud existuje lineární
-algoritmus na~MST, nepotøebuje sílu RAMu.\foot{O výpoèetních modelech viz pøí¹tí pøedná¹ka.}
+\itemize\ibull
+\:$\O(m\alpha(m,n))$, kde $\alpha(m,n)$ je obdoba inverzní
+  Ackermannovy funkce definovaná podobnì, jako je $\beta(m,n)$ obdobou $\log^*$.
+  [Chazelle 2000]
+\:$\O({\cal T}(m,n))$, kde ${\cal T}(m,n)$ je hloubka optimálního rozhodovacího stromu
+  pro nalezení minimální kostry v~grafech s~patøièným poètem hran a vrcholù
+  [Pettie, Ramachandran 2002].
+  Jeliko¾ ka¾dý deterministický algoritmus zalo¾ený na~porovnávání vah lze popsat rozhodovacím stromem,
+  je tento algoritmus zaruèenì optimální. Jen bohu¾el nevíme, optimální stromy vypadají, tak¾e
+  je stále otevøeno, zda lze MST nalézt v~lineárním èase. Nicménì jeliko¾ tento algoritmus
+  pracuje i na~Pointer Machine, víme, ¾e pokud je lineární slo¾itosti mo¾né dosáhnout, není k~tomu
+  potøeba výpoèetní síla RAMu.\foot{O výpoèetních modelech viz pøí¹tí kapitola.}
+\:$\O(m)$ pro grafy s~celoèíselnými vahami (na~RAMu) [Fredman, Willard 1990] -- uká¾eme v~jedné
+  z~následujících kapitol.
+\:$\O(m)$, pokud u¾ máme hrany setøídìné podle vah: jeliko¾ víme, ¾e zále¾í jen na~uspoøádání,
+  mù¾eme váhy pøeèíslovat na~$1\ldots n$ a pou¾ít pøedchozí algoritmus.
+\:$\O(m)$ randomizovanì v~prùmìrném pøípadì [Karger, Klein, Tarjan 1995]
+\:Na~zji¹tìní, zda je zadaná kostra minimální, staèí $\O(m)$ porovnání [Komlós 1984] a dokonce
+  lze v~lineárním èase zjistit, která to jsou [King 1995]. Z~toho ostatnì vychází pøedchozí
+  randomizovaný algoritmus.
+\endlist
 
 \bye