]> mj.ucw.cz Git - ads1.git/commitdiff
DFS: Revize pro novou prednasku master
authorMartin Mares <mj@ucw.cz>
Wed, 13 Mar 2013 20:11:24 +0000 (21:11 +0100)
committerMartin Mares <mj@ucw.cz>
Wed, 13 Mar 2013 20:11:24 +0000 (21:11 +0100)
4-dfs/4-dfs.tex

index ebe9d4e4769b898ed1d8fe230370bf511f3279da..d8189fff049824f1d92ad646c481e4742dfb35fa 100644 (file)
 \input ../lecnotes.tex
-\let\la\leftarrow
 
-\prednaska{4}{Aplikace DFS}{do pou¾itelné podoby dokopal Jan \uv{Moskyto} Matìjka}
+\prednaska{4}{Aplikace DFS}{}
 
-\h{Detekce cyklù v orientovaném grafu}
+\h{Opakování DFS}
 
-Algoritmus na vypsání {\I v¹ech} cyklù v grafu si neuká¾eme, nebo» tento
-problém je tì¾¹í, ne¾ se zdá. Mimo jiné proto, ¾e cyklù mù¾e být a¾
-exponenciálnì mnoho. Zde probíráme nalezení {\I nìjakého} cyklu v orientovaném
-grafu.
+DFS spu¹tìné z~vrcholu~$v_0$ v~èase $\Theta(n+m)$ nalezne podgraf
+dosa¾itelný z~$v_0$ a pro nìj spoète:
 
-\s{Definice:} $\<DFS>(G)$ znaèíme spu¹tìní DFS tak, aby pro¹el v¹echny vrcholy.
+\itemize\ibull
+\:Èasy pøíchodu $\<in>(v)$ a odchodu $\<out>(v)$ pro v¹echny vrcholy~$v$.
+\:Klasifikaci v¹ech hran, tedy jejich rozdìlení na {\I stromové, zpìtné,
+dopøedné a pøíèné.}
+\endlist
+
+Pokud není celý graf dosa¾itelný z~$v_0$, èasto se nám hodí volat
+DFS opakovanì, dokud existují nedosa¾itelné vrcholy:
 
-Realizace pøedchozí definice je jednoduchá.
 \algo
-\:Dokud existuje nenav¹tívený vrchol $v$:
-\::Spustíme $\<DFS>(v)$.
+\:Pro v¹echny vrcholy~$v$:
+\::Pokud $v$ je¹tì není oznaèen jako nav¹tívený:
+\:::Spustíme DFS z~vrcholu~$v$.
 \endalgo
 
-\s{Lemma:} Cyklus je v grafu $G$ právì tehdy, kdy¾ $\<DFS>(G)$ oznaèí nìjakou
-hranu jako zpìtnou.
-
-\proof Buï $v_1,v_2,\dots,v_k,v_1$ cyklus v grafu $G$ a $v_1$ buï BÚNO vrchol s
-max. $\<out>(v_i)$. Pak jistì $\<out>(v_k) < \<out>(v_1)$. Jakého typu je hrana
-$(v_k,v_1)$?
+V¹imnìte si, ¾e tento algoritmus stále pracuje v~èase $\Theta(n+m)$.
+(Mimochodem, stejného výsledku bychom dosáhli, pokud bychom do grafu
+pøidali nìjaký nový vrchol a hrany z~nìj do v¹ech ostatních vrcholù.)
 
-Uva¾me poøadí opou¹tìní vrcholù na rùzných typech hran $(x,y)$. Na
-stromové, dopøedné a pøíèné hranì platí $\<out>(x) > \<out>(y)$, na zpìtné
-$\<out>(x) < \<out>(y)$. Tedy $(v_k,v_1)$ musí být nutnì zpìtná.
+\h{Detekce cyklù v orientovaném grafu}
 
-V opaèném smìru nalezneme pro zpìtnou hranu $(x,y)$ cestu z $y$ do $x$ po
-stromových hranách.  \qed
+Mìjme orientovaný graf~$G$. Chceme zjistit, zda se v~nìm nachází orientovaný
+cyklus (alespoò jeden; najít v¹echny je mnohem obtí¾nìj¹í, mimo jiné proto,
+¾e jich mù¾e být exponenciálnì mnoho).
 
