]> mj.ucw.cz Git - ga.git/commitdiff
Znacne vylepseno a opraveno.
authorMartin Mares <mj@ucw.cz>
Mon, 15 Jan 2007 22:32:39 +0000 (23:32 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 15 Jan 2007 22:32:39 +0000 (23:32 +0100)
11-planar/11-planar.tex

index d25d9a76f78cfae6a6cef453a44980fefe36a817..418bc9dccadc49f111f7de20c7dbb9d06659fcd9 100644 (file)
@@ -11,13 +11,15 @@ Proto se zam
 zastaví s~tím, ¾e graf není rovinný. Tarjan ji¾ v~roce 1974 ukázal \cite{tarjan:planarity},
 ¾e je to mo¾né provést v~lineárním èase, ale jeho algoritmus je ponìkud
 komplikovaný. Od~té doby se objevilo mnoho zjednodu¹ení, prozatím vrcholících
-algoritmem Boyera a Myrvoldové \cite{boyer:cutting}, který zde uká¾eme.
+algoritmem Boyera a Myrvoldové \cite{boyer:cutting}, a ten zde uká¾eme.
 
-Jakmile nìjaké rovinné nakreslení máme, lze z~nìj celkem snadno vytváøet
+Jakmile u¾ nìjaké rovinné nakreslení máme, lze z~nìj celkem snadno vytváøet
 rovinná nakreslení s~rùznými speciálními vlastnostmi. Za~zmínku stojí napøíklad
 Schnyderùv algoritmus \cite{schnyder:grid} generující v~lineárním èase nakreslení,
 v~nìm¾ v¹echny hrany jsou úseèky a vrcholy le¾í v~møí¾ových bodech møí¾ky $(n-2)\times (n-2)$,
-a~o~nìco jednodu¹¹í varianta \cite{chrobak:grid} do~møí¾ky $(2n-4)\times (n-2)$.
+a~o~nìco jednodu¹¹í algoritmus \cite{chrobak:grid} kreslící do~møí¾ky $(2n-4)\times (n-2)$.
+
+Tak s~chutí do toho \dots
 
 \h{DFS a bloky}
 
@@ -25,15 +27,15 @@ P
 k~hledání komponent vrcholové 2-souvislosti {\I (blokù).}
 
 \s{Definice:} Prohledávání do~hloubky rozdìlí $E$ na~ètyøi druhy hran: {\I stromové} (po~nich¾
-DFS pro¹lo a rekurzivnì se zavolalo; vytváøejí {\I DFS strom} orientovaný z~koøene),
+DFS pro¹lo a rekurzivnì se zavolalo; tyto hrany vytváøejí {\I DFS strom} orientovaný z~koøene),
 {\I zpìtné} (vedou do~vrcholu na~cestì mezi prohledávaným vrcholem a koøenem,
-èili do~takového, který se nachází na~zásobníku), {\I dopøedné} vedou do~ji¾ zpracovaného
-vrcholu le¾ícího v~DFS stromu pod aktuálním vrcholem a zbývající {\I pøíèné} (z~tohoto vrcholu
+èili do~takového, který se právì nachází na~zásobníku), {\I dopøedné} (vedou do~ji¾ zpracovaného
+vrcholu le¾ícího v~DFS stromu pod aktuálním vrcholem) a zbývající {\I pøíèné} (z~tohoto vrcholu
 do~jiného podstromu).
 
 \s{Lemma:} Prohledáváme-li do~hloubky neorientovaný graf, nevzniknou ¾ádné dopøedné ani
 pøíèné hrany.\foot{Pro úplnost: v~orientovaném grafu mohou existovat dopøedné
-a také pøíèné vedoucí \uv{zprava doleva}, tedy døíve nav¹tívené komponenty.}
+a také pøíèné vedoucí \uv{zprava doleva}, tedy do~døíve nav¹tíveného podstromu.}
 
 \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,
@@ -53,9 +55,9 @@ ani neexistuje, co
 $T_i$ a $T_j$ mohou být spojeny jen pøes své koøeny (pøíèné hrany neexistují). Ze~zpìtných
 hran tedy získáme kompletní strukturu blokù.
 
