\input ../sgr.tex
\prednaska{5}{Minimální kostry}{}

\def\symdiff{\mathop{\Delta}}

\>Tato kapitola uvede problém minimální kostry, základní vìty o~kostrách a klasické
algoritmy na~hledání minimálních koster. Budeme se inspirovat Tarjanovým pøístupem
z~knihy~\cite{tarjan:dsna}. V¹echny grafy v~této kapitole budou neorientované multigrafy
a jejich hrany budou ohodnoceny vahami $w: E \to {\bb R}$.

\todo{Chybí zde obrázky, znaènì by hutný text projasnily.}

\h{Minimální kostry a jejich vlastnosti}

\s{Definice:}
\itemize\ibull
\:{\I Podgrafem} budeme v~této kapitole mínit libovolnou podmno¾inu hran, vrcholy
v¾dy zùstanou zachovány.
\:{\I Pøidání a odebrání hrany} budeme znaèit $T+e:=T\cup \{e\}$, $T-e:=T\setminus \{e\}$.
\:{\I Kostra} (Spanning Tree) souvislého grafu $G$ je libovolný jeho podgraf, který je strom.
Kostru nesouvislého grafu definujeme jako sjednocení koster jednotlivých komponent.
[Alternativnì: kostra je minimální podgraf, který má komponenty s~tými¾ vrcholy
jako komponenty~$G$.]
\:{\I Váha} podgrafu $F\subseteq E$ je $w(F) := \sum_{e\in F} w(e)$.
\:{\I Minimální kostra} (Minimum Spanning Tree, mezi pøáteli té¾ MST) budeme øíkat
ka¾dé kostøe, její¾ váha je mezi v¹emi kostrami daného grafu minimální.
\endlist

Toto je sice standardní definice MST, ale jinak je dosti ne¹ikovná, proto¾e vy¾aduje,
aby bylo váhy mo¾né sèítat. Za~chvíli si uká¾eme, ¾e to není potøeba.

\s{Definice:}
Buï $T \subseteq G$ nìjaká kostra grafu~$G$. Pak:
\itemize\ibull
\:$T[x,y]$ bude znaèit cestu v~$T$, která spojuje $x$ a $y$. (Cestou opìt míníme mno¾inu hran.)
\:$T[e]:=T[x,y]$ pro hranu $e=xy$. Této cestì budeme øíkat {\I cesta pokrytá hranou~$e$.}
\:Hrana $e\in E \setminus T$ je {\I lehká vzhledem k~$T$} $\equiv \exists e^\prime \in T[e]: w(e)<w(e^\prime)$.
  Ostatním hranám nele¾ícím v~kostøe budeme øíkat {\I tì¾ké.}
\endlist

\s{Vìta:} Kostra~$T$ je minimální $\Leftrightarrow$ neexistuje hrana lehká vzhledem k~$T$.

Tato vìta nám dává pìknou alternativní definici MST, která místo sèítání vah váhy
pouze porovnává, èili jí místo èísel staèí (kvazi)uspoøádání na~hranách. Ne¾ se dostaneme
k~jejímu dùkazu, prozkoumejme nejdøíve, jak se dá mezi jednotlivými kostrami pøecházet.

%\centerline{\epsfysize=3cm\epsfbox{01.eps}}

\s{Definice:} Pro kostru~$T$ a hrany $e, e'$
zaveïme $\<swap>(T,e,e^\prime) := T-e+e'$.

\s{Pozorování:}
Pokud $e^\prime \not\in T$ a $e\in T[e^\prime]$, je $\<swap>(T,e,e^\prime)$ opìt kostra.
Staèí si uvìdomit, ¾e pøidáním $e^\prime$ do~$T$ vznikne kru¾nice (konkrétnì $T[e^\prime] + e^\prime$)
a vynecháním libovolné hrany z~této kru¾nice získáme opìt kostru.

\s{Lemma o~swapování:}
Máme-li libovolné kostry $T$ a $T'$, pak lze z~$T$ dostat $T'$ koneèným poètem operací \<swap>.