-\s{Algoritmus:}
-\algo
-\algin Graf $G$
-\:Spustíme $\<DFS>(G)$ a pøi nalezení první zpìtné hrany $(u,v)$ zastavíme.
-\:Pokud jsme nalezli zpìtnou hranu:
-\::Vypí¹eme v¹echny vrcholy mezi $(u,v)$ ze zásobníku onoho DFS v opaèném poøadí.
-\:jinak
-\::Graf je acyklický.
-\endalgo
+\s{Lemma:} Cyklus je v grafu $G$ právì tehdy, kdy¾ DFS provedené na celý
+graf oznaèí nìjakou hranu jako zpìtnou.
 
-\s{Èasová i pamì»ová slo¾itost} je $\O(m+n)$, nebo» se jedná o triviálnì upravené DFS.
+\proof
+Pokud existuje zpìtná hrana z~$u$ do~$v$, pak spolu s~cestou po stromových
+hranách z~$v$ do~$u$ tvoøí cyklus.
 
-\h{Topologické uspoøádání DAGu (grafu bez orientovaných cyklù)}
+A~naopak: mìjme nìjaký cyklus a buï $v$ jeho vrchol s~nejni¾¹ím $\<out>(v)$.
+Tím pádem na hranì vedoucí z~$v$ do následujícího vrcholu na cyklu roste \<out>,
+co¾ je ov¹em mo¾né pouze na zpìtné hranì.
+\qed
 
-\s{Definice:} {\it Topologické uspoøádání} acyklického orientovaného grafu $G$ o $k$
-vrcholech je ohodnocení vrcholù èísly $1\dots k$ tak, ¾e $(u,v) \in E(G)
-\Rightarrow f(u) < f(v)$.
+%\s{Algoritmus:}
+%\algo
+%\algin Graf $G$
+%\:Spustíme $\<DFS>(G)$ a pøi nalezení první zpìtné hrany $(u,v)$ zastavíme.
+%\:Pokud jsme nalezli zpìtnou hranu:
+%\::Vypí¹eme v¹echny vrcholy mezi $(u,v)$ ze zásobníku onoho DFS v opaèném poøadí.
+%\:jinak
+%\::Graf je acyklický.
+%\endalgo
 
-\s{Pozorování:} Vhodné topologické uspoøádání nám dá napøíklad $\<out>$ z
-$\<DFS>(G^R)$.  $G^R$~budi¾ graf $G$, ve kterém otoèíme orientace v¹ech hran.
+\s{Èasová i pamì»ová slo¾itost} je $\O(m+n)$, nebo» se jedná o triviálnì upravené DFS.
 
-\h{Hledání mostù v neorientovaném grafu}
+\h{Topologické uspoøádání DAGu (grafu bez orientovaných cyklù)}
 
-\s{Definice:} Hrana $uv \in E(G)$ je {\I most}, pokud se jejím odebráním
-z~grafu $G$ zvý¹í poèet komponent souvislosti tohoto grafu.
+\s{Definice:} {\it Topologické uspoøádání} acyklického orientovaného grafu
+je lineární uspoøádání~$\prec$ na~vrcholech grafu takové, ¾e kdykoliv je $uv$
+hrana, pak $u\prec v$.
 
-\s{Pozorování:} Hrana, která je v nìjakém cyklu, nemù¾e být mostem. Z cyklu
-toti¾ lze libovolnì odebrat jednu hranu a pøesto zùstane souvislý. V¹echny
-ostatní hrany naopak mosty jsou.
+\s{Jiný pohled:} Je to prosté oèíslování $f: V(G) \rightarrow {\bb N}$
+takové, ¾e pro jakoukoliv hranu $uv\in E(G)$ platí $f(u) < f(v)$.
 
-Mù¾e být mostem jiná hrana ne¾ stromová? Zpìtné hrany nutnì tvoøí cyklus.
-Pøíèné a dopøedné se v neorientovaném DFS neobjeví.
+\s{Pozorování:} Jak u¾ víme, spustíme-li DFS na acyklický graf, nenajde ¾ádnou
+zpìtnou hranu. Na v¹ech ostatních typech hran \<out> klesá, tak¾e obrácené poøadí
+\<out>ù je topologické.
+Z~toho plyne, ¾e v~èase $\Theta(n+m)$ lze topologicky uspoøádat libovolný DAG.
 