-Nyní si staèí rozmyslet, jak zpìtné hrany testovat efektivnì. K~tomu si zavedeme:
+Nyní si staèí rozmyslet, jak existenci zpìtných hran testovat rychle. K~tomu se bude hodit:
 
-\s{Definice:} Pro vrchol $v$ zavedeme:
+\s{Definice:} Je-li $v$ vrchol grafu, pak:
 \itemize\ibull
 \:$\<Enter>(v)$ udává poøadí, v~nìm¾ prohledávání do~vrcholu~$v$ vstoupilo.
 \:$\<Ancestor>(v)$ je nejmen¹í z~\<Enter>ù vrcholù, do~nich¾ vede z~$v$ zpìtná hrana.
@@ -65,84 +67,90 @@ Nyn
 \s{Pozorování:} \<Enter>, \<Ancestor> i \<Lowpoint> v¹ech vrcholù lze spoèítat
 bìhem prohledávání, tedy také v~lineárním èase.
 
+Rozpoznávání blokù a artikulací mù¾eme shrnout do~následujícího lemmatu:
+
 \s{Lemma:}
-Stromové hrany $uv$ a $vw$ le¾í v~tomté¾ bloku (tedy $uv\sim vw$) právì
+Stromové hrany $uv$ a $vw$ le¾í v~tomté¾ bloku ($uv\sim vw$) právì
 tehdy, kdy¾ $\<LowPoint>(w) < \<Enter>(v)$. Vrchol~$v$ je artikulace právì
 tehdy, kdy¾ nìkterý z~jeho synù $w$ má $\<LowPoint>(w) \ge \<Enter>(v)$.
 
 \h{Postup kreslení}
 
-Graf budeme kreslit v~opaèném DFS-poøadí, tj. od~nejvìt¹ích \<Enter>ù k~nejmen¹ím,
-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 a (mimo nejvy¹¹ího bloku)
-bude zavì¹en pod artikulací le¾ící v~nadøazeném bloku. Aby se nám tato
-situace snadno reprezentovala, mù¾eme artikulace naklonovat a ka¾dý blok
-pak dostane jednu kopii artikulace.
+Graf budeme kreslit v~opaèném poøadí oproti DFS, tj. od~nejvìt¹ích \<Enter>ù k~nejmen¹ím,
+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.
 
 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
-také. Navíc libovolný blok spolu se v¹emi bloky le¾ícími pod~ním
-mù¾eme v~rovinì pøeklopit.
+také. Navíc v~libovolném nakreslení mù¾eme kterýkoliv blok spolu se v¹emi bloky
+le¾ícími pod~ním pøeklopit podle koøenové artikulace, ani¾ bychom poru¹ili
+rovinnost.
 
-V¹imnìme si, ¾e pokud vede z~nìjakého u¾ nakresleného vrcholu~$v$ je¹tì nenakreslená hrana,
-lze pokraèovat po~nenakreslených hranách a¾ do~koøene. V¹echny vrcholy, ke~kterým
+V¹imnìme si, ¾e pokud vede z~nìjakého u¾ nakresleného vrcholu je¹tì nenakreslená hrana,
+lze pokraèovat po~nenakreslených hranách a¾ do~koøene DFS stromu. V¹echny vrcholy, ke~kterým
 je¹tì bude potøeba nìco pøipojit (takovým budeme øíkat {\I externì aktivní} a za~chvíli
-to nadefinujeme formálnì), tedy musí le¾et v~té¾e stìnì dosud nakresleného
+to nadefinujeme formálnì), proto musí le¾et v~té¾e stìnì dosud nakresleného
 podgrafu a bez újmy na~obecnosti si vybereme, ¾e to bude vnìj¹í stìna.
 
