From: Martin Mares Date: Wed, 23 May 2007 10:54:52 +0000 (+0200) Subject: Temer finalni verze. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=9977e96160c8cbf9db7b5c45625f1597f1629e4d;p=ads1.git Temer finalni verze. --- diff --git a/12-kostry/12-kostry.tex b/12-kostry/12-kostry.tex index 6e12cec..5a00c0b 100644 --- a/12-kostry/12-kostry.tex +++ b/12-kostry/12-kostry.tex @@ -4,7 +4,7 @@ Pro zaèátek si definujme, co budeme dìlat, v jakých grafech budeme minimální kostru hledat. -\s{Zadání úlohy:} Pro neorientovaný graf $G$ s ohodnocením hran $w: E(G) \rightarrow R$, +\s{Zadání úlohy:} Pro neorientovaný graf $G$ s ohodnocením hran $w: E(G) \rightarrow \bb R$, chceme najít kostru $T$ s minimálním ohodnocením $w(T)=\sum_{e\in E(T)} w(e)$. \s{Pøedpoklady úlohy:} @@ -21,10 +21,10 @@ algoritmus. \def\concat{\mathop{\hbox{.}}} \algo -\:Zvolíme libovolný vrchol $v_0\in V(G)$, $T=(\left\{v_0\right\},\emptyset)$. -\:Dokud $\vert V(T) \vert \neq n$ : -\: vybereme hranu $uv\in E(G) : u\in V(T), v\notin V(T)$, min $w(uv)$ -\: $T\leftarrow T+uv$ +\:Zvolíme libovolný vrchol $v_0\in V(G)$, $T\leftarrow(\left\{v_0\right\},\emptyset)$. +\:Dokud $\vert V(T) \vert \neq n$: +\::Vybereme hranu $uv\in E(G) : u\in V(T), v\notin V(T)$, aby $w(uv)$ bylo minimálni. +\::$T\leftarrow T+uv$ \endalgo \s{Vìta:} Jarníkùv algoritmus se zastaví po maximálnì $n$ iteracích a vydá minimální kostru grafu $G$. @@ -33,31 +33,34 @@ algoritmus. Koneènost - pøi ka¾dé iteraci se pøidá jeden vrchol $\Rightarrow$ po maximálnì $n$ iteracích se zastaví. Vydaný graf je strom, proto¾e se stále pøidává list k ji¾ existujícímu stromu. Vydaný graf má $n$ vrcholù $\Rightarrow$ vydaný graf je kostra. Zbývá nám u¾ jen dokázat, ¾e kostra je minimální. To -dokazuje následující Lemma. -\qed +udìláme pomocí následujícího lemmatu. -Proto aby jsme byli schopni zformulovat i dokázat Lemma, je nutná je¹tì vysvìtlit pojem øez v grafu. +Proto aby jsme byli schopni zformulovat i dokázat lemma, je nutné je¹tì vysvìtlit pojem øez v grafu. \s{Definice:} Øez v grafu $G=(V,E)$ je mno¾ina hran $F\subseteq E$ taková, ¾e $\exists U\subset V$ : -$F=\left\{uv\in E \vert u\in U, v\notin U \right\}$. +$F=\left\{uv\in E:u\in U, v\notin U \right\}$. \s{Lemma:} Pokud $G$ je graf, $w$ jeho prosté ohodnocení, $F$ je øez v grafu $G$ a $f$ je nejlehèí hrana v øezu -$F$, pak pro ka¾dou minimální kostru $G$ je $f\in E(T)$. +$F$, pak pro ka¾dou minimální kostru $T$ grafu $G$ je $f\in E(T)$. \proof -Buï $T$ kostra a $f\notin E(T)$, pak $\exists$ cesta $P\subseteq T$ spojující $u$ a $v$ (vrcholy hrany $f$). -Cesta musí øez alespoò jednou projít. $\exists e\in P \cap F$ taková, ¾e $w(e) > w(f)$. Uva¾me $T'=T-e+f$. +Buï $T$ kostra a $f=uv\notin E(T)$. Pak existuje cesta $P\subseteq T$ spojující $u$ a $v$. +Cesta musí øez alespoò jednou pøekroèit. Proto existuje $e\in P \cap F$ taková, ¾e $w(e) > w(f)$. Uva¾me $T'=T-e+f$. $T'$ je rovnì¾ kostra grafu $G$, proto¾e odebraním hrany $e$ se graf rozpadne na dvì komponenty a pøidáním -hrany $f$ se opìt spojí. $w(T')=w(T)-w(e)+w(f)(T) \leq 2k$. \qed Nyní si uká¾eme a rozebereme vkládaní do èerveno-èerných stromù. -\s{Insert:} (v èerveno-èerném strome) +\s{Insert:} (v èerveno-èerném stromì) BÚNO nový uzel $t$ bude èervený. Vlo¾íme uzel do stromu jako do standardního binárního vyhledávacího stromu. -Jestli¾e je pøedek èerný, jsme hotovi (viï obr. 1). +Jestli¾e je pøedek èerný, jsme hotovi (viz obr. 1). \figure{01.eps}{obr. 1}{2in} -Jestli¾e nikoliv, mù¾u nastat tøi následující pøípady: +Jestli¾e nikoliv, mohou nastat tøi následující pøípady: \itemize\ibull \:Je-li vrchol $t$ èervený a jeho otec je také èervený, pak øekneme, ¾e $t$ je porucha. Je-li $t$ porucha, -pak ji musíme nìjak opravit. Situace je na obrázku 2 - nejprve zále¾í na tom, jakou barvu má $s$, strýc $t$: +pak ji musíme nìjak opravit. Situace je na obrázku 2 $-$ nejprve zále¾í na tom, jakou barvu má $s$, strýc vrcholu $t$: \figure{02.eps}{obr. 2}{1.5in} \algo \:$s$ je èervený. Pak pouze pøebarvíme $o$, $d$ a $s$ podle obrázku 3. @@ -183,7 +189,7 @@ Nyn Pro splnìní poslední podmínky je je je¹tì nutné pøebarvit koøen $d$ na èerno. \:$s$ je èerný. Pak zále¾í na tom, zda hodnota $t$ le¾í mezi hodnotami $o$ a $d$ nebo ne. Jinými slovy, zda cesta $t-o-d$ obsahuje zatáèku. -(a) Bez zatáèky: Provedeme rotaci a pøebarvíme podle obrázku 4. Splnìny budou podmínky 1, 2 i 3, tedy máme èervenoèerný strom: +(a) Bez zatáèky: Provedeme rotaci a pøebarvíme podle obrázku~4. Splnìny budou podmínky 1, 2 i 3, tedy máme èervenoèerný strom: \figure{04.eps}{obr. 4}{4in} (b) Se zatáèkou. Provedeme dvojitou (LR) rotaci a pøebarvíme podle obrázku 5. Splnìny budou podmínky 1, 2 i 3, opìt máme rovnou èervenoèerný strom. \figure{05.eps}{obr. 5}{4in}