-Hledáme tedy v¹echny stromové hrany, které nejsou v ¾ádném cyklu. Projdeme graf
-zase pomocí upraveného DFS.
+\h{Nejdel¹í cesta v ohodnoceném DAGu}
 
-Kdy je hrana $uv$ v nìjakém cyklu? Kdy¾ existuje cesta $v\dots w$ (a nebo
-$v=w$), zpìtná hrana $wx$ a cesta $x\dots u$ (a nebo $x=u$).
+Mìjme DAG~$G$, ohodnocení jeho hran $\ell: E(G) \rightarrow {\bo R}$
+a nìjaký vrchol~$u$. Pro ka¾dý vrchol~$v$ chceme spoèítat $D(v)$ -- délku nejdel¹í cesty
+z~$u$ do~$v$.
 
-\smallskip
-\s{Algoritmus} bude je¹tì trochu více upravené DFS. Pro ka¾dý vrchol~$v$ si
-budeme kromì hloubky je¹tì pamatovat $z(v)$. To bude nejmen¹í \<in> vrcholu,
-do kterého se dá dostat po zpìtných hranách z~vrcholu $v$ nebo podstromu pod ním.
+\s{Algoritmus:}
 
 \algo
-\:Vstoupíme do vrcholu $u$ jako DFS.
-\:$x \la $~minimum z $\<in>(v)$ pøes v¹echny zpìtné hrany $uv$
-\:$y \la $~minimum ze $z(w)$ pøes v¹echny stromové hrany $uw$
-\:$z(u) \la \min xy$
-\:Pokud $z(u) \ge \<in>(u)$,
-\::je jistì mostem hrana, po které jsme vstoupili do $u$.
+\:Zvolíme topologické uspoøádání $w_1 \dots w_n$ na $G$.
+\:Pro $v=w_1,\ldots,w_n$ postupnì provádíme:
+\::Pokud $v=u$, pak $D(u) \= 0$.
+\::Jinak:
+$$D(v)\=\max_{w: wv \in E} (D(w) + \ell(wv)).$$
+(Pozor, mù¾e to být maximum z~prázdné mno¾iny, v~takovém pøípadì
+je rovno $-\infty$.)
 \endalgo
 
-\s{Èasová i pamì»ová slo¾itost} tohoto upraveného DFS jsou $\O(m+n)$.
+\s{Pozorování:} V¹imnìte si, ¾e koneèné~$D(v)$ vyjde právì tìm vrcholùm~$v$,
+které jsou dosa¾itelné z~$u$.
 
-\qed
-
-\h{Nejdel¹í cesta v ohodnoceném DAGu}
+\s{Èasová slo¾itost:} Topologické uspoøádání trvá $\Theta(n+m)$,
+projití grafu s~výpoètem vzdáleností takté¾.
 
-\s{Definice:} Pro $u,v \in V$ bude $D(u,v)$ délka nejdel¹í cesty z $u$ do $v$.
-$D^R(u,v)$ bude délka nejdel¹í cesty v grafu s otoèenými hranami.
+\s{TODO:} Kritické hrany.
 
-Neexistuje-li cesta z $u$ do $v$, nech» $D(u,v) = -\infty$.
-%Zvolme pak $D(u)$ jako nejdel¹í cestu zaèínající v $u$. Pak platí: $$D(u) = \max_{v\in V} D(u,v)$$
+%\h{Hledání kritických hran v ohodnoceném DAG-u}
+%\s{Definice:} Hrana je kritická právì tehdy, kdy¾ le¾í na nìkteré z nejdel¹ích cest.
+%
+%\s{Pozorování:} Hrana $(x,y)$ je kritická právì tehdy, kdy¾ $D(u,x) + e(x,y) = D(u,y)$.
+%
+%\s{Algoritmus:}
+%\algo
+%\algin Graf $G$, v nìm vrchol $u$.
+%\:Nalezneme v grafu $G$ nejdel¹í cesty z $u$ pøedchozím algoritmem
+%\:Vybereme ty hrany, které splòují rovnost $D(u,x) + e(x,y) = D(u,y)$ -- kritické
+%\algout Seznam kritických hran.
+%\endalgo
+%\s{Èasová a pamì»ová slo¾itost:} $\O(n+m)$
 