-Základním krokem algoritmu tedy bude roz¹íøit nakreslení o~nový vrchol~$v$,
-je-li v¹e v~DFS poøadí následující po~tomto vrcholu ji¾ nakresleno,
-a o~v¹echny s~ním incidentní hrany. Stromové hrany pùjdou nakreslit v¾dy,
-pøidáme je jako 2-cykly a a¾ se uká¾e, ¾e to nejsou mosty, pøipojíme
-je k~pøíslu¹nému bloku. Zpìtné hrany byly a¾ do~nedávna externì aktivní,
-tak¾e pøidání jedné zpìtné hrany nahradí cestu po~okraji bloku
-touto hranou (tím vytvoøí novou stìnu) a také mù¾e slouèit nìkolik
-blokù do~jednoho:
+Základním krokem algoritmu tedy bude roz¹íøit nakreslení o~nový
+vrchol~$v$ a o~v¹echny hrany vedoucí z~nìj do~jeho (ji¾ nakreslených)
+DFS-následníkù.  Stromové hrany pùjdou nakreslit v¾dy, pøidáme je jako
+triviální bloky (2-cykly) a nejsou-li to mosty, brzy se nìjakou
+zpìtnou hranou spojí s~jinými bloky. Zpìtné hrany byly a¾ donedávna
+externì aktivní, tak¾e pøidání jedné zpìtné hrany nahradí cestu
+po~okraji bloku touto hranou (tím vytvoøí novou stìnu) a také mù¾e
+slouèit nìkolik blokù do~jednoho:
 
-\twofigures{planar1.eps}{Pøed nakreslením zpìtných hran \dots}{\epsfxsize}{planar2.eps}{\dots\ po nìm}{\epsfxsize}
+\twofigures{planar1.eps}{Pøed nakreslením zpìtných hran \dots}{\epsfxsize}{planar2.eps}{\dots\ po nìm (ètvereèky jsou externì aktivní vrcholy)}{\epsfxsize}
 
 Bude se nám hodit, ¾e èas potøebný na~tuto operaci je pøímo úmìrný poètu
 hran, které ubyly z~vnìj¹í stìny, co¾ je amortizovanì konstanta.
 
 Mù¾e se nám ale stát, ¾e zpìtná hrana zakryje nìjaký externì aktivní vrchol.
-Tehdy potøebujeme nìkteré bloky pøeklopit tak, aby externì aktivní vrcholy
+Tehdy musíme nìkteré bloky pøeklopit tak, aby externì aktivní vrcholy
 zùstaly venku. Potøebujeme tedy datové struktury, pomocí nich¾ bude mo¾né
-pøeklápìt efektivnì a co víc, také rychle poznat, kdy je pøeklápìní potøebné.
+pøeklápìt efektivnì a co víc, také rychle poznávat, kdy je pøeklápìní potøebné.
 
 \h{Externí aktivita}
 
-Pokud z~nìjakého vrcholu~$v$ bloku~$B$ vede dosud nenakreslená hrana, musí
+Jestli¾e z~nìjakého vrcholu~$v$ bloku~$B$ vede dosud nenakreslená hrana, musí
 být tento vrchol na~vnìj¹í stìnì, tak¾e musí také zùstat na~vnìj¹í stìnì
-vrchol, pøes který je~$B$ pøipojen ke~zbytku grafu. Proto externí aktivitu
+i~vrchol, pøes který je~$B$ pøipojen ke~zbytku grafu. Proto externí aktivitu
 nadefinujeme tak, aby pokrývala i tyto pøípady:
 
 \s{Definice:} Vrchol~$w$ je {\I externì aktivní} pokud buïto z~$w$ vede zpìtná
-hrana do~je¹tì nenakresleného vrcholu, nebo je k~$w$ pøipojen externì aktivní
-blok, èili blok obsahující alespoò jeden externì aktivní vrchol. Externì
-aktivní vrcholy budeme kreslit jako ètvereèky.
+hrana do~je¹tì nenakresleného vrcholu, nebo je pod~$w$ pøipojen externì aktivní
+blok, èili blok obsahující alespoò jeden externì aktivní vrchol.
 
