From: Martin Mares Date: Tue, 3 Jan 2012 21:40:59 +0000 (+0100) Subject: Planarita: Korektury a zmena terminologie X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=f4ade4b67463e037ec96f1ae568b07f96e9d753b;p=ga.git Planarita: Korektury a zmena terminologie Jeste jedna zmena terminologie: zivost a externost povazujeme za dve zcela nezavisle vlastnosti. Interni vrcholy jsou tedy vsechny, ktere nejsou externi. Na tech nekolika mistech, kde je potreba zduraznit, ze nas zajimaji ne-externi zive, rikame explicitne zive interni. Argumenty zalozene na uctovani vrcholum, ktere zmizely z vnejsi steny, nefunguji pro artikulace. Jednoduchym resenim je uctovat zmizelym hranam. --- diff --git a/11-planar/11-planar.tex b/11-planar/11-planar.tex index 0d69b7d..91902cf 100644 --- a/11-planar/11-planar.tex +++ b/11-planar/11-planar.tex @@ -46,8 +46,8 @@ tvo 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 @@ -90,8 +90,7 @@ Graf budeme kreslit v~opa 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 @@ -142,7 +141,8 @@ nadefinujeme tak, aby pokr \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 $\(w) < \(v)$, nebo pokud pro nìkterého ze~synù $x$ le¾ícího v~jiném bloku je $\(x) < \(v)$. @@ -192,7 +192,7 @@ K~p 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. @@ -212,9 +212,8 @@ zpracov 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¾ @@ -229,16 +228,18 @@ zna 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} @@ -255,20 +256,20 @@ a pak druh 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 @@ -281,19 +282,19 @@ p \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 \ \ a \ v¹ech vrcholù. \:Vytvoøíme \ v¹ech vrcholù pøihrádkovým tøídìním. \:Procházíme vrcholy v~poøadí klesajících \ù, 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 @@ -304,7 +305,7 @@ vyd 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