-\s{Algoritmus:}
+\h{Hledání mostù v neorientovaném grafu}
 
-\algo
-\algin Graf $G$, v nìm vrchol $u$.
-\:Zvolíme topologické uspoøádání $w_1 \dots w_n$ na $G$. Nech» $w_k=u$.
-\:Pøedpoèítáme si ke ka¾dému vrcholu v¹echny jeho pøedchùdce, tedy mno¾inu
-$W_i = \{w_j\mid(w_j,w_i)\in E\}$.
-\:Pro v¹echny vrcholy $w_i$ pøed $u$ ($\forall w_i: i<k$) nastavíme délku cesty $D(u,w_i)=-\infty$, pro $u$ pak $D(u,u)=0$.
-\:Postupnì procházíme vrcholy $w_i \in V(G)$ v topologickém poøadí a pro ka¾dý z nich spoèítáme $D(u,w_i)$.
-$$D(u,w_i)=\max_{w_j \mid (w_j, w_i) \in E} (D(u,w_j)+ e(w_j,w_i))$$
-\algout $\left\{\strut D(u,w_i)\right\}$.
-\endalgo
-\s{Èasová slo¾itost:} Sestrojení topologického uspoøádání a pøedpoèet v $\O(n+m)$. Postupné poèítání $D(u,w)$ také v $\O(n+m)$, celkem $\O(n+m)$.
+\s{Definice:} Hrana $uv \in E(G)$ je {\I most,} pokud se jejím odebráním
+z~grafu~$G$ zvý¹í poèet komponent souvislosti tohoto grafu.
 
-\s{Pamì»ová slo¾itost:} Pøedpoèet pøedchùdcù zabere $\O(n+m)$ pamìti.
+\s{Pozorování:} Hrana, která je souèástí nìjakého cyklu, nemù¾e být mostem.
+A~naopak, pokud nìjaká hrana není mostem, pak le¾í na nìjakém cyklu.
 
-\h{Hledání kritických hran v ohodnoceném DAG-u}
-\s{Definice:} Hrana je kritická právì tehdy, kdy¾ le¾í na nìkteré z nejdel¹ích cest.
+\s{DFS klasifikace} pro neorientované grafy: Ka¾dou hranu potkáme v~obou
+smìrech. Poprvé jí mù¾eme potkat jako stromovou, resp. zpìtnou. Podruhé
+pak jako zpìtnou, resp. dopøednou. Pøíèné hrany se neobjeví (opaèné k~nim
+by toti¾ také musely být pøíèné, ale jak víme, pøíèné hrany nikdy nevedou
+\uv{zleva doprava}.)
 
-\s{Pozorování:} Hrana $(x,y)$ je kritická právì tehdy, kdy¾ $D(u,x) + e(x,y) = D(u,y)$.
+\s{Pozorování:} Ka¾dý most je stromová hrana. Zpìtné hrany toti¾ le¾í
+na cyklech.
 
-\s{Algoritmus:}
-\algo
-\algin Graf $G$, v nìm vrchol $u$.
-\:Nalezneme v grafu $G$ nejdel¹í cesty z $u$ pøedchozím algoritmem
-\:Vybereme ty hrany, které splòují rovnost $D(u,x) + e(x,y) = D(u,y)$ -- kritické
-\algout Seznam kritických hran.
-\endalgo
-\s{Èasová a pamì»ová slo¾itost:} $\O(n+m)$
+Mìjme tedy nìjakou stromovou hranu~$uv$. Mostem není tehdy, vede-li v~grafu
+$G-uv$ cesta z~$v$ do~$u$. Tato cesta musí nìkudy opustit podstrom strom~$T_v$
+(to je podstrom obsahující v¹e pod vrcholem~$v$) a mù¾e tak uèinit pouze
+zpìtnou hranou, které vede do~$u$ nebo kamkoliv blí¾e ke~koøeni.
 
-\h{Rozkládání orientovaných grafù na komponenty silné souvislosti}
+\s{Definice:} $\<low>(v) = \min\{ \<in>(w) \mid \hbox{z~$T_v$ vede zpìtná
+hrana do~$w$} \}$.
 