-Jinými slovy $w$ je externì aktivní pøi zpracování vrcholu~$v$, pokud je $\<Ancestor>(w) < \<Enter>(v)$,
-nebo pokud pro nìkterého ze~synù $x$ le¾ícího v~jiném bloku je $\<LowPoint>(x) < \<Enter>(x)$.
-Ve~statickém grafu by staèilo testovat $\<LowPoint>(w)$, nám se ov¹em bloková
-struktura mìní, tak¾e musíme uva¾ovat bloky v~souèasném okam¾iku. Proto si zavademe:
+Jinými slovy $w$ je externì aktivní pøi zpracovávání vrcholu~$v$, pokud je $\<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)$.
+Druhá podmínka funguje díky tomu, ¾e koøen bloku má v~tomto bloku právì jednoho syna
+(jinak by existovala pøíèná hrana, co¾ víme, ¾e není pravda), tak¾e minimum z~\<Ancestor>ù
+v¹ech vrcholù le¾ících uvnitø bloku je pøesnì \<LowPoint> tohoto syna.
+Ve~statickém grafu by se v¹echny testy redukovaly na~$\<LowPoint>(w)$, nám se ov¹em bloková
+struktura prùbì¾nì mìní, tak¾e musíme uva¾ovat bloky v~souèasném okam¾iku. Proto si zavademe:
 
-\s{Definice:} $\<SepBlockList>(w)$ je seznam v¹ech synù vrcholu~$w$, které v~daném
-okam¾iku le¾í v~jiných blocích ne¾~$w$, setøídìný vzestupnì podle $\<LowPoint>$ù.
+\s{Definice:} $\<BlockList>(w)$ je seznam v¹ech blokù pøipojených v~daném okam¾iku
+pod vrcholem~$w$, reprezentovaných jejich koøeny (klony vrcholu~$w$) a jedinými syny koøenù.
+Tento seznam udr¾ujeme setøídìný vzestupnì podle $\<LowPoint>$ù synù.
 
 \s{Lemma:} Vrchol~$w$ je externì aktivní pøi zpracování vrcholu~$v$, pokud buïto $\<Ancestor>(w) < \<Enter>(v)$,
-nebo první prvek $x$ seznamu $\<SepBlockList>(w)$ má $\<LowPoint>(x) < \<Enter>(v)$. Navíc
-seznamy \<SepBlockList> je mo¾no udr¾ovat v~amortizovanì konstantním èase.
+nebo první prvek seznamu $\<BlockList>(w)$ má $\<LowPoint> < \<Enter>(v)$. Navíc
+seznamy \<BlockList> lze udr¾ovat v~amortizovanì konstantním èase.
 
 \s{Dùkaz:} První èást plyne z~definice. V¹echny seznamy na~zaèátku bìhu algoritmu
-zkonstruujeme v~lineárním èase pøihrádkovým tøídìním a kdykoliv slouèíme blok
-s~koøenem~$x$ s~nadøazeným blokem, odstraníme $x$ ze~seznamu v~pøíslu¹né artikulaci.
+sestrojíme v~lineárním èase pøihrádkovým tøídìním a kdykoliv slouèíme blok
+s~nadøazeným blokem, odstraníme ho ze~seznamu v~pøíslu¹né artikulaci.
 \qed
 
 \h{Reprezentace blokù a pøeklápìní}
 
 Pro ka¾dý blok si potøebujeme pamatovat vrcholy, které le¾í na~hranici
 (nìkteré z~nich jsou externì aktivní, ale to u¾ umíme poznat) a bloky,
-které jsou k~nim pøipojené. Dále je¹tì vnitøní strukturu bloku vèetnì
+které jsou pod nimi pøipojené. Dále je¹tì vnitøní strukturu bloku vèetnì
 uvnitø pøipojených dal¹ích blokù, ale jeliko¾ ¾ádné vnitøní vrcholy nejsou
 externì aktivní, vnitøek u¾ neovlivní dal¹í výpoèet a potøebujeme jej pouze
 pro vypsání výstupu.
@@ -152,18 +160,18 @@ oproti nad
 bloku. Ka¾dý vrchol na~hranici bloku pak bude obsahovat dva~ukazatele
 na~sousední vrcholy. Neumíme sice lokálnì poznat, který ukazatel odpovídá
 kterému smìru, ale kdy¾ se nìjakým smìrem vydáme, doká¾eme ho dodr¾et