\proof
Jeliko¾ $\vert T \vert = \vert T' \vert$, musí existovat $e' \in T'\setminus T$.
Kru¾nice $T[e']+e'$ nemù¾e být celá obsa¾ena v~$T$, tak¾e existuje hrana
$e\in T[e']\setminus T'$ a $\check{T} := \<swap>(T,e,e')$ je kostra,
pro kterou $\vert \check{T} \symdiff T' \vert = \vert T \symdiff T' \vert -2$.
Po~koneèném poètu tìchto krokù tedy musíme dojít k~$T'$.
\qed

\s{Monotónní lemma o~swapování:}
Je-li $T$ kostra, k~ní¾ neexistují ¾ádné lehké hrany, a~$T'$ libovolná kostra,
pak lze od~$T$ k~$T'$ pøejít posloupností swapù, pøi které váha kostry neklesá.

\proof
Podobnì jako u~pøedchozího lemmatu budeme postupovat indukcí podle $\vert T \symdiff T' \vert$.
Pokud zvolíme libovolnì hranu $e'\in T'\setminus T$ a k~ní $e\in T[e']\setminus T'$, musí
$\check{T}:=\<swap>(T,e,e')$ být kostra bli¾¹í k~$T'$ a $w(\check{T})\ge w(T)$,
jeliko¾ $e'$ nemù¾e být lehká vzhledem k~$T$, tak¾e speciálnì $w(e')\ge w(e)$.

Aby mohla indukce pokraèovat, potøebujeme je¹tì dokázat, ¾e ani k~nové kostøe neexistují
lehké hrany v~$T'\setminus \check{T}$. K~tomu nám pomù¾e zvolit si ze~v¹ech mo¾ných hran~$e'$ tu s~nejmen¹í vahou.
Uva¾me nyní hranu~$f\in T'\setminus \check{T}$.
Cesta $\check{T}[f]$ pokrytá touto hranou v~nové kostøe je buïto pùvodní $T[f]$ (to pokud $e\not\in T[f]$)
nebo $T[f] \symdiff C$, kde $C$ je kru¾nice $T[e']+e$. První pøípad je triviální,
ve~druhém si staèí uvìdomit, ¾e $w(f)\ge w(e')$ a ostatní hrany na~$C$ jsou lehèí
ne¾~$e'$.
\qed

\s{Dùkaz vìty:}
\itemize\ibull
\:$\Rightarrow$ Chceme dokázat, ¾e $\exists$ lehká hrana $\Rightarrow$ $T$ není minimální.

Nech» $\exists e$ lehká. Najdeme $e' \in T[e] : w(e) < w(e')$ (ta musí existovat z def. lehké hrany).
Kostra $T' := \<swap>(T,e,e')$ je lehèí ne¾~$T$.

\medskip

\:$\Leftarrow$ Pokud k~$T$ neexistuje lehká hrana, je $T$ minimální.

Uva¾me nìjakou minimální kostru $T_{min}$ a pou¾ijme monotónní swapovací lemma na~$T$ a $T_{min}$. Z~nìj plyne $w(T)\le w(T_{min})$,
a~tedy $w(T)=w(T_{min})$.
\qeditem
\endlist

\s{Vìta:}
Jsou-li v¹echny váhy hran navzájem rùzné, je MST urèena jednoznaènì.

\proof
Máme-li dvì MST $T_1$ a $T_2$, neobsahují podle pøedchozí vìty lehké hrany, tak¾e podle monotónního
lemmatu mezi nimi lze pøeswapovat bez poklesu váhy. Pokud jsou ale váhy rùzné, musí ka¾dé swapnutí
ostøe zvý¹it váhu, a~proto k~¾ádnému nemohlo dojít.
\qed

\s{Poznámka:} Èasto se nám bude hodit, aby kostra, kterou hledáme, byla urèena jednoznaènì.
Tehdy mù¾eme vyu¾ít pøedchozí vìty a váhy zmìnit o~vhodné epsilony, respektive kvaziuspoøádání
roz¹íøit na~lineární uspoøádání.

\h{Èervenomodrý meta-algoritmus}

V¹echny tradièní algoritmy na~hledání MST lze popsat jako speciální pøípady následujícího
meta-algoritmu. Rozeberme si tedy rovnou ten. Formulujeme ho pro pøípad, kdy jsou v¹echny
váhy hran navzájem rùzné.

\s{Meta-algoritmus:}

\algo
\:Na poèátku jsou v¹echny hrany bezbarvé.
\:Dokud to lze, pou¾ijeme jedno z~následujících pravidel:
\::{\I Modré pravidlo:} Vyber øez takový, ¾e jeho nejlehèí hrana není modrá,\foot{Za
touto podmínkou nehledejte ¾ádná kouzla, je tu pouze proto, aby se algoritmus nemohl
zacyklit neustálým provádìním pravidel, která nic nezmìní.} a obarvi ji na~modro.
\::{\I Èervené pravidlo:} Vyber cyklus takový, ¾e jeho nejtì¾¹í hrana není èervená, a obarvi ji na~èerveno.
\endalgo

\s{Vìta:}
Pro Èervenomodrý meta-algoritmus spu¹tìný na~libovolném grafu s~hranami lineárnì uspoøádanými
podle vah platí:
\algo
\:V¾dy se zastaví.
\:Po zastavení jsou v¹echny hrany obarvené.
\:Modøe obarvené hrany tvoøí minimální kostru.
\endalgo

\s{Modré lemma:} Je-li hrana~$e$ kdykoliv algoritmem obarvena na~modro, pak $e\in T_{min}$.

\proof Minimální kostra $T_{min}$ je urèena jednoznaènì (váhy jsou rùzné).
Hrana~$e$ byla omodøena jako nejlehèí hrana nìjakého øezu~$C$.
Pokud by existovala nìjaká jiná $e' \in C \cap T_{min}[e]$, mù¾eme provést
$\<swap>(T_{min},e',e)$ a tím z~$T_{min}$ vytvoøit je¹tì lehèí kostru,
co¾ je spor.
\qed

\fig{02.eps}{3cm}

\s{Èervené lemma:} Je-li hrana~$e$ kdykoliv algoritmem obarvena na~èerveno, pak $e\not\in T_{min}$.

\proof Opìt sporem: Pøedpokládejme, ¾e~$e$ byla obarvena èervenì jako nejtì¾¹í na~nìjaké kru¾nici~$C$
a ¾e $e\in T_{min}$. Odebráním~$e$ se nam $T_min$ rozpadne na dvì komponenty $T_x$ a $T_y$.
Nìkteré vrcholy kru¾nice pøipadnou do komponenty $T_x$, ostatní do $T_y$.
Lze jednodu¹e nahlédnout, ¾e musí existovat hrana $e'\ne e$ taková, ¾e $x' \in T_x$ a $y' \in T_y$.
Hrana~$e$ byla nejtì¾¹í na~kru¾nici, tak¾e $w(e') < w(e)$ a $\<swap>(T_{min},e,e')$ nám dá~lehèí kostru,
co¾ je spor.
\qed

\fig{03.eps}{4cm}

\s{Bezbarvé lemma:} Pokud existuje nìjaká neobarvená hrana, lze je¹tì pou¾ít nìkteré
z~pravidel.

\proof Nech» existuje hrana~$e=xy$, která je stále bezbarvá. Oznaèíme si $M$ mno¾inu vrcholù,
do~nich¾ se lze z~$x$ dostat po~modrých hranách. Nyní mohou nastat dvì mo¾nosti:

\itemize\ibull
\:$y \in M$ (tj. existuje modrá cesta z~$x$ do~$y$): Modrá cesta je v~minimální kostøe a k~minimální kostøe
neexistují ¾ádné lehké hrany, tak¾e hrana $e$ je nejdra¾¹í na~cyklu tvoøeném modrou cestou a~touto hranou
a mohu na ni pou¾ít èervené pravidlo.

\fig{04.eps}{3cm}

\:$y \notin M$: Tehdy øez $\delta(M)$ neobsahuje ¾ádné modré hrany a alespoò jednu, která není
èervená (konkrétnì hranu~$e$), tak¾e na~tento øez mù¾eme pou¾ít modré pravidlo.

\fig{05.eps}{3cm}

\qeditem
\endlist

\s{Dùkaz vìty:}
\itemize\ibull
\:{\I Zastaví se:} Z~èerveného a modrého lemmatu plyne, ¾e ¾ádnou hranu nikdy nepøebarvíme, pøibude ka¾dým krokem
  alespoò jedna obarvená hrana, tak¾e se algoritmus zastaví.
\:{\I Obarví v¹e:} Pokud existuje alespoò jedna neobarvená hrana, pak podle bezbarvého lemmatu algoritmus pokraèuje.
\:{\I Najde modrou MST:} Podle èerveného a modrého lemmatu le¾í v~$T_{min}$ právì modré hrany.
\qeditem
\endlist

\s{Poznámka:}
Èervené a modré pravidlo jsou v~jistém smyslu duální. Pro rovinné grafy je na~sebe pøevede obyèejná rovinná
dualita (staèí si uvìdomit, ¾e kostra duálního grafu je komplement duálu kostry primárního grafu), obecnìji
je to dualita mezi matroidy, která prohazuje øezy a cykly.

\h{Klasické algoritmy na hledání MST}

\s{Kruskalùv neboli Hladový:\foot{\rm Mo¾ná hladový s~malým `h', ale tento algoritmus je pradìdeèkem
v¹ech ostatních hladových algoritmù, tak mu tu èest pøejme.}}

\algo
\:Setøídíme hrany podle vah vzestupnì.
\:Zaèneme s~prázdnou kostrou (ka¾dý vrchol je v~samostatné komponentì souvislosti).
\:Bereme hrany ve vzestupném poøadí.
\::Pro ka¾dou hranu $e$ se podíváme, zda spojuje dvì rùzné komponenty -- pokud ano, pøidáme ji do~kostry,
   jinak ji zahodíme.
\endalgo

Èervenomodrý pohled: pìstujeme modrý les. Pokud hrana spojuje dva stromeèky, je~urèitì minimální v~øezu mezi
jedním ze~stromeèkù a zbytkem grafu (ostatní hrany tého¾ øezu jsme je¹tì nezpracovali). Pokud nespojuje,
je maximální na~nìjakém cyklu tvoøeném touto hranou a nìjakými døíve pøidanými.

Potøebujeme èas $\O(m \log n)$ na~setøídìní hran a dále datovou strukturu pro udr¾ování komponent souvislosti
(Union-Find Problem), se~kterou provedeme $m$ operací \<Find> a $n$ operací \<Union>. Nejlep¹í známá implementace
této struktury dává slo¾itost obou operací $\O(\alpha(n))$ amortizovanì, tak¾e celkovì hladový algoritmus
dobìhne v~èase $\O(m \log n + m \alpha(n))$.

\s{Borùvkùv:}

Opìt si budeme pìstovat modrý les, av¹ak tentokrát jej budeme roz¹iøovat ve fázích. V~jedné fázi nalezneme ke ka¾dému stromeèku nejlevnìj¹í incidentní hranu
a v¹echny tyto nalezené hrany naráz pøidáme (aplikujeme nìkolik modrých pravidel najednou). Pokud jsou v¹echny váhy rùzné, cyklus
tím nevznikne.

Poèet stromeèku klesá exponenciálnì $\Rightarrow$ fází je celkem $\log n$. Pokud ka¾dou fázi
implementujeme lineárním prùchodem celého grafu, dostaneme slo¾itost $\O(m\log n)$.
Mimo to lze ka¾dou fázi výteènì paralelizovat.

\s{Jarníkùv:}

Jarníkùv algoritmus je podobný Borùvkovi, ale s tím rozdílem, ¾e nenecháme rùst celý les, ale jen jeden modrý strom. V~ka¾dém
okam¾iku nalezneme nejlevnìj¹í hranu vedoucí mezi stromem a zbytkem grafu a pøidáme ji ke~stromu (modré pravidlo);
hrany vedoucí uvnitø stromu prùbì¾nì zahazujeme (èervené pravidlo). Kroky opakujeme, dokud se strom nerozroste pøes v¹echny vrcholy.
Pøi ¹ikovné implementaci pomocí haldy má èasovou slo¾itost $\O(m\log n)$, v~pøí¹tí kapitole uká¾eme implementaci je¹tì ¹ikovnìj¹í.

\s{Cvièení:}
Naleznìte algoritmus pro výpoèet MST v~grafech ohodnocených vahami $\{1,\ldots k\}$ se slo¾itostí $\O(mk)$.

\references
\bye