-\s{Definice:} $R$ bude relace na $V(G)$ taková, ¾e $uRv$ právì tehdy, kdy¾ existuje orientovaná cesta v~$G$ z~$u$ do~$v$ a souèasnì z~$v$ do~$u$.
+\s{Dùsledek:} Stromová hrana~$uv$ je most právì tehdy, kdy¾ $\<low>(v) > \<in>(u)$.
 
-% WTF?
-%\>{\I Pozorování:} Pokud $R$ je ekvivalence a $u...v$ $v...w$ je $u$-$w$ sled $\Rightarrow$ existuje $u$-$w$ cesta.
+Staèí domyslet, ¾e bìhem DFS mù¾eme snadno spoèítat \<low> pro v¹echny vrcholy.
+Kdykoliv opou¹tíme vrchol~$v$, polo¾íme $\<low>(v)$ rovnu minimu z~\<low> jeho
+synù a \<in> vrcholù, do nich¾ z~$v$ vede zpìtná hrana. Tím DFS asymptoticky
+nezpomalíme.
 
-\s{Definice:} $G$ je {\I silnì souvislý} právì tehdy, kdy¾ $\forall (u,v) \in V(G): uRv$.
+\h{Komponenty silné souvislosti}
 
-\s{Definice:} {\I Komponenty silné souvislosti} grafu $G$ jsou ekvivalenèní tøídy relace $R$.
+\s{Definice:} Buï $T$ bude relace na $V(G)$ definovaná tak, ¾e $uTv$ právì tehdy,
+existuje-li orientovaná cesta v~$G$ z~$u$ do~$v$ a souèasnì z~$v$ do~$u$.
 
-\s{Poznámka:} Je $R$ vùbec ekvivalence? Ano, zkuste si v definici prohodit $u$ a $v$.
+\s{Pozorování:} $T$ je ekvivalence. Tøídám této ekvivalence se øíká {\I komponenty
+silné souvislosti} (v~tomto oddílu øíkejme prostì {\I komponenty}). Graf je {\I silnì
+souvislý,} pokud má právì jednu komponentu, tedy pokud $uTv$ pro ka¾dé dva vrcholu $u,v$.
 
-\s{Definice:} {\I Graf komponent} $C(G)$
+\s{Definice:} {\I Graf komponent} ${\cal C}(G)$ je graf, jeho¾ vrcholy jsou
+komponenty grafu~$G$ a z~komponenty $C_i$ vede hrana do~$C_j$ právì tehdy,
+kdy¾ v~pùvodním grafu~$G$ existuje hrana z~nìjakého vrcholu $u\in C_i$ do nìjakého $v\in C_j$.
 
-$V(C(G))$: Komponenty silné souvislosti grafu $G$
+Jiný pohled: ${\cal C}(G)$ je graf, který z~$G$ vznikne kontrakcí ka¾dé komponenty
+do~jednoho vrcholu. (Násobné hrany pøi kontrakcích odstraòujeme.)
 
-$(C_1,C_2) \in E(C(G)) \Leftrightarrow \exists v_1 \in C_1, v_2  \in C_2: (v_1, v_2) \in E(G)$
-
-\smallskip
-
-\s{Lemma:} Graf komponent $C(G)$ ka¾dého grafu $G$ je DAG.
+\s{Lemma:} Graf komponent ${\cal C}(G)$ ka¾dého grafu~$G$ je acyklický.
 
 \proof
-Sporem: Nech» $C_1, C_2, \dots C_k$ tvoøí cyklus v~$C(G)$. Podle definice grafu
-komponent tedy musí existovat vrcholy $x_1 \dots x_k \in C_i$ a $y_1 \dots y_k
-\in C_{i+1}$ takové, ¾e $(x_i, y_i)$ jsou hrany grafu~$G$.
+Sporem: Nech» $C_1, C_2, \dots C_k$ tvoøí cyklus v~${\cal C}(G)$. Podle definice grafu
+komponent tedy musí existovat vrcholy $x_1, \ldots, x_k$ ($x_i \in C_i$)
+a $y_1, \ldots, y_k$ ($y_i \in C_{i+1}$, indexujeme modulo~$k$) takové,
+¾e $x_i y_i$ jsou hrany grafu~$G$.
+
+V¹echny komponenty $C_i$ jsou silnì souvislé, tedy existuje cesta z~$y_{i-1}$
+do~$x_i$ v~$C_i$.
+
+Slepením tìchto hran a cest vznikne cyklus v~grafu~$G$ tvaru
+$$
+x_1, y_1, \hbox{cesta v~$C_2$}, x_2, y_2, \hbox{cesta v~$C_3$}, x_3, \ldots,
+x_k, y_k, \hbox{cesta v~$C_1$}, x_1.
+$$
+To je ov¹em spor s~tím, ¾e vrcholy~$x_i$ le¾í v~rùzných komponentách.
+\qed
 