--- staèí si v¾dy vybrat ten ukazatel, který nás nezavede do~vrcholu,
-z~nìj¾ jsme právì pøi¹li.
+-- staèí si v¾dy vybrat ten ukazatel, který nás nezavede do~právì
+opu¹tìného vrcholu.
 
-Ka¾dý vrchol bloku si také bude pamatovat seznam svých sousedù,
+Ka¾dý vrchol si také bude pamatovat seznam svých sousedù,
 podle orientace bloku buïto v~hodinkovém nebo opaèném poøadí.
-Chceme-li pøidat hranu, potøebujeme tedy znát abslolutní orientaci,
-ale to pùjde snadno, jeliko¾ hrany pøidáváme jen k~vrcholùm na~hranici
-a v¾dy k~nim po~hranici dojdeme z~koøene.
+Chceme-li pøidat hranu, potøebujeme tedy znát absolutní orientaci,
+ale to pùjde snadno, jeliko¾ hrany pøidáváme jen k~vrcholùm na~hranici,
+poté co k~nim po~hranici dojdeme z~koøene.
 
-K~pøeklopení bloku vèetnì v¹ech podøízených blokù tedy staèí invertovat
+K~pøeklopení bloku vèetnì v¹ech podøízených blokù nám staèí invertovat
 bit v~koøeni, pokud chceme pøeklopit jen tento blok, invertujeme bity
-i v~koøenech v¹ech podøízených blokù, které najdeme obcházením hranice.
+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í
 bity pøenese ve~smìru od~koøene k~potomkùm a urèí tak absolutní orientaci
@@ -172,30 +180,35 @@ v
 \h{®ivý podgraf}
 
 Kdy¾ nakreslíme nový vrchol~$v$ a z~nìj vedoucí stromové hrany, musíme obejít
-ka¾dý podstrom a ve~vhodném poøadí nakreslit zpìtné hrany do~$v$ a podle
-potøeby pøeklopit bloky. V~podstromu ov¹em mù¾e být mnoho blokù, které,
-aè jsou externì aktivní, ¾ádnou pozornost nevy¾adují a bìh algoritmu by
-zbyteènì brzdily. Proto podobnì jako externí aktivitu nadefinujeme je¹tì
-¾ivost vrcholu, které bude odpovídat zpìtným hranám vedoucím do~$v$:
+ka¾dý podstrom, ve~vhodném poøadí nakreslit zpìtné hrany do~$v$ a podle
+potøeby pøeklopit bloky. V~podstromu ov¹em mù¾e být mnoho blokù, které
+¾ádnou pozornost nevy¾adují a bìh algoritmu by zbyteènì brzdily.
+Proto podobnì jako externí aktivitu nadefinujeme je¹tì
+¾ivost vrcholu a ta bude odpovídat zpìtným hranám vedoucím do~$v$.
 
 \s{Definice:}
 Vrchol~$w$ je {\I ¾ivý,} pokud z~nìj buïto vede zpìtná hrana do~právì
-zpracovávaného vrcholu~$v$, nebo pokud k~nìmu je pøipojen ¾ivý blok,
+zpracovávaného vrcholu~$v$, nebo pokud pod ním je pøipojen ¾ivý blok,
 tj. blok obsahující ¾ivý vrchol. Není-li ¾ivý vrchol èi blok externì aktivní,
 budeme mu øíkat {\I internì aktivní.} Pakli¾e není vrchol/blok ani ¾ivý, ani externì aktivní,
 budeme ho nazývat {\I neaktivní.}
 
 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¾
-hrana vede, dále artikulaci, pod~ní¾ je tento blok pøipojen a dal¹í artikulace
+hrana vede, dále artikulaci, pod~ní¾ je tento blok pøipojen, a dal¹í artikulace
 na~cestì do~$v$. Poka¾dé, kdy¾ vstoupíme do~bloku (nìjakým vrcholem na~vnìj¹í stìnì),
 tedy potøebujeme nalézt koøen bloku. To udìláme tak, ¾e zaèneme obcházet vnìj¹í
