3 \prednaska{6}{Rychlej¹í algoritmy na~minimální kostry}{zapsali Petr ©koda a Tomá¹ Gavenèiak}
5 \h{Upravená verze Borùvkova algoritmu pro rovinné grafy}
7 Vyjdeme z my¹lenky, ¾e mù¾eme po ka¾dém kroku pùvodního Borùvkova algoritmu vzniklé komponenty
8 souvislosti grafu zkontrahovat do jednoho vrcholu a tím získat men¹í graf, který mù¾eme
9 znovu rekurzivnì zmen¹ovat. To funguje obecnì, ale uká¾eme, ¾e pro rovinné grafy tak dosáhneme
10 lineární èasové slo¾itosti.
13 Pokud $F \subseteq {\rm MST}(G)$ (kde ${\rm MST}(G)$ je minimální kostra grafu~$G$), $G'$~je graf vzniklý
14 z~$G$ kontrakcí podél hran z~$F$, pak kostra grafu~$G$, která vznikne z~${\rm MST}(G')$ zpìtným
15 expandováním kontrahovaných vrcholù, je ${\rm MST}(G)$.
16 To nás vede k následujícímu algoritmu:
18 \s{Algoritmus: MST v rovinných grafech}
20 \:Ke ka¾dému vrcholu najdeme nejlevnìj¹í incidentní hranu -- dostaneme mno¾inu hran $F \subseteq E$.
21 \:Graf zkontrahujeme podle $F$ následovnì:
22 \::Prohledáme do ¹íøky graf $(V(G), F)$ a pøiøadíme vrcholùm èíslo komponenty, ve které jsou.
23 \::Pøeèíslujeme hrany v~$G$ podle èísel komponent.
24 \:Odstraníme násobné hrany:
25 \::Setøídíme hrany lexikograficky pomocí pøihrádkového tøídìní (násobné hrany jsou nyní pospolu).
26 \::Projdeme posloupnost hran a z~ka¾dého úseku multihran odstraníme v¹echny a¾ na nejlevnìj¹í hranu.
27 \:Pokud stále máme netriviální graf, opakujeme pøedchozí kroky.
31 Oznaème si $n_i$ a $m_i$ poèet vrcholù a hran na~poèátku $i$-té iterace.
32 Ka¾dý z~krokù 1--7 trvá $\O(m_i)$, proto i celý cyklus algoritmu trvá $\O(m_i)$.
33 Poèet vrcholù grafu klesá s~ka¾dým cyklem exponenciálnì: $n_i \leq n / 2^i$.
34 Na~zaèátku ka¾dého cyklu je graf rovinný (kontrakcí hrany v~rovinném grafu se rovinnost
35 zachovává) a není to multigraf, tak¾e poèet jeho hran je lineární v poètu vrcholù:
36 $m_i < 3n_i$. Celkovou èasovou slo¾itost dostaneme jako souèet doby trvání
37 v¹ech cyklù: $\O(\sum_i m_i) = \O(\sum_i n_i) = \O(n)$.
39 \h{Minorovì uzavøené tøídy}
41 Pøedchozí algoritmus ve~skuteènosti funguje v~lineárním èase i pro obecnìj¹í tøídy grafù,
42 ne¾ jsou grafy rovinné. Tím správným universem jsou minorovì uzavøené tøídy:
45 Graf $H$ je {\I minorem} grafu $G$ (znaèíme $H \preceq G$) $\equiv$ $H$ lze z $G$ získat
46 mazáním vrcholù èi hran a kontrahováním hran.
47 \foot{Zde myslíme kontrakci s~odstranìním násobných hran.}
50 $H \subseteq G \Rightarrow H \preceq G$.
53 Tøída grafù $\cal C$ je {\I minorovì uzavøená} $\equiv \forall G,H: G \in {\cal C}, H \preceq G \Rightarrow H \in {\cal C}$.
55 \s{Vìta:} (Robertson, Seymour)
56 Pokud je $\cal C$ minorovì uzavøená tøída grafù, existuje koneèná mno¾ina grafù $Z$ taková,
57 ¾e pro ka¾dý graf $G$ platí:
58 $$G \not\in {\cal C} \iff \exists H \in Z: H \preceq G.$$
59 (Èili ka¾dou minorovì uzavøenou tøídu lze charakterizovat {\I koneèným} poètem zakázaných minorù.
60 To není samo sebou, dokazuje se to dosti pracnì, ale plyne z~toho spousta zajímavých dùsledkù.)
62 \s{Pozorování:} Napøíklad pro rovinné grafy jsou tìmi zakázanými minory právì
63 $K_{3,3}$ a $K_5$. To plyne z~Kuratowského vìty: jedna implikace je triviální,
64 druhá dá trochu práce: pokud je $K_{3,3} \preceq G$, najde se v~$G$ podgraf
65 isomorfní nìjakému dìlení~$K_{3,3}$; pokud je $K_5 \preceq G$, podgraf isomorfní
66 dìlení~$K_5$ se v~$G$ najít nemusí, ale pokud se nenajde, najde se tam podgraf isomorfní
67 dìlení $K_{3,3}$. (Zkuste si sami.)
69 \s{Vìta:} (Robertson, Seymour)
70 Pokud je tøída grafù $\cal C$ minorovì uzavøená a netriviální (alespoò jeden graf v~ní le¾í
71 a alespoò jeden nele¾í), pak $\exists c > 0: \forall G \in {\cal C}:
72 \vert E(G) \vert \leq c\cdot \vert V(G) \vert$.
75 Jeliko¾ v¹echny grafy vygenerované pøedchozím algoritmem jsou minory grafu ze~vstupu,
76 mù¾eme pro odhad jejich hustoty pou¾ít pøedchozí vìtu a dostaneme lineární èasovou slo¾itost
77 dokonce pro ka¾dou netriviální minorovì uzavøenou tøídu grafù.
81 \h{Jarníkùv algoritmus s Fibonacciho haldou}
83 Pùvodní Jarníkùv algoritmus s~haldou má díky ní slo¾itost $\O(m\log n)$, to zlep¹íme pou¾itím
84 Fibonacciho haldy $H$, do~které si budeme ukládat trojice $(v,w,w(vw))$ vrcholù $v$ sousedících
85 s~dosavadní podkostrou $T$ pøes hranu $vw$, $w\in T$, která bude navíc nejlevnìj¹í mo¾ná.
86 Tyto trojice bude halda udr¾ovat uspoøádané podle vah.
89 \s{Algoritmus: Jarníkùv algoritmus~\#2 (Fredman, Tarjan)}
91 \:Zaèneme libovolným vrcholem $v_0$: $T=\{v_0\}$.
92 \:Do~haldy $H$ umístíme v¹echny sousedy $v_0$ spolu s pøíslu¹nými hranami.
93 \:Opakuji dokud $H\neq\emptyset$:
94 \::$(v,w,w(vw))=\<DeleteMin>(H)$
96 \::Pro v¹echny sousedy $u\in E\backslash T$ vrcholu $v$ upravím haldu:
97 \:::Pokud je $u$ v~$H$ nový, pøidáme jej spolu s~nejlevnìj¹í hranou vedoucí z~$u$ do~$T$.
98 \:::Pokud u¾ $u$ v~$H$ je a $uv$ je levnìj¹í ne¾ pùvodní nejlevnìj¹í hrana z~$u$
99 do~$T$, nahradím jeho záznam v~$H$ za~$(u,v,w(uv))$ a provedu $\<DecreaseKey>(u,w(uv))$.
100 \global\algcnt=\itemcount
103 \>Správnost algoritmu pøímo plyne ze~správnosti Jarníkova algoritmu.
105 \s{Èasová slo¾itost:}
106 Slo¾itost tohoto algoritmu bude $\O(m+n\log n)$, nebo» vnitøní cyklus se provede
107 nanejvý¹ $n$-krát, za~\<DeleteMin> v~nìm tedy zaplatíme celkem $\O(n\log n)$, za~pøidávání
108 vrcholù do~$H$ a~nalezání nejlevnìj¹ích hran zaplatíme celkem $\O(m)$ (na~ka¾dou hranu takto
109 sáhneme nanejvý¹ dvakrát), za~sni¾ování vah vrcholù v~haldì rovnì¾ pouze $\O(m)$
110 (nanejvý¹ $m$-krát provedu porovnání vah a \<DecreaseKey> v~$\the\algcnt.$ za~$\O(1)$).
112 Toto zlep¹ení je dùle¾itìj¹í, ne¾ by se mohlo zdát, proto¾e nám pro grafy s~mnoha hranami
113 (konkrétnì pro grafy s~$m=\Omega(n\log n)$) dává lineární algoritmus.
115 \h{Kombinace Jarníkova a Borùvkova algoritmu}
117 K~dal¹ímu zlep¹ení dojde, kdy¾ pøed pøedchozím algoritmem spustíme $\log\log n$ cyklù Borùvkova
118 algoritmu s~kontrahováním vrcholù, èím¾ graf zahustíme.
120 \s{Algoritmus: Jarníkùv algoritmus~\#3 (pùvod neznámý)}
122 \:Provedeme $\log\log n$ cyklù upraveného Borùvkova algoritmu s~kontrahováním hran popsaného vý¹e.
123 \:Pokraèujeme Jarníkovým algoritmem~\#2.
126 \s{Èasová slo¾itost:}
127 Slo¾itost první èásti je $\O(m\log\log n)$.
128 Poèet vrcholù se po~první èásti algoritmu sní¾í na~$n'\leq n/\log n$ a slo¾itost druhé èásti bude
129 tedy nanejvý¹ $\O(m+n\log n'/\log n)=\O(m)$.
131 \h{Jarníkùv algoritmus s~omezením velikosti haldy}
133 Je¹tì vìt¹ího zrychlení dosáhneme, omezíme-li Jarníkovu algoritmu \#2 vhodnì
134 velikost haldy a takto budeme bìhem jednoho Jarníkova algoritmu skládat pouze
135 jednotlivé podkostøièky zastavené v rùstu pøeteèením haldy, podle kterých
136 graf následnì zkontrahujeme a budeme pokraèovat s mnohem men¹ím grafem.
138 \s{Algoritmus: Jarníkùv algoritmus~\#4 (Fredman, Tarjan)}
140 \:Opakuji, dokud mám netriviální $G$ (s alespoò jednou hranou):
141 \::$t=\vert V_G\vert$.
142 \::Zvolím $k=2^{2m/t}$ podle aktuálního $t$.
144 \::Opakuji, dokud existují vrcholy mimo $T$:
145 \:::Najdu vrchol $v_0$ mimo $T$.
146 \:::Spustím Jarníkùv alg. \#2 pro celý graf od $v_0$. Zastavím ho, pokud:
147 \global\algcnt=\itemcount
148 \::::$\vert H\vert\geq k$ (byla pøekroèena velikost haldy) nebo
149 \::::$H=\emptyset$ (do¹li sousedé) nebo
150 \::::do $T$ jsem pøidal hranu oboustrannì incidentní s~hranami v~$T$ (pøipojil
151 jsem novou podkostru k~nìjaké u¾ nalezené).
152 \::Zkontrahuji $G$ podle podkoster nalezených v~$T$.
156 Pokud algoritmus je¹tì neskonèil, je ka¾dá z~nalezených podkoster v~$T$ incidentní s~alespoò $k$ hranami.
157 Jak to vypadá pro jednotlivá ukonèení:
160 \:$\vert H\vert\geq k$ -- v¹echny hrany v~haldì jsou incidentní s~$T$, tak¾e incidentních je dost.
161 \:$H=\emptyset$ -- nemù¾e nastat, algoritmus by skonèil.
162 \:Pøipojím se k~u¾ existující podkostøe -- jen ji zvìt¹ím.
165 \s{Èasová slo¾itost:}
166 Dùsledkem pøedchozího pozorování je, ¾e poèet podkoster v~jednom prùchodu je nanejvý¹
167 $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$,
168 prùchodù bude tedy nanejvý¹ $\log^* n$\foot{$\log^* n$ je inverzní funkce k~\uv{vì¾i
169 z~mocnin}, èili $\min\{i:\log^{(i)} n<1 \}$, kde $\log^{(i)} n$ je $i$-krát iterovaný
170 logaritmus.}, proto¾e prùchod s~$k>n$ bude u¾ urèitì poslední.
171 Jeden vnìj¹í prùchod trvá $\O(m+t\log k)$, zvolím-li tedy $k=2^{2m/t}$, potom bude mít
172 jeden prùchod slo¾itost $\O(m)$. Celková slo¾itost bude $\O(m\log^{*}n)$.
174 I~odhad $\log^* n$ je ale pøíli¹ hrubý, proto¾e nezaèínáme s~haldou velikosti~1, nýbr¾
175 $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\}$
176 a èasovou slo¾itost odhadnout jako $\O(m\beta(m,n))$. To nám dává lineární algoritmus
177 pro grafy s~$m\geq n\log^{(k)}n$ pro libovolnou konstantu $k$, jeliko¾ $\beta(m,n)$ tehdy vyjde
183 \:$\O(m\alpha(m,n))$, kde $\alpha(m,n)$ je obdoba inverzní
184 Ackermannovy funkce definovaná podobnì, jako je $\beta(m,n)$ obdobou $\log^*$.
186 \:$\O({\cal T}(m,n))$, kde ${\cal T}(m,n)$ je hloubka optimálního rozhodovacího stromu
187 pro nalezení minimální kostry v~grafech s~patøièným poètem hran a vrcholù
188 [Pettie, Ramachandran 2002].
189 Jeliko¾ ka¾dý deterministický algoritmus zalo¾ený na~porovnávání vah lze popsat rozhodovacím stromem,
190 je tento algoritmus zaruèenì optimální. Jen bohu¾el nevíme, optimální stromy vypadají, tak¾e
191 je stále otevøeno, zda lze MST nalézt v~lineárním èase. Nicménì jeliko¾ tento algoritmus
192 pracuje i na~Pointer Machine, víme, ¾e pokud je lineární slo¾itosti mo¾né dosáhnout, není k~tomu
193 potøeba výpoèetní síla RAMu.\foot{O výpoèetních modelech viz pøí¹tí kapitola.}
194 \:$\O(m)$ pro grafy s~celoèíselnými vahami (na~RAMu) [Fredman, Willard 1990] -- uká¾eme v~jedné
195 z~následujících kapitol.
196 \:$\O(m)$, pokud u¾ máme hrany setøídìné podle vah: jeliko¾ víme, ¾e zále¾í jen na~uspoøádání,
197 mù¾eme váhy pøeèíslovat na~$1\ldots n$ a pou¾ít pøedchozí algoritmus.
198 \:$\O(m)$ randomizovanì v~prùmìrném pøípadì [Karger, Klein, Tarjan 1995]
199 \:Na~zji¹tìní, zda je zadaná kostra minimální, staèí $\O(m)$ porovnání [Komlós 1984] a dokonce
200 lze v~lineárním èase zjistit, která to jsou [King 1995]. Z~toho ostatnì vychází pøedchozí
201 randomizovaný algoritmus.