-V¹echny $C_i$ jsou silnì souvislé, tedy existuje cesta z~$y_{i-1} \pmod k$ do~$x_i$
-v~$C_i$. Slepíme nyní v¹echny tyhle cesty a hrany za sebe.
-{\catcode`\@\active\let@\rightarrow$$x_1@y_1@\dots@x_2@y_2@\dots@x_3@y_3@\dots\,\dots\,\dots@x_k@y_k@\dots@x_1$$}
+\s{Definice:} Buï~$G^R$ graf, který vznikne z~$G$ otoèením orientace v¹ech hran.
 
-Slepením vznikne cyklus v~$G$, co¾ je spor, nebo» v¹echny vrcholy
-v~cyklu musí le¾et v jedné komponentì souvislosti.
-\qed
+\s{Pozorování:} $G^R$ má tyté¾ komponenty jako~$G$. Navíc ${\cal C}(G^R) = ({\cal C}(G))^R$.
 
-\smallskip
+\s{Definice:} {\I Zdroj} øíkáme vrcholu, do~nìj¾ nevedou ¾ádné hrany. Symetricky
+{\I stok} je vrchol, z~nìj¾ nevedou hrany.
 
-\s{Definice:} {\it Zdroj} v grafu $G$ je takový vrchol, do kterého nevedou ¾ádné hrany
+\s{Pozorování:} Ka¾dý DAG má alespoò jeden zdroj a alespoò jeden stok.
+Zdroje v~$G$ jsou stoky v~$G^R$ a naopak.
 
-\s{Definice:} {\it Zdrojová komponenta} grafu $G$ je taková komponenta silné
-souvislosti, která tvoøí zdroj v $C(G)$.
+\s{Definice:} {\it Zdrojová komponenta} grafu $G$ je taková komponenta,
+která tvoøí zdroj v $C(G)$. (Jinými slovy, ani v~$G$ do ní nevedou ¾ádné hrany
+z~jiných komponent.)
 
-\s{Trik:} Uva¾ujme graf $G^R$ (graf $G$, ve kterém otoèíme orientace v¹ech hran). Pokud
-$v$~le¾í ve zdrojové komponentì grafu $G$, pak $\<DFS>(v)$ v $G^R$ projde právì
-komponenty~$G$.
+\s{Trik:} Nech»~$C$ je nìjaká zdrojová komponenta a~$v$ libovolný její vrchol.
+Potom DFS spu¹tìné v~$G^R$ z~vrcholu~$v$ oznaèí právì vrcholy komponenty~$C$.
 
-Pustíme-li $\<DFS>(G)$, pak vrchol s maximálním $\<out>(v)$ le¾í nutnì ve zdrojové
-komponentì (laskavý ètenáø doká¾e samostatnì). 
+\s{Plán:} Najdeme vrchol s~maximálním $\<out>(v)$. Ten urèitì le¾í ve~zdrojové
+komponentì (rozmyslete si). Spustíme z~nìj DFS v~$G^R$, tím oznaèíme jednu
+komponentu. Odtrhneme ji a postup opakujeme. Dokonce nemusíme pøepoèítávat
+\<out>y. Staèí toti¾ pou¾ít následujicí:
 
-\s{Tvrzeníèko:} Pokud $(C_1, C_2) \in E(C(G))$, pak $$\max_{x \in C_1} \<out>(x) > \max_{x \in C_2} \<out>(x).$$
+\s{Tvrzeníèko:} Pokud $(C_1, C_2) \in E({\cal C}(G))$, pak $$\max_{x \in C_1} \<out>(x) > \max_{x \in C_2} \<out>(x).$$
 
 \proof
-\itemize\ibull
-\:Buïto DFS vstoupí nejdøíve do $C_1$ -- nìkdy odtamtud dojde do $C_2$ a zase se nìkdy vrátí, rozhodnì ale døíve ne¾ z $C_1$. Pro tento pøípad tvrzeníèko platí.
-\:Nebo vstoupí nejdøíve do $C_2$. Odtud nemù¾e nikdy dojít do $C_1$. Vrátí se tedy rozhodnì døíve z celé $C_2$, ne¾ kdy vùbec vstoupí do $C_1$, tedy pro tento pøípad také tvrzeníèko platí.
-\endlist
-\qed
+Buïto DFS vstoupí nejdøíve do $C_1$ -- nìkdy odtamtud dojde do $C_2$ a zase se nìkdy vrátí, rozhodnì ale døíve ne¾ z $C_1$. Pro tento pøípad tvrzeníèko platí.
 
-Vybereme si tedy vrchol $v_1$ ve zdrojové komponentì grafu $G$ (ten s maximálním $\<out>(v_1)$), spustíme
-$\<DFS>(v)$ v $G^R$ a v¹echny dosa¾ené vrcholy $w$ oznaèkujeme -- $\<komp>(w) \la v$.
-
-Nyní si vybereme vrchol $v_2$ ve zdrojové komponentì neoznaèkované èásti $G'$
-grafu $G$ (ten s maximálním $\<out>(v_2)$) \dots\ a algoritmus analogicky opakujeme, dokud
-existují neoznaèkované vrcholy.
+Nebo vstoupí nejdøíve do $C_2$. Odtud nemù¾e nikdy dojít do $C_1$. Vrátí se tedy rozhodnì døíve z celé $C_2$, ne¾ kdy vùbec vstoupí do $C_1$, tedy pro tento pøípad také tvrzeníèko platí.
+\qed
 
-\s{Pozorování:} Neoznaèkovaná èást $G'$ grafu $G$ je prázdná, nebo má zdrojovou
-komponentu. Kdyby zdrojovou komponentu nemìla, tak nemá zdroj ani $C(G')$, tedy
-$C(G')$ buïto obsahuje cyklus (spor s definicí), nebo je prázdný.
+Staèí tedy vybrat vrchol s~nejvìt¹ím \<out>, spustit z~nìj DFS v~$G^R$,
+èím¾ oznaèíme první komponentu. Pak vybereme vrchol s~nejvìt¹ím \<out>
+z~tìch, které je¹tì nebyly oznaèeny, a~pokraèujeme\dots
 
 \goodbreak
 \s{Algoritmus:}
 \algo
 \algin Graf $G$
 \:Sestrojíme $G^R$
-\:$Z \la$ prázdný zásobník, $\<komp>(*) \la$ ?
+\:$Z \=$ prázdný zásobník, $\<komp>(*) \=$ ?
 \:Spustíme $\<DFS>(G)$, pøi opu¹tení vrcholu jej vlo¾íme do $Z$. Máme tedy vrcholy v zásobníku setøídìné podle $\<out>(v)$.
 \:Postupnì pro $v \in Z$:
 \::Pokud $\<komp>(v)=~?$
-\:::pustíme $\<DFS>(v)$ v $G^R$ s omezením jen na vrcholy $w$, pro které $\<komp>(w) =~?$, v¹em nav¹tíveným vrcholùm $w$ nastavíme $\<komp>(w) \la v$.
+\:::pustíme $\<DFS>(v)$ v $G^R$ s omezením jen na vrcholy $w$, pro které $\<komp>(w) =~?$, v¹em nav¹tíveným vrcholùm $w$ nastavíme $\<komp>(w) \= v$.
 \algout Pro ka¾dý vrchol $v$ vrátíme jeho komponentu $\<komp>(v)$.
 \endalgo
 
-\s{Èasová a pamì»ová slo¾itost} bude $\O(m+n)$, nebo» první DFS má $\O(m+n)$,
-ka¾dé dal¹í DFS se omezí jen na svoji komponentu silné souvislosti a souèet
-velikostí v¹ech komponent souvislosti je $\O(m+n)$.
+\s{Èasová a pamì»ová slo¾itost} bude $\Theta(m+n)$, nebo» první DFS má $\Theta(m+n)$,
+ka¾dé dal¹í DFS se omezí jen na svoji komponentu a souèet
+velikostí v¹ech komponent je $\Theta(m+n)$.
 
 \bye