-stìnu obìma smìry souèasnì, ne¾ dojdeme v~jednom smìru do~koøene. Navíc si v¹echny
+stìnu obìma smìry souèasnì, ne¾ dojdeme v~kterémkoliv smìru do~koøene. Navíc si v¹echny
 vrcholy, pøes nì¾ jsme pro¹li, oznaèkujeme a pøiøadíme k~nim rovnou ukazatel na~koøen,
-tak¾e po~¾ádné èásti hranice neprojdeme vícekrát.\foot{Znaèky ani nebude potøeba
+tudí¾ po~¾ádné èásti hranice neprojdeme vícekrát.\foot{Znaèky ani nebude potøeba
 mazat, kdy¾ si u nich poznamenáme, který vrchol byl koøenem v~okam¾iku, kdy jsme
 znaèku vytvoøili, a znaèky patøící ke~starým koøenùm budeme ignorovat, resp. pøepisovat.}
 
+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ì aktivní bloky následovaly po~v¹ech internì aktivní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
 amortizovaná konstanta.
@@ -211,7 +224,7 @@ Nyn
 a oznaèování ¾ivého podgrafu -- a zbývá doplnit, jak algoritmus kreslí zpìtné
 hrany. Jeliko¾ zpìtné hrany vedoucí do~$v$ nemohou zpùsobit slouèení blokù
 le¾ících pod~$v$ (na~to jsou potøeba zpìtné hrany vedoucí nìkam nad~$v$ a ty
-je¹tì nekreslíme), zpracováváme ka¾dý podstrom zvlá¹». Pøidáme 2-cyklus
+je¹tì nekreslíme), zpracováváme ka¾dý podstrom zvlá¹». Pøidáme triviální blok
 pro stromovou hranu, pod nìj pøipojíme blokovou strukturu zatím nakreslené
 èásti podstromu a vydáme se po~hranici této struktury nejdøíve jedním
 a pak druhým smìrem.
@@ -226,11 +239,12 @@ hranice nic p
 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 internì aktivní bloky a koneènì externì aktivní bloky pøipojené pod vrcholem.
+pak podøízené internì aktivní bloky a koneènì podøízené externì aktivní 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 (pokud se li¹í od~smìru, ve~kterém zatím hranici
-obcházíme, blok pøeklopíme) následovnì: preferujeme smìr k~internì
+budeme pokraèovat, následovnì (pokud se li¹í od~smìru, ve~kterém zatím hranici
+obcházíme, blok pøeklopíme): preferujeme smìr k~internì
 aktivnímu vrcholu, pokud takový neexistuje, pak k~¾ivému externì aktivnímu
 vrcholu.
 
@@ -249,13 +263,13 @@ Cel
 \algo
 \:Pokud má graf více ne¾ $3n-6$ vrcholù, odmítneme ho rovnou jako nerovinný.
 \:Prohledáme graf $G$ do~hloubky, spoèteme \<Enter,> \<Ancestor> a \<LowPoint> v¹ech vrcholù.
-\:Inicializujeme \<SepBlockList> v¹ech vrcholù.
+\:Inicializujeme \<BlockList> v¹ech vrcholù.
 \: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 2-cykly.
+\::Nakreslíme v¹echny stromové hrany z~$v$ jako triviální bloky (2-cykly).
 \::Oznaèíme ¾ivý podgraf.
 \::Pro ka¾dého syna vrcholu~$v$ obcházíme ¾ivý podgraf nále¾ící k~tomuto vrcholu
-   a kreslíme zpìtné hrany do~$v$.
-\::Zkontrolujeme, zda v¹echny hrany incidentní s~$v$ byly nakresleny, pokud ne,
+   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 zastavíme se.
 \:Projdeme hotové nakreslení do~hloubky a zorientujeme seznamy sousedù.
 \endalgo
@@ -264,7 +278,7 @@ Cel
 vydá jeho nakreslení, v~opaèném pøípadì ohlásí nerovinnost.
 
 \s{Dùkaz:} První krok je korektní, jeliko¾ pro v¹echny rovinné grafy je $m\le 3n-6$; nadále
-tedy mù¾eme pøedpokládat, ¾e $m=\O(n)$. Lineární èasovou slo¾itost krokù 4--6 jsme ji¾
+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