Nyní u¾ se zamìøíme pouze na~neorientované grafy~\dots
\s{Lemma:} Relace \uv{Hrany $e$ a $f$ le¾í na~spoleèné kru¾nici} (znaèíme $e\sim f$) je ekvivalence. Její
-tøídy tvoøí maximální 2-souvislé podgrafy (bloky). Vrchol $v$ je artikulace právì tehdy,
-sousedí-li s~ním hrany z~více blokù.
+tøídy tvoøí maximální 2-souvislé podgrafy (bloky); ekvivalenèní tøídy s~jedinou hranou (mosty) pova¾ujeme
+za triviální bloky. Vrchol $v$ je artikulace právì tehdy, sousedí-li s~ním hrany z~více blokù.
Pokud spustíme na~graf DFS, je pøirozené testovat, do~jakých blokù patøí stromové
hrany sousedící s~právì prohledávaným vrcholem~$v$: stromová hrana $uv$, po~které jsme
a v¾dy si budeme udr¾ovat blokovou strukturu ji¾ nakreslené èásti grafu, uspoøádanou
podle DFS stromu -- ka¾dý blok bude mít svùj koøen, s~výjimkou nejvy¹¹ího bloku
je tento koøen souèasnì artikulací v~nadøazeném bloku. Aby se nám tato situace snadno
-reprezentovala, mù¾eme artikulace naklonovat a ka¾dý blok pak dostane svou vlastní
-kopii artikulace.
+reprezentovala, artikulace naklonujeme a ka¾dý blok dostane svou vlastní kopii artikulace.
Také budeme vyu¾ívat toho, ¾e nakreslení ka¾dého bloku, který není
most, je ohranièeno kru¾nicí, a mosty zdvojíme, aby to pro nì platilo
\s{Definice:} Vrchol~$w$ je {\I externí,} pokud buïto z~$w$ vede zpìtná
hrana do~je¹tì nenakresleného vrcholu, nebo je pod~$w$ pøipojen externí
-blok, èili blok obsahující alespoò jeden externí vrchol.
+blok, èili blok obsahující alespoò jeden externí vrchol. Ostatním vrcholùm
+budeme øíkat {\I interní.}
Jinými slovy platí, ¾e vrchol $w$ je externí pøi zpracování vrcholu~$v$, pakli¾e $\<Ancestor>(w) < \<Enter>(v)$,
nebo pokud pro nìkterého ze~synù $x$ le¾ícího v~jiném bloku je $\<LowPoint>(x) < \<Enter>(v)$.
bit v~koøeni, pokud chceme pøeklopit jen tento blok, invertujeme bity
i v~koøenech v¹ech podøízených blokù, je¾ najdeme obcházením hranice.
-Na~konci algoritmu spustíme post-processing, který v¹echny pøeklápìcí
+Na~konci algoritmu spustíme dodateèný prùchod, který v¹echny pøeklápìcí
bity pøenese ve~smìru od~koøene k~potomkùm a urèí tak absolutní orientaci
v¹ech seznamù sousedù i hranic.
tj. blok obsahující ¾ivý vrchol.
®ivé vrcholy pøitom mohou být i~externí (pokud z~nich vedou zpìtné hrany
-jako do vrcholu~$v$, tak do je¹tì nenakreslených vrcholù). Pokud ¾ivý vrchol
-není externí, budeme mu øíkat {\I interní.} A~pokud nìjaký vrchol není ani
-¾ivý, ani externí, budeme ho nazývat {\I pasivní.}
+jak do vrcholu~$v$, tak do je¹tì nenakreslených vrcholù).
+Pokud nìjaký vrchol není ani ¾ivý, ani externí, budeme ho nazývat {\I pasivní.}
Pøed procházením podstromù tedy nejprve probereme v¹echny zpìtné hrany vedoucí do~$v$
a oznaèíme ¾ivé vrcholy. Pro ka¾dou zpìtnou hranu potøebujeme o¾ivit vrchol, z~nìj¾
Výstupem této èásti algoritmu budou znaèky u~¾ivých vrcholù a u~artikulací
také seznamy podøízených ¾ivých blokù. Tyto seznamy budeme udr¾ovat uspoøádané
-tak, aby externí bloky následovaly po~v¹ech interních. To nám
-usnadní práci v~hlavní èásti algoritmu.
+tak, aby externí bloky následovaly po~v¹ech interních. To nám usnadní práci
+v~hlavní èásti algoritmu.
-\s{Lemma:} Pro ka¾dý koøen trvá znaèení ¾ivých vrcholù èas $\O(k+l)$, kde $k$ je poèet
-kreslených zpìtných hran a $l$ poèet vrcholù, které zmizely z~vnìj¹í stìny, èili
+\s{Lemma:} Pro ka¾dý koøen trvá znaèení ¾ivých vrcholù èas $\O(k+\ell)$, kde $k$ je poèet
+kreslených zpìtných hran a $\ell$ poèet hran, které zmizely z~vnìj¹í stìny, èili
amortizovanì konstanta.
-\proof Alespoò polovina vrcholù, po~nich¾ jsme v~libovolném bloku pro¹li,
-zmizí z~vnìj¹í stìny, tak¾e hledání koøenù blokù trvá $\O(l)$. Pro ka¾dou zpìtnou
-hranu oznaèíme jeden vrchol jako ¾ivý a pak pokraèujeme hledáním koøenù.
+\proof
+Po~¾ádné hranì neprojdeme více ne¾ jednou. Navíc alespoò polovina z~tìch, po~nich¾
+jsme pro¹li, zmizí z~vnìj¹í stìny, tak¾e hledání koøenù blokù trvá $\O(\ell)$.
+Pro ka¾dou zpìtnou hranu oznaèíme jeden vrchol jako ¾ivý a pak pokraèujeme hledáním
+koøenù, které jsme ji¾ zapoèítali.
\qed
\h{Kreslení zpìtných hran}
Oba prùchody vypadají následovnì: Procházíme seznam vrcholù na~hranici a pasivní
vrcholy pøeskakujeme. Pokud objevíme ¾ivý vrchol, nakreslíme v¹e, co z~nìj vede,
pøípadnì se zanoøíme do~¾ivých blokù, které jsou pøipojeny pod tímto vrcholem.
-Pokud objevíme externí vrchol (pøípadnì poté, co jsme ho o¹etøili jako ¾ivý),
+Pokud objevíme externí vrchol (poté, co jsme ho pøípadnì o¹etøili jako ¾ivý),
procházení zastavíme, proto¾e za externí vrchol ji¾ nemù¾eme po~této stranì
hranice nic pøipojit, ani¾ by se externí vrchol dostal dovnitø nakreslení.
Pøitom se øídíme dvìma jednoduchými pravidly:
\s{Pravidlo \#1:} V~ka¾dém ¾ivém vrcholu zpracováváme nejdøíve zpìtné hrany do~$v$,
-pak podøízené interní bloky a koneènì podøízené externí bloky.
+pak podøízené ¾ivé interní bloky a koneènì podøízené ¾ivé externí bloky.
(K~tomu se nám hodí, ¾e máme seznamy ¾ivých podøízených blokù setøídìné.)
\s{Pravidlo \#2:} Pokud vstoupíme do~dal¹ího bloku, vybereme si smìr, ve~kterém
-budeme pokraèovat, následovnì: preferujeme smìr k~internímu
-vrcholu, pokud takový neexistuje, pak k~¾ivému externímu
-vrcholu. Pokud se tento smìr li¹í od~smìru, ve~kterém jsme zatím hranici obcházeli,
+budeme pokraèovat, následovnì: preferujeme smìr k~¾ivému internímu
+vrcholu, pokud takový neexistuje, pak k~¾ivému externímu vrcholu.
+Pokud se tento smìr li¹í od~smìru, ve~kterém jsme zatím hranici obcházeli,
blok pøeklopíme.
Èasová slo¾itost této èásti algoritmu je lineární ve~velikosti ¾ivého podgrafu
\h{Hotový algoritmus}
-Celý algoritmus bude vypadat takto:
+\s{Algoritmus (kreslení do roviny):}
\algo
\:Pokud má graf více ne¾ $3n-6$ hran, odmítneme ho rovnou jako nerovinný.
\:Prohledáme graf $G$ do~hloubky, spoèteme \<Enter,> \<Ancestor> a \<LowPoint> v¹ech vrcholù.
\:Vytvoøíme \<BlockList> v¹ech vrcholù pøihrádkovým tøídìním.
\:Procházíme vrcholy v~poøadí klesajících \<Enter>ù, pro ka¾dý vrchol~$v$:
-\::Nakreslíme v¹echny stromové hrany z~$v$ jako triviální bloky (2-cykly).
+\::Nakreslíme v¹echny stromové hrany z~$v$ jako triviální bloky \hfil\break (2-cykly).
\::Oznaèíme ¾ivý podgraf.
\::Pro ka¾dého syna vrcholu~$v$ obcházíme ¾ivý podgraf nále¾ící k~tomuto vrcholu
v~obou smìrech a kreslíme zpìtné hrany do~$v$.
\::Zkontrolujeme, zda v¹echny zpìtné hrany vedoucí do~$v$ byly nakresleny, a pokud ne,
- prohlásíme graf za~nerovinný a konèíme.
+ prohlásíme graf za~nerovinný a skonèíme.
\:Projdeme hotové nakreslení do~hloubky a zorientujeme seznamy sousedù.
\endalgo
tedy mù¾eme pøedpokládat, ¾e $m=\O(n)$. Lineární èasovou slo¾itost krokù 4--6 a~9 jsme ji¾
diskutovali, kroky~7--8 jsou lineární ve~velikosti ¾ivého podgrafu, a~tedy také $\O(n)$.
Nakreslení vydané algoritmem je v¾dy rovinné a v¹echny stromové hrany jsou v¾dy
-nakresleny, zbývá tedy ukázat, ¾e zpìtnou hranu mù¾eme nenakreslit jen pokud
+nakresleny, zbývá tedy ukázat, ¾e zpìtnou hranu mù¾eme nenakreslit, jen pokud
graf nebyl rovinný. Tomu vìnujeme zbytek kapitoly.
\qed