From: Martin Mares Date: Tue, 18 Oct 2011 17:58:31 +0000 (+0200) Subject: Toky: Podstatna revize, zmena znaceni X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=816f61dfe6ad02edc6b9a9642457e1ab6503df29;p=ads2.git Toky: Podstatna revize, zmena znaceni --- diff --git a/1-toky/1-toky.tex b/1-toky/1-toky.tex index bacf36d..126d81c 100644 --- a/1-toky/1-toky.tex +++ b/1-toky/1-toky.tex @@ -2,22 +2,26 @@ \prednaska{1}{Toky v sítích}{(zapsala Markéta Popelová)} -\s{První motivaèní úloha:} Rozvod èajovodu do~v¹ech uèeben. - -Pøedstavme si, ¾e~by v~budovì fakulty na~Malé Stranì existoval èajovod, který by rozvádìl èaj do~ka¾dé uèebny. Znázornìme si to orientovaným grafem, kde by jeden významný vrchol pøedstavoval èajovar a~druhý uèebnu, ve~které sedíme. Hrany mezi vrcholy by pøedstavovaly vìtvící se trubky, které mají èaj rozvádìt. Jak rozvést co nejefektivnìji dostatek èaje do~dané uèebny? +\s{První motivaèní úloha:} {\I Rozvod èajovodu do~v¹ech uèeben.} +\smallskip +Pøedstavme si, ¾e~by v~budovì fakulty na~Malé Stranì existoval èajovod, který +by rozvádìl èaj do~ka¾dé uèebny. Znázornìme si to orientovaným grafem, kde by +jeden významný vrchol pøedstavoval èajovar a~druhý uèebnu, ve~které sedíme. +Hrany mezi vrcholy by pøedstavovaly vìtvící se trubky, které mají èaj rozvádìt. +Jak rozvést co nejefektivnìji dostatek èaje do~dané uèebny? \figure{toky01.eps}{Èajovod}{2in} - -\s{Druhá motivaèní úloha:} Pøenos dat. +\s{Druhá motivaèní úloha:} {\I Pøenos dat.} +\smallskip Jiným pøíkladem mù¾e být poèítaèová sí» na~pøenos dat, která se sestává z~pøenosových linek spojených pomocí routerù. Data se sice obvykle pøená¹ejí po~paketech, ale to mù¾eme pøi dne¹ních rychlostech pøenosu zanedbat a pova¾ovat data za spojitá. Jak pøená¹et data mezi dvìma poèítaèi v~síti co nejrychleji? -\s{Definice:} {\I Sí»} je uspoøádaná pìtice $(V,E,z,s,c)$, kde platí: +\s{Definice:} {\I Sí»} je uspoøádaná pìtice $(V,E,z,s,c)$, pro ní¾ platí: \itemize\ibull \:$(V,E)$ je orientovaný graf. \:$c:E\to{\bb R}_{0}^{+}$ je {\I kapacita} hran. @@ -30,53 +34,87 @@ Jak p \s{Definice:} {\I Tok} je funkce $f:E \to {\bb R}_{0}^{+}$ taková, ¾e~platí: \numlist{\ndotted} \:Tok po~ka¾dé hranì je omezen její kapacitou: $\forall e \in E : f(e)\le c(e)$. -\:Kirchhoffùv zákon: $$\forall v \in V \setminus \{z,s\}: \sum_{u: uv \in E}{f(uv)}=\sum_{u: vu \in E}{f(vu)}.$$ Neboli pro~ka¾dý vrchol kromì zdroje a~stoku platí, ¾e~to, co do~nìj pøitéká, je stejnì velké jako to, co z~nìj odtéká. +\:Kirchhoffùv zákon: $$\forall v \in V \setminus \{z,s\}: \sum_{u: uv \in E}{f(uv)}=\sum_{u: vu \in E}{f(vu)}.$$ Neboli pro~ka¾dý vrchol kromì zdroje a~stoku platí, ¾e~to, co do~nìj pøitéká, je stejnì velké jako to, co z~nìj odtéká (\uv{sí» tìsní}). \endlist -\s{Poznámka:} Pro~zjednodu¹ení zaveïme speciální znaèení: +\s{Definice:} Pro libovolnou funkci $f:E \to {\bb R}$ se nám bude hodit následující znaèení: \itemize\ibull -\:$f^+(v) = \sum_{u: uv \in E}{f(uv)}$ (to, co do~vrcholu pøitéká) -\:$f^-(v) = \sum_{u: vu \in E}{f(vu)}$ (to, co z~vrcholu odtéká) -\:$f^\Delta(v) = f^+(v) - f^-(v)$ (rozdíl tìchto hodnot) +\:$f^+(v) = \sum_{u: uv \in E}{f(uv)}$ (celkový pøítok do vrcholu) +\:$f^-(v) = \sum_{u: vu \in E}{f(vu)}$ (celkový odtok) +\:$f^\Delta(v) = f^+(v) - f^-(v)$ (pøebytek ve~vrcholu) \endlist -Pak mù¾eme Krichhoffùv zákon zapsat jednodu¹e jako: $$\forall v \in V \setminus \{z,s\}: f^\Delta(v) = 0.$$ -\s{Poznámka:} V~angliètinì se~obvykle zdroj znaèí {$s$} a~stok {$t$} jako source a~target. +\>(Kirchhoffùv zákon pak øíká prostì to, ¾e $f^\Delta(v)=0$ pro v¹echna $v\ne z,s$.) \figure{tok.eps}{Pøíklad toku. Èísla pøedstavují toky po~hranách, v~závorkách jsou kapacity.}{4in} -\s{Pozorování:} Nìjaký tok v¾dy existuje. V libovolné síti mù¾eme v¾dy zvolit funkci nulovou (po~¾ádné hranì nic nepoteèe). Tato funkce splòuje podmínky toku, a~tedy takovýto nulový tok je zcela korektní. - -\s{Definice:} {\I Velikost toku} $f$ je rozdíl souètu velikostí toku na~hranách vedoucích do~$s$ a~souètu velikostí toku na~hranách vedoucích z~$s$. Neboli od~toho, co do~stoku pøitéká odeèteme to, co ze~stoku odtéká. $$\vert f\vert:=f^\Delta(s).$$ - -\s{Cíl:} Budeme chtít najít v~zadané síti tok, jeho¾ velikost je maximální. - -\s{Otázka:} Má vùbec smysl mluvit o~maximálním toku? Bude v¾dy existovat? Nevybíráme zde toti¾ z~koneènì mnoha pøípadù a~na~první pohled není jasné, ¾e~supremum mno¾iny v¹ech tokù bude zároveò i~maximum této mno¾iny. - -\s{Odpovìï:} Ano, pro~ka¾dou sí» existuje maximální tok. Toto pomìrnì pøekvapivé tvrzení mù¾eme nahlédnout za~pomoci matematické analýzy. Nástin dùkazu je takový, ¾e~mno¾ina tokù je kompaktní a~velikost toku je spojitá (dokonce lineární) funkce z~mno¾iny tokù do~${\bb R}$. Proto nabývá velikost toku na~mno¾inì v¹ech tokù svého maxima. - -\s{Poznámka:} Pro~na¹e pøípady pøedpokládejme, ¾e~kapacity jsou racionální. Pomìrnì nám to zjednodu¹í práci a~pøíli¹ nám to neublí¾í, nebo» práce s~reálnými èísly je stejnì pro~informatika pomìrnì zapeklitá. - -\s{První øe¹ení:} Hledejme cestu $P$ ze~$z$ do~$s$ takovou, ¾e~$\forall e \in P: f(e) < c(e)$ (po~v¹ech jejích hranách teèe ostøe ménì, ne¾ jim dovolují jejich kapacity). Pak zjevnì mù¾eme tok upravit tak, aby se~jeho velikost zvìt¹ila. Zvolme $$\varepsilon := \min_{e \in P} (c(e) - f(e)).$$ Nový tok $f'$ pak definujme jako $f'(e):=f(e) + \epsilon$. Kapacity nepøekroèíme ($\epsilon$ je nejvìt¹í mo¾ná hodnota, abychom tok zvìt¹ili, ale nepøekroèili kapacitu ani jedné z~hran cesty $P$) a~Kirchhoffovy zákony zùstanou neporu¹eny, nebo» zdroj a~stok nezahrnují a~ka¾dému jinému vrcholu na~cestì $P$ se~pøítok $f^+(v)$ i~odtok $f^-(v)$ zvìt¹í pøesnì o~$\epsilon$. - -\s{Otázka:} Najdeme takto ov¹em opravdu maximální tok? +\s{Pozorování:} Nìjaký tok v¾dy existuje. V libovolné síti mù¾eme v¾dy zvolit +konstantnì nulovou funkci (po~¾ádné hranì nic nepoteèe). To je korektní tok, +ale sotva u¾iteèný. Budeme chtít najít tok, který pøepraví co nejvíce tekutiny +ze~zdroje do~spotøebièe. + +\s{Definice:} {\I Velikost toku} $f$ budeme znaèit $\vert f\vert$ a polo¾íme ji +rovnou rozdílu souètu velikostí toku na~hranách vedoucích do~$s$ a~souètu velikostí +toku na~hranách vedoucích z~$s$. Neboli $\vert f\vert:=f^\Delta(s).$ + +\s{Pozorování:} Jeliko¾ sí» tìsní, mìlo by být jedno, zda velikost toku mìøíme +u~spotøebièe nebo u~zdroje. Vskutku, krátkým výpoètem ovìøíme, ¾e tomu tak je: +$$ +f^\Delta(z) - f^\Delta(s) = \sum_v f^\Delta(v) = 0. +$$ +První rovnost platí proto, ¾e podle Kirchhoffova zákona jsou zdroj a spotøebiè jediné +dva vrcholy, jejich¾ pøebytek mù¾e být nenulový. Druhou rovnost získáme tak, ¾e si +uvìdomíme, ¾e tok na ka¾dé hranì pøispìje do celkové sumy jednou s~kladným znaménkem +a jednou se záporným. Zjistili jsme tedy, ¾e pøebytek zdroje a spotøebièe se li¹í +pouze znaménkem. +\qed -\s{Odpovìï:} Nemusíme. Napø. na~obrázku je vidìt, ¾e~kdy¾ najdeme nejdøíve cestu pøes hranu s~kapacitou 1 (na obrázku tuènì) a~u¾ hodnotu toku na~této hranì nesní¾íme, tak dosáhneme velikost toku nejvý¹e 19. Ale maximální tok této sítì má velikost 20. +\s{Poznámka:} Rádi bychom nalezli v~zadané síti tok, jeho¾ velikost je maximální. +Máme ale zaruèeno, ¾e maximum bude existovat? V¹ech mo¾ných tokù je nekoneènì mnoho +a v~nekoneèné mno¾inì se mù¾e snadno stát, ¾e aèkoliv existuje supremum, není maximem +(pøíklad: $\{1-1/n \mid n\in{\bb N}^+\}$). +Odpovìï nám poskytne matematická analýza: mno¾ina v¹ech tokù je kompaktní podmno¾inou +prostoru ${\bb R}^{\vert E\vert}$, velikost toku je spojitá (dokonce lineární) funkce +z~této mno¾iny do~$\bb R$, tak¾e musí nabývat minima i maxima. + +Nám ale bude staèít studovat sítì s~racionálními kapacitami, kde existence maximálního +toku bude zjevná u¾ z~toho, ze sestrojíme algoritmus, který takový tok najde. + +\s{První pokus:} Hledejme cestu $P$ ze~$z$ do~$s$ takovou, ¾e~$\forall e \in +P: f(e) < c(e)$ (po~v¹ech jejích hranách teèe ostøe ménì, ne¾ jim dovolují +jejich kapacity). Pak zjevnì mù¾eme tok upravit tak, aby se~jeho velikost +zvìt¹ila. Zvolme $$\varepsilon := \min_{e \in P} (c(e) - f(e)).$$ Nový tok $f'$ +pak definujme jako $f'(e):=f(e) + \varepsilon$. Kapacity nepøekroèíme ($\varepsilon$ +je nejvìt¹í mo¾ná hodnota, abychom tok zvìt¹ili, ale nepøekroèili kapacitu ani +jedné z~hran cesty $P$) a~Kirchhoffovy zákony zùstanou neporu¹eny, nebo» zdroj +a~stok neomezují a~ka¾dému jinému vrcholu na~cestì $P$ se~pøítok $f^+(v)$ +i~odtok $f^-(v)$ zvìt¹í pøesnì o~$\varepsilon$. + +Opakujme tento proces tak dlouho, dokud existují zlep¹ující cesty. A¾ se algoritmus +zastaví (co¾ by obecnì nemusel, ale nás je¹tì chvíli trápit nemusí), získáme maximální tok? +Pøekvapivì nemusíme. Napø. na~obrázku je vidìt, ¾e~kdy¾ najdeme nejdøíve cestu +pøes hranu s~kapacitou 1 (na obrázku tuènì) a~u¾ hodnotu toku na~této hranì +nesní¾íme, tak dosáhneme velikost toku nejvý¹e 19. Ale maximální tok této sítì +má velikost 20. \figure{toky02.eps}{Èísla pøedstavují kapacity jednotlivých hran.}{1.5in} -Zde by ov¹em situaci zachránilo, kdybychom poslali tok velikosti 1 proti smìru prostøední hrany -- to mù¾eme udìlat tøeba odeètením jednièky od toku po smìru hrany. - -Nìkdy je tedy potøeba poslat nìco i~v~protismìru. Definujme si~{\I rezervu hrany}. Ta nám øíká, kolik mù¾eme daným smìrem je¹tì poslat. Vyu¾ijeme zde, ¾e~sí» je symetrická. +Zde by ov¹em situaci zachránilo, kdybychom poslali tok velikosti 1 proti smìru +prostøední hrany -- to mù¾eme udìlat tøeba odeètením jednièky od toku po smìru +hrany. Roz¹íøíme tedy ná¹ algoritmus tak, aby umìl posílat tok i proti smìru +hran. O~kolik mù¾eme tok hranou zlep¹it (a» u¾ pøiètením po~smìru nebo odeètením +proti smìru) nám bude øíkat její {\I rezerva:} \s{Definice:} {\I Rezerva hrany} $uv$ je $r(uv):=c(uv) - f(uv) + f(vu).$ -Uka¾me si~nyní algoritmus, který rezervy vyu¾ívá, a~doka¾me, ¾e~je koneèný a~¾e najde maximální tok ka¾dé racionální sítì. +\smallskip +Algoritmus bude vypadat následovnì. Postupnì dok¾eme, ¾e je koneèný a ¾e v~ka¾dé +síti najde maximální tok. \s{Algoritmus (Fordùv-Fulkersonùv)} \algo -\:$f \leftarrow$ libovolný tok, napø. v¹ude nulový ($\forall e \in E: f(e) \leftarrow 0 $). +\:$f \leftarrow$ libovolný tok, napø. v¹ude nulový. \:Dokud $\exists P$ cesta ze $z$ do $s$ taková, ¾e~$\forall e \in P: r(e) > 0$, opakujeme: \::$\varepsilon \leftarrow \min \{r(e) \mid e \in P\}$. \::Pro v¹echny hrany $uv \in P$: @@ -86,105 +124,144 @@ Uka \:Prohlásíme $f$ za~maximální tok. \endalgo -\s{Problém:} Zastaví se~Fordùv-Fulkersonùv algoritmus? +\s{Koneènost:} Zastaví se~Fordùv-Fulkersonùv algoritmus? \itemize\ibull -\:Pro~celoèíselné kapacity se~v~ka¾dém kroku zvìt¹í velikost toku alespoò o~1. Algoritmus se~tedy zastaví po~nejvíce tolika krocích, jako je nìjaká horní závora pro~velikost maximálního toku -- napø. souèet kapacit v¹ech hran vedoucích do~stoku $$\sum_{u:us \in E}{c(us)}.$$ -\:Pro~racionální kapacity vyu¾ijeme jednoduchý trik -- kapacity vynásobíme spoleèným jmenovatelem a~pøevedeme na~pùvodní pøípad. Uvìdomme si, ¾e~algoritmus nikde kapacity hran ale ani toky na~hranách nedìlí, tak¾e u¾ zùstanou celoèíselné. A tak jsme pøevedli racionální kapacity na~celoèíselné, pro~které u¾ víme, ¾e~se algoritmus zastaví. -\:Na~síti s~iracionálními kapacitami se~algoritmus chová mnohdy divoce, nemusí se~zastavit ale dokonce ani konvergovat ke~správnému výsledku. -\s{K zamy¹lení:} Zkuste vymyslet pøíklad takové sítì. -\endlist - -\s{Otázka:} Vydá algoritmus maximální tok? - -\s{Odpovìï:} Vydá. Abychom si~to dokázali, zaveïme si~øezy a~pou¾ijme je jako certifikát maximality nalezeného toku. - -\s{Definice:} {\I Øez} je uspoøádaná dvojice mno¾in vrcholù ($A,B$) taková, ¾e $A$ a $B$ jsou disjunktní, pokrývají v¹echny vrcholy, $A$ obsahuje zdroj a $B$ obsahuje stok. Neboli $A \cap B = \emptyset$, $A \cup B = V$, $z \in A$, $s \in B$. - -\s{Definice:} {\I Hrany øezu} $E(A,B) := E \cap A \times B$. - -\s{Poznámka:} Øezy se~dají definovat více zpùsoby, jedna z~definic je, ¾e~øez je mno¾ina hran grafu takových, ¾e~po~jejich odebrání se~graf rozpadne na~více komponent. Tuto definici splòuje i~ta na¹e, ale ne naopak. -\s{Definice:} {\I Kapacita øezu} je $$c(A,B) := \sum_{e \in E(A,B)}{c(e)}.$$ +\:Pro~celoèíselné kapacity se~v~ka¾dém kroku zvìt¹í velikost toku alespoò o~1. +Algoritmus se~tedy zastaví po~nejvíce tolika krocích, kolik je nìjaká horní +závora pro~velikost maximálního toku -- napø. souèet kapacit v¹ech hran +vedoucích do~stoku (tedy $c^+(s)$). -\s{Definice:} {\I Tok pøes øez} je $$f(A,B) := \sum_{e \in E(A,B)}{f(e)} - \sum_{e \in E(B,A)}{f(e)}.$$ +\:Pro~racionální kapacity vyu¾ijeme jednoduchý trik. Nech» $M$ je nejmen¹í +spoleèný násobek jmenovatelù v¹ech kapacit. Spustíme-li algoritmus na sí» +s~kapacitami $c'(e) = c(e)\cdot M$, bude se rozhodovat stejnì jako v~pùvodní +síti, proto¾e bude stále platit $f'(e) = f(e)\cdot M$. Nová sí» je pøitom +celoèíselná, tak¾e se algoritmus jistì zastaví. -\s{Pozorování:} Pro~ka¾dý tok $f$ a~ka¾dý øez $(A,B)$ platí, ¾e~$f(A,B) \leq c(A,B)$. +\:Na~síti s~iracionálními kapacitami se~algoritmus chová mnohdy divoce, nemusí +se~zastavit, ba ani konvergovat ke~správnému výsledku. (Zkuste vymyslet pøíklad +takové sítì.) -\proof -$$f(A,B) = \sum_{e \in (A,B)}{f(e)} - \sum_{e \in E(B,A)}{f(e)} \leq \sum_{e \in E(A,B)}{f(e)} \leq \sum_{e \in E(A,B)}{c(e)} = c(A,B).$$ -\qed - -\s{Lemmátko:} Pro~ka¾dý tok $f$ a~pro~ka¾dý øez $(A,B)$ platí $f(A,B) = \vert f \vert$. +\endlist -\proof{Indukcí a~obrázkem.} +\s{Maximalita:} Kdy¾ se algoritmus zastaví, je tok~$f$ maximální? K~tomu se +bude hodit zavést øezy. -Zaèneme s øezem ($V \setminus \{s\}, \{s\}$). Pro~tento øez lemma platí z~definice velikosti toku. Dále budu postupnì pøesouvat vrcholy z~mno¾iny $B$ do~mno¾iny $A$. Libovolný øez mù¾e být takto vytvoøen z~toho triviálního. +\s{Definice:} {\I Øez} je uspoøádaná dvojice mno¾in vrcholù ($A,B$) taková, ¾e +$A$ a $B$ jsou disjunktní, pokrývají v¹echny vrcholy, $A$ obsahuje zdroj a $B$ +obsahuje stok. Neboli $A \cap B = \emptyset$, $A \cup B = V$, $z \in A$, $s \in B$. -Pøedstavme si, ¾e~máme ji¾ libovolný øez ($A,B$) a~pøesouváme vrchol $v$ z~$A$ do~$B$. Tedy $A' = A \setminus \{v\}$ a $B' = B \cup \{v\}$. +\>Ka¾dému øezu pøirozenì pøiøadíme mno¾iny hran: +\itemize\ibull +\:$E^+(A,B) = E \cap (A\times B)$ (hrany \uv{zleva doprava}) +\:$E^-(A,B) = E \cap (B\times A)$ (hrany \uv{zprava doleva}) +\:$E^\Delta(A,B) = E^+(A,B) \cup E^-(A,B)$ (v¹echny hrany øezu) +\endlist -Uvìdomme si, ¾e~v¹echny hrany jednoho typu (napø. vedoucí z~$A$ do~$v$) se~chovají stejnì, tak¾e staèí uva¾ovat hrany pouze 4 typù (+ ostatní hrany (ty, které pøesun neovlivní) oznaèíme $\varepsilon$): +\>Také pro libovolnou funkci $f: E\rightarrow {\bb R}$ zavedeme: \itemize\ibull -\:$\alpha$ -- hrany vedoucí z~$A$ do~$v$ -\:$\beta$ -- hrany vedoucí z~$v$ do~$B$ -\:$\gamma$ -- hrany vedoucí z~$v$ do~$A$ -\:$\delta$ -- hrany vedoucí z~$B$ do~$v$ +\:$f^+(A,B) = \sum_{e\in E^+(A,B)} f(e)$ (prùtok pøes øez zleva doprava) +\:$f^-(A,B) = \sum_{e\in E^-(A,B)} f(e)$ (prùtok zprava doleva) +\:$f^\Delta(A,B) = f^+(A,B) - f^-(A,B)$ (èistý prùtok) \endlist +\>{\I Kapacita øezu} budeme øíkat souètu kapacit hran zleva doprava, tedy $c+(A,B)$. -\figure{toky03.eps}{Pøesun vrcholu $v$ z~$A$ do~$B$.}{1in} +\s{Poznámka:} Øezy se~dají definovat více zpùsoby, jedna z~definic je, ¾e~øez +je mno¾ina hran grafu takových, ¾e~po~jejich odebrání se~graf rozpadne na~více +komponent. Tuto vlastnost mají i na¹e øezy, ale opaènì to nemusí platit. -Pøed pøesunem ($v \in A$) se~$f(A,B)$ skládá z~$\varepsilon + \beta - \delta$. Po~pøesunu ($v \in B$) se~$f(A',B')$ skládá z~$\varepsilon + \alpha - \gamma$. Rozdíl tìchto hodnot je $\alpha + \delta - \beta - \gamma$. +\s{Lemma:} Pro ka¾dý øez $(A,B)$ a ka¾dý tok~$f$ platí, ¾e $f^\Delta(A,B) += \vert f\vert$. (Jinými slovy velikost toku mù¾eme mìøit na libovolném øezu, +nejen na triviálních øezech kolem zdroje nebo kolem spotøebièe.) -Nicménì z Kirchhoffova zákonu o~vrcholu $v$ (co¾ není ani zdroj ani stok) víme, ¾e~$\alpha + \delta - \beta - \gamma = f^\Delta(v) = 0$, nebo» $\alpha + \delta $ je to, co do~$v$ pøitéká, a~$\beta + \gamma$ je to, co z~$v$ vytéká. Tedy tok pøes øez pøed pøesunem je stejnì velký jako tok pøes øez po~pøesunu. Pokud lemma platilo pøed pøesunem, musí platit i~po~pøesunu. +\proof +Opìt ¹ikovným seètením pøebytkù vrcholù: +$$ +f^\Delta(A,B) = \sum_{v\in B} f^\Delta(v) = f^\Delta(s). +$$ +První rovnost získáme poèítáním pøes hrany: ka¾dá hrana vedoucí z~vrcholu v~$B$ +do~jiného vrcholu v~$B$ pøispìje jednou kladnì a jednou zápornì; hrany le¾ící +celé mimo~$B$ nepøispìjí vùbec; hrany s~jedním koncem v~$B$ a druhým mimo pøispìjí +jednou, pøièem¾ znaménko se bude li¹it podle toho, který konec je v~$B$. Druhá +rovnost je snadná: v¹echny vrcholy v~$B$ mimo spotøebièe mají podle Kirchhoffova +zákona nulový pøebytek. \qed -\s{Dùsledek:} Pro~ka¾dý tok $f$ a~øez ($A,B$) platí, ¾e~$\vert f \vert = f(A,B) \leq c(A,B)$. - -\s{Pozorování:} Pokud najdeme dvojici tok $f$ a~øez $(A,B)$ takovou, ¾e~platí $\vert f \vert = c(A,B)$, pak tok $f$ je maximální a~ øez $(A,B)$ minimální. - -\s{Vìta:} Pokud se~Fordùv-Fulkersonùv algoritmus zastaví, tak vydá maximální tok. +\s{Dùsledek:} Pro ka¾dý tok~$f$ a ka¾dý øez $(A,B)$ platí $\vert f \vert \le c^+(A,B)$. +(Velikost ka¾dého toku je shora omezena kapacitou ka¾dého øezu.) \proof +$f^\Delta(A,B) = f^+(A,B) - f^-(A,B) \le f^+(A,B) \le c^+(A,B)$. +\qed -Nech» se~Fordùv-Fulkersonùv algoritmus zastaví. Definujme $A = \{v \in V ; \exists$~cesta ze~$z$ do~$v$ jdoucí po~hranách s~$r > 0\}$ a~$B = V \setminus A$. +\s{Dùsledek:} Pokud $\vert f\vert = c^+(A,B)$, pak je tok~$f$ maximální a øez~$(A,B)$ +minimální. Jinými slovy pokud najdeme dvojici tok a stejnì velký øez, mù¾eme øez pou¾ít +jako certifikát maximality toku. Následující vìta nám zaruèí, ¾e je to mo¾né v¾dy: -Uvìdomme si, ¾e~($A,B$) je øez, nebo» $z \in A$ (ze~$z$ do~$z$ existuje cesta délky 0) a~$s \in B$ (kdyby $s \not\in B$, tak by musela existovat cesta ze~$z$ do~$s$ s~kladnou rezervou, tudí¾ by algoritmus neskonèil, nýbr¾ tuto cestu vzal a~stávající tok vylep¹il). +\s{Vìta:} Pokud se~Fordùv-Fulkersonùv algoritmus zastaví, tak vydá maximální tok. -Dále víme, ¾e~v¹echny hrany øezu mají nulovou rezervu, neboli $\forall uv \in E(A,B) : r(uv) = 0$ (kdyby mìla hrana $uv$ rezervu nenulovou, tedy kladnou, tak by vrchol $v$ patøil do~$A$). Proto po~v¹ech hranách øezu vedoucích z~$A$ do~$B$ teèe tolik, kolik jsou kapacity tìchto hran, a~po~hranách vedoucích z~$B$ do~$A$ neteèe nic, tedy $f(uv) = c(uv)$ a $f(vu) = 0$. Máme øez $(A,B)$ takový, ¾e~$f(A,B) = c(A,B)$. To znamená, ¾e~jsme na¹li maximální tok a~minimální øez. -\qed +\proof +Nech» se~Fordùv-Fulkersonùv algoritmus zastaví. Definujme mno¾inu vrcholù $A +:= \{v \in V \mid \hbox{existuje cesta ze~$z$ do~$v$ jdoucí po~hranách s~$r +> 0$}\}$ a~$B := V \setminus A$. -Zformulujme si, co jsme zjistili a~dokázali o~algoritmu pánù Forda a~Fulkersona. +Dvojice $(A,B)$ je øez, nebo» $z \in A$ (ze~$z$ do~$z$ existuje cesta délky 0) +a~$s \in B$ (kdyby $s \not\in B$, tak by musela existovat cesta ze~$z$ do~$s$ +s~kladnou rezervou, tudí¾ by algoritmus neskonèil, nýbr¾ tuto cestu vzal +a~stávající tok vylep¹il). -\s{Vìta:} Pro~sí» s~racionálními kapacitami se~Fordùv-Fulkersonùv algoritmus zastaví a~vydá maximální tok a~minimální øez. +Dále víme, ¾e~v¹echny hrany øezu mají nulovou rezervu, èili $\forall uv \in +E^+(A,B) : r(uv) = 0$ (kdyby mìla hrana $uv$ rezervu nenulovou, tedy kladnou, +tak by vrchol $v$ patøil do~$A$). Proto po~v¹ech hranách øezu vedoucích z~$A$ +do~$B$ teèe tolik, kolik jsou kapacity tìchto hran, a~po~hranách vedoucích +z~$B$ do~$A$ neteèe nic, tedy $f(uv) = c(uv)$ a $f(vu) = 0$. Máme øez $(A,B)$ +takový, ¾e~$f^\Delta(A,B) = c^+(A,B)$. To znamená, ¾e~jsme na¹li maximální tok +a~minimální øez. \qed -\s{Vìta:} (Fordova-Fulkersonova) -$$\min_{(A,B)~øez} c(A,B) = \max_{f~tok} \vert f \vert .$$ -\proof +Dokázali jsme tedy následující: -Ji¾ víme, ¾e~$\min_{(A,B)} c(A,B) \geq \max_f \vert f \vert$. Staèí tedy dokázat, ¾e~v¾dy existují tok $f$ a~øez ($A,B$) takové, ¾e~$c(A,B) = \vert f \vert$. Pro~racionální kapacity nám Fordùv-Fulkersonùv algoritmus takový tok (maximální) a~øez (minimální) vydá. Jak je to ale s~reálnými kapacitami? Vyu¾ijeme tvrzení, ¾e~maximální tok existuje v¾dy. Pak mù¾eme spustit Fordùv-Fulkersonùv algoritmus rovnou na~tento maximální tok (místo nulového). Algoritmus se~nutnì ihned zastaví, nebo» neexistuje cesta, která by mìla alespoò jednu hranu s~kladnou rezervou. A~my víme, ¾e~pokud se~algoritmus zastaví, tak vydá minimální øez. Proto i~pro sí» s~reálnými kapacitami platí, ¾e~existuje maximální tok $f$ a~minimální øez $(A,B)$ a $c(A,B) = \vert f \vert$. -\qed +\s{Vìta:} Pro~sí» s~racionálními kapacitami se~Fordùv-Fulkersonùv algoritmus +zastaví a~vydá maximální tok a~minimální øez. -\s{Vìta:} -Sí» s~celoèíselnými kapacitami má aspoò jeden z~maximálních tokù celoèíselný a~Fordùv-Fulkersonùv algoritmus takový tok najde. +\s{Vìta:} Sí» s~celoèíselnými kapacitami má aspoò jeden z~maximálních tokù +celoèíselný a~Fordùv-Fulkersonùv algoritmus takový tok najde. \proof Kdy¾ dostane Fordùv-Fulkersonùv algoritmus celoèíselnou sí», tak najde maximální tok a~ten bude zase celoèíselný (algoritmus nikde nedìlí). \qed -To, ¾e~umíme najít celoèíselné øe¹ení není úplnì samozøejmé. (U~jiných problémù takové ¹tìstí mít nebudeme.) Uka¾me si rovnou jednu aplikaci, která právì celoèíselný tok vyu¾ije. - -\s{Aplikace:} Hledání maximálního párování v~bipartitních grafech. +To, ¾e~umíme najít celoèíselné øe¹ení není úplnì samozøejmé. (U~jiných problémù takové ¹tìstí mít nebudeme.) Uka¾me si rovnou jednu aplikaci, která právì celoèíselný tok vyu¾ije. -\s{Definice:} Mno¾ina hran $F \subseteq E$ se~nazývá {\I párování}, jestli¾e ¾ádné dvì hrany této mno¾iny nemají spoleèný ani jeden vrchol. Neboli $\forall e,f \in F : e \cap f = \emptyset$. +\s{Aplikace:} Hledání nejvìt¹ího párování v~bipartitních grafech. -\s{Definice:} Párování je maximální, pokud obsahuje nejvìt¹í mo¾ný poèet hran. +\s{Definice:} Mno¾ina hran $F \subseteq E$ se~nazývá {\I párování}, jestli¾e +¾ádné dvì hrany této mno¾iny nemají spoleèný ani jeden vrchol. Neboli $\forall +e,f \in F : e \cap f = \emptyset$. {\I Velikostí} párování myslíme poèet jeho +hran. -Mìjme bipartitní graf $G = (V,E)$. V~nìm hledáme maximální párování. Sestrojme si~sí» takovou, ¾e~vezmeme vrcholy $V$ grafu $G$ a~pøidáme k~nim dva speciální vrcholy $z$ (zdroj) a~$s$ (stok) a~ze~zdroje pøidáme hrany do~v¹ech vrcholù levé partity a~ze~v¹ech vrcholù pravé partity povedeme hrany do~stoku. V¹echny kapacity nastavme na~1. Hrany bipartitního grafu zorientujme z levé partity do pravé. Nyní staèí jen na~tuto sí» spustit Fordùv-Fulkersonùv algoritmus (nebo libovolný jiný algoritmus, který najde maximální celoèíselný tok) a~a¾~dobìhne, tak prohlásit hrany s~tokem 1 za~maximální párování. +\s{Øe¹ení:} +Mìjme bipartitní graf $G = (V,E)$. V~nìm hledáme nejvìt¹í párování. Sestrojme +si~sí» takovou, ¾e~vezmeme vrcholy $V$ grafu $G$ a~pøidáme k~nim dva speciální +vrcholy $z$ (zdroj) a~$s$ (stok) a~ze~zdroje pøidáme hrany do~v¹ech vrcholù +levé partity a~ze~v¹ech vrcholù pravé partity povedeme hrany do~stoku. V¹echny +kapacity nastavme na~1. Hrany bipartitního grafu zorientujme z levé partity do +pravé. Nyní staèí jen na~tuto sí» spustit Fordùv-Fulkersonùv algoritmus (nebo +libovolný jiný algoritmus, který najde maximální celoèíselný tok) a~a¾~dobìhne, +tak prohlásit hrany s~tokem 1 za~maximální párování. \figure{toky04.eps}{Hledání maximálního párování v~bipartitním grafu.}{2in} -Existuje toti¾ bijekce mezi párováním a~celoèíselnými toky pøi~zachování velikosti. Z ka¾dého toku na~vý¹e zmínìném grafu (viz obrázek) lze sestrojit párování o~stejné velikosti (velikost toku zde odpovídá poètu hran bipartitního grafu, po~kterých poteèe 1) a~naopak. Dùle¾ité je si uvìdomit, ¾e~definice toku (omezení toku kapacitou a~Kirchhoffovy zákony) nám zaruèují, ¾e~hrany s~nenulovým tokem (tedy jednièkovým) budou tvoøit párování (nestane se, ¾e~by dvì hrany zaèínaly nebo konèily ve~stejném vrcholu, nebo» by se~nutnì poru¹ila jedna ze~dvou podmínek definice toku). Potom i~maximální tok bude odpovídat maximálnímu párování a~naopak. +Existuje toti¾ bijekce mezi párováním a~celoèíselnými toky pøi~zachování +velikosti. Z ka¾dého celoèíselného toku na~vý¹e zmínìném grafu (viz obrázek) lze sestrojit +párování o~stejné velikosti (velikost toku zde odpovídá poètu hran bipartitního +grafu, po~kterých poteèe 1) a~naopak. Dùle¾ité je si uvìdomit, ¾e~definice toku +(omezení toku kapacitou a~Kirchhoffovy zákony) nám zaruèují, ¾e~hrany +s~nenulovým tokem (tedy jednièkovým) budou tvoøit párování (nestane se, ¾e~by +dvì hrany zaèínaly nebo konèily ve~stejném vrcholu, nebo» by se~nutnì poru¹ila +jedna ze~dvou podmínek definice toku). Potom i~maximální tok bude odpovídat +maximálnímu párování a~naopak. V~bipartitním grafu najdeme maximální párování v~èase $\O(n \cdot (m+n))$. Fordùv-Fulkersonùv algoritmus stráví jednou iterací èas $\O(m+n)$ (za~prohledání do~¹íøky) a~pøi~jednotkových kapacitách bude iterací nejvý¹e~$n$, proto¾e ka¾dou se~tok zvìt¹í alespoò o~1 a v¹echny toky jsou omezené øezem kolem zdroje, který má kapacitu nejvý¹e~$n$. Výsledná èasová slo¾tost hledání maximálního párování bude tedy $\O(n \cdot (m+n))$. diff --git a/1-toky/toky03.eps b/1-toky/toky03.eps deleted file mode 100644 index cd9072e..0000000 --- a/1-toky/toky03.eps +++ /dev/null @@ -1,654 +0,0 @@ -%!PS-Adobe-3.0 EPSF-3.0 -%%Creator: inkscape 0.46 -%%Pages: 1 -%%Orientation: Portrait -%%BoundingBox: 26 2 222 159 -%%HiResBoundingBox: 26.812056 2.0383137 221.19565 158.90319 -%%EndComments -%%Page: 1 1 -0 160 translate -0.8 -0.8 scale -0 0 0 setrgbcolor -[] 0 setdash -1 setlinewidth -0 setlinejoin -0 setlinecap -gsave [1 0 0 1 0 0] concat -gsave [1.6331259 0 0 1.6331259 -86.457103 -58.067055] concat -gsave -1 1 1 setrgbcolor -newpath -105.3056 36.822422 moveto -102.40086 37.900753 99.493736 38.995078 96.727013 40.398005 curveto -94.181571 41.814326 91.822283 43.55622 89.749782 45.605514 curveto -88.111089 47.209892 86.671689 49.011105 85.314804 50.854189 curveto -83.139582 53.970058 81.184859 57.250028 79.686471 60.747956 curveto -78.129929 64.204944 77.024319 67.842231 75.898039 71.455717 curveto -75.316998 73.588972 74.899364 75.764208 74.528626 77.942042 curveto -73.692617 83.387612 73.522541 88.912205 73.649215 94.413081 curveto -73.717769 98.012392 73.905905 101.62339 74.575974 105.16738 curveto -75.277707 109.05319 76.334882 112.86428 77.429981 116.65461 curveto -78.408255 119.76383 79.494348 122.84666 80.9331 125.77631 curveto -83.013527 130.29088 85.560001 134.59225 88.553612 138.56222 curveto -90.65007 141.3925 93.082469 143.96727 95.734188 146.28172 curveto -97.375443 147.66785 99.03876 149.03673 100.87886 150.15497 curveto -105.24128 152.87403 110.24125 154.58149 115.36836 155.01664 curveto -118.10907 155.21373 120.89858 155.19458 123.58473 154.54953 curveto -125.14919 154.20441 126.64084 153.58359 128.13515 153.01599 curveto -130.41309 152.06381 132.63814 150.94134 134.66022 149.51965 curveto -136.43199 148.14419 138.00011 146.52406 139.53098 144.89107 curveto -140.77044 143.47835 141.87374 141.93663 142.79945 140.30289 curveto -143.66346 138.5645 143.46585 136.37457 142.28719 134.82838 curveto -140.71409 132.50721 138.77501 130.46144 136.93243 128.35483 curveto -135.51977 126.74917 134.15166 125.09915 132.94748 123.32948 curveto -131.52319 121.17358 130.39942 118.83615 129.45099 116.43563 curveto -128.52529 114.05627 127.78695 111.59152 127.32452 109.07814 curveto -126.98906 106.93599 126.80931 104.77007 126.557 102.61823 curveto -126.46358 99.701897 126.91728 96.807874 127.34762 93.933181 curveto -128.08122 90.495502 129.00152 87.078953 130.43738 83.861316 curveto -131.33264 81.593252 132.52109 79.463473 133.68764 77.32825 curveto -135.49922 73.872899 137.49727 70.52146 139.5389 67.198566 curveto -140.28117 65.928666 141.06314 64.667947 141.66797 63.328311 curveto -142.13152 61.96273 142.25594 60.460986 141.99885 59.041127 curveto -141.6454 57.721019 141.46342 56.331459 140.73496 55.145551 curveto -139.31758 52.221394 137.18884 49.698342 134.83307 47.485278 curveto -132.5203 45.232624 129.98063 43.211117 127.24094 41.50035 curveto -124.17293 39.494525 120.7539 37.995281 117.14666 37.2959 curveto -113.47896 36.517177 109.68828 36.374629 105.96046 36.728748 curveto -105.74217 36.759973 105.52389 36.791197 105.3056 36.822422 curveto -closepath -fill -grestore -0 0 0 setrgbcolor -[] 0 setdash -0.30000001 setlinewidth -0 setlinejoin -0 setlinecap -newpath -105.3056 36.822422 moveto -102.40086 37.900753 99.493736 38.995078 96.727013 40.398005 curveto -94.181571 41.814326 91.822283 43.55622 89.749782 45.605514 curveto -88.111089 47.209892 86.671689 49.011105 85.314804 50.854189 curveto -83.139582 53.970058 81.184859 57.250028 79.686471 60.747956 curveto -78.129929 64.204944 77.024319 67.842231 75.898039 71.455717 curveto -75.316998 73.588972 74.899364 75.764208 74.528626 77.942042 curveto -73.692617 83.387612 73.522541 88.912205 73.649215 94.413081 curveto -73.717769 98.012392 73.905905 101.62339 74.575974 105.16738 curveto -75.277707 109.05319 76.334882 112.86428 77.429981 116.65461 curveto -78.408255 119.76383 79.494348 122.84666 80.9331 125.77631 curveto -83.013527 130.29088 85.560001 134.59225 88.553612 138.56222 curveto -90.65007 141.3925 93.082469 143.96727 95.734188 146.28172 curveto -97.375443 147.66785 99.03876 149.03673 100.87886 150.15497 curveto -105.24128 152.87403 110.24125 154.58149 115.36836 155.01664 curveto -118.10907 155.21373 120.89858 155.19458 123.58473 154.54953 curveto -125.14919 154.20441 126.64084 153.58359 128.13515 153.01599 curveto -130.41309 152.06381 132.63814 150.94134 134.66022 149.51965 curveto -136.43199 148.14419 138.00011 146.52406 139.53098 144.89107 curveto -140.77044 143.47835 141.87374 141.93663 142.79945 140.30289 curveto -143.66346 138.5645 143.46585 136.37457 142.28719 134.82838 curveto -140.71409 132.50721 138.77501 130.46144 136.93243 128.35483 curveto -135.51977 126.74917 134.15166 125.09915 132.94748 123.32948 curveto -131.52319 121.17358 130.39942 118.83615 129.45099 116.43563 curveto -128.52529 114.05627 127.78695 111.59152 127.32452 109.07814 curveto -126.98906 106.93599 126.80931 104.77007 126.557 102.61823 curveto -126.46358 99.701897 126.91728 96.807874 127.34762 93.933181 curveto -128.08122 90.495502 129.00152 87.078953 130.43738 83.861316 curveto -131.33264 81.593252 132.52109 79.463473 133.68764 77.32825 curveto -135.49922 73.872899 137.49727 70.52146 139.5389 67.198566 curveto -140.28117 65.928666 141.06314 64.667947 141.66797 63.328311 curveto -142.13152 61.96273 142.25594 60.460986 141.99885 59.041127 curveto -141.6454 57.721019 141.46342 56.331459 140.73496 55.145551 curveto -139.31758 52.221394 137.18884 49.698342 134.83307 47.485278 curveto -132.5203 45.232624 129.98063 43.211117 127.24094 41.50035 curveto -124.17293 39.494525 120.7539 37.995281 117.14666 37.2959 curveto -113.47896 36.517177 109.68828 36.374629 105.96046 36.728748 curveto -105.74217 36.759973 105.52389 36.791197 105.3056 36.822422 curveto -closepath -stroke -gsave -1 1 1 setrgbcolor -newpath -190.50356 38.030829 moveto -193.40624 39.114713 196.31126 40.214595 199.07529 41.622811 curveto -201.61801 43.043996 203.97397 44.790398 206.04255 46.843653 curveto -207.67816 48.45116 209.11412 50.255123 210.46748 52.100798 curveto -212.63674 55.220822 214.58519 58.504524 216.07687 62.005311 curveto -217.62681 65.465269 218.72546 69.104665 219.84483 72.720298 curveto -220.4218 74.85466 220.83526 77.030691 221.20184 79.209229 curveto -222.02743 84.656388 222.18694 90.181295 222.04974 95.68192 curveto -221.97431 99.281089 221.77927 102.89172 221.10242 106.43442 curveto -220.39326 110.31889 219.3288 114.12795 218.22646 117.91618 curveto -217.24223 121.02351 216.15026 124.10426 214.7059 127.03117 curveto -212.61684 131.54175 210.06216 135.83823 207.06094 139.80248 curveto -204.95909 142.62874 202.52176 145.19885 199.86563 147.50823 curveto -198.22172 148.89122 196.5558 150.25692 194.71355 151.37164 curveto -190.34594 154.08234 185.34273 155.78024 180.21479 156.20558 curveto -177.4737 156.39744 174.68425 156.37296 171.99933 155.72276 curveto -170.43553 155.37465 168.94507 154.75099 167.45185 154.18052 curveto -165.17573 153.22399 162.95284 152.09727 160.93349 150.67171 curveto -159.16434 149.29288 157.59932 147.66975 156.07157 146.03383 curveto -154.83482 144.61874 153.73448 143.07491 152.81188 141.4394 curveto -151.95121 139.69937 152.153 137.50982 153.33462 135.96589 curveto -154.91215 133.64772 156.85514 131.60567 158.70175 129.50259 curveto -160.11747 127.89963 161.48874 126.25223 162.6963 124.48487 curveto -164.12471 122.3317 165.25294 119.99642 166.20596 117.59772 curveto -167.13621 115.22013 167.87927 112.7568 168.3465 110.2443 curveto -168.68605 108.1028 168.86994 105.93722 169.12637 103.78587 curveto -169.22537 100.86973 168.77721 97.974844 168.35236 95.099333 curveto -167.62533 91.660258 166.71157 88.241954 165.28186 85.021577 curveto -164.39094 82.751806 163.20657 80.619758 162.0441 78.482308 curveto -160.23914 75.023499 158.2475 71.668246 156.21223 68.341454 curveto -155.47239 67.070136 154.69283 65.807924 154.09056 64.467134 curveto -153.62963 63.100669 153.50807 61.598689 153.76789 60.179325 curveto -154.12385 58.859896 154.30849 57.470686 155.03922 56.286172 curveto -156.46219 53.364732 158.59575 50.845755 160.95575 48.6372 curveto -163.27282 46.388972 165.81635 44.372325 168.55931 42.666801 curveto -171.63115 40.666846 175.05304 39.174143 178.66161 38.481662 curveto -182.3308 37.709955 186.12174 37.574655 189.84888 37.935903 curveto -190.06711 37.967545 190.28532 37.999186 190.50356 38.030829 curveto -closepath -fill -grestore -0 0 0 setrgbcolor -[] 0 setdash -0.30000001 setlinewidth -0 setlinejoin -0 setlinecap -newpath -190.50356 38.030829 moveto -193.40624 39.114713 196.31126 40.214595 199.07529 41.622811 curveto -201.61801 43.043996 203.97397 44.790398 206.04255 46.843653 curveto -207.67816 48.45116 209.11412 50.255123 210.46748 52.100798 curveto -212.63674 55.220822 214.58519 58.504524 216.07687 62.005311 curveto -217.62681 65.465269 218.72546 69.104665 219.84483 72.720298 curveto -220.4218 74.85466 220.83526 77.030691 221.20184 79.209229 curveto -222.02743 84.656388 222.18694 90.181295 222.04974 95.68192 curveto -221.97431 99.281089 221.77927 102.89172 221.10242 106.43442 curveto -220.39326 110.31889 219.3288 114.12795 218.22646 117.91618 curveto -217.24223 121.02351 216.15026 124.10426 214.7059 127.03117 curveto -212.61684 131.54175 210.06216 135.83823 207.06094 139.80248 curveto -204.95909 142.62874 202.52176 145.19885 199.86563 147.50823 curveto -198.22172 148.89122 196.5558 150.25692 194.71355 151.37164 curveto -190.34594 154.08234 185.34273 155.78024 180.21479 156.20558 curveto -177.4737 156.39744 174.68425 156.37296 171.99933 155.72276 curveto -170.43553 155.37465 168.94507 154.75099 167.45185 154.18052 curveto -165.17573 153.22399 162.95284 152.09727 160.93349 150.67171 curveto -159.16434 149.29288 157.59932 147.66975 156.07157 146.03383 curveto -154.83482 144.61874 153.73448 143.07491 152.81188 141.4394 curveto -151.95121 139.69937 152.153 137.50982 153.33462 135.96589 curveto -154.91215 133.64772 156.85514 131.60567 158.70175 129.50259 curveto -160.11747 127.89963 161.48874 126.25223 162.6963 124.48487 curveto -164.12471 122.3317 165.25294 119.99642 166.20596 117.59772 curveto -167.13621 115.22013 167.87927 112.7568 168.3465 110.2443 curveto -168.68605 108.1028 168.86994 105.93722 169.12637 103.78587 curveto -169.22537 100.86973 168.77721 97.974844 168.35236 95.099333 curveto -167.62533 91.660258 166.71157 88.241954 165.28186 85.021577 curveto -164.39094 82.751806 163.20657 80.619758 162.0441 78.482308 curveto -160.23914 75.023499 158.2475 71.668246 156.21223 68.341454 curveto -155.47239 67.070136 154.69283 65.807924 154.09056 64.467134 curveto -153.62963 63.100669 153.50807 61.598689 153.76789 60.179325 curveto -154.12385 58.859896 154.30849 57.470686 155.03922 56.286172 curveto -156.46219 53.364732 158.59575 50.845755 160.95575 48.6372 curveto -163.27282 46.388972 165.81635 44.372325 168.55931 42.666801 curveto -171.63115 40.666846 175.05304 39.174143 178.66161 38.481662 curveto -182.3308 37.709955 186.12174 37.574655 189.84888 37.935903 curveto -190.06711 37.967545 190.28532 37.999186 190.50356 38.030829 curveto -closepath -stroke -gsave [0.7383774 0 0 0.7383774 39.885612 27.021429] concat -gsave -0 0 0 setrgbcolor -newpath -148.17814 95.546562 moveto -148.17814 96.887453 147.08988 97.975712 145.74899 97.975712 curveto -144.4081 97.975712 143.31984 96.887453 143.31984 95.546562 curveto -143.31984 94.205671 144.4081 93.117412 145.74899 93.117412 curveto -147.08988 93.117412 148.17814 94.205671 148.17814 95.546562 curveto -closepath -fill -grestore -0 0 0 setrgbcolor -[] 0 setdash -0.30000001 setlinewidth -0 setlinejoin -0 setlinecap -newpath -148.17814 95.546562 moveto -148.17814 96.887453 147.08988 97.975712 145.74899 97.975712 curveto -144.4081 97.975712 143.31984 96.887453 143.31984 95.546562 curveto -143.31984 94.205671 144.4081 93.117412 145.74899 93.117412 curveto -147.08988 93.117412 148.17814 94.205671 148.17814 95.546562 curveto -closepath -stroke -grestore -0 0 0 setrgbcolor -[] 0 setdash -0.40000001 setlinewidth -0 setlinejoin -0 setlinecap -newpath -113.36032 116.8691 moveto -143.04993 99.865047 lineto -stroke -gsave [0.27768232 -0.15903627 0.15903627 0.27768232 116.83135 114.88115] concat -gsave -0 0 0 setrgbcolor -newpath -0 0 moveto -5 -5 lineto --12.5 0 lineto -5 5 lineto -0 0 lineto -closepath -eofill -grestore -0 0 0 setrgbcolor -[] 0 setdash -1.25 setlinewidth -0 setlinejoin -0 setlinecap -newpath -0 0 moveto -5 -5 lineto --12.5 0 lineto -5 5 lineto -0 0 lineto -closepath -stroke -grestore -0 0 0 setrgbcolor -[] 0 setdash -1 setlinewidth -0 setlinejoin -0 setlinecap -newpath -143.4824 95.835934 moveto -143.4824 95.835934 lineto -stroke -0 0 0 setrgbcolor -[] 0 setdash -0.40000001 setlinewidth -0 setlinejoin -0 setlinecap -newpath -151.95681 95.681513 moveto -181.64642 78.677461 lineto -stroke -gsave [-0.27768232 0.15903626 -0.15903626 -0.27768232 178.17539 80.665414] concat -gsave -0 0 0 setrgbcolor -newpath -0 0 moveto -5 -5 lineto --12.5 0 lineto -5 5 lineto -0 0 lineto -closepath -eofill -grestore -0 0 0 setrgbcolor -[] 0 setdash -1.25 setlinewidth -0 setlinejoin -0 setlinecap -newpath -0 0 moveto -5 -5 lineto --12.5 0 lineto -5 5 lineto -0 0 lineto -closepath -stroke -grestore -0 0 0 setrgbcolor -[] 0 setdash -0.40000001 setlinewidth -0 setlinejoin -0 setlinecap -newpath -181.91633 117.54386 moveto -152.22672 100.53981 lineto -stroke -gsave [0.27768233 0.15903625 -0.15903625 0.27768233 155.69775 102.52776] concat -gsave -0 0 0 setrgbcolor -newpath -0 0 moveto -5 -5 lineto --12.5 0 lineto -5 5 lineto -0 0 lineto -closepath -eofill -grestore -0 0 0 setrgbcolor -[] 0 setdash -1.25 setlinewidth -0 setlinejoin -0 setlinecap -newpath -0 0 moveto -5 -5 lineto --12.5 0 lineto -5 5 lineto -0 0 lineto -closepath -stroke -grestore -0 0 0 setrgbcolor -[] 0 setdash -0.40000001 setlinewidth -0 setlinejoin -0 setlinecap -newpath -143.31985 94.601892 moveto -113.63024 77.597842 lineto -stroke -gsave [-0.27768233 -0.15903625 0.15903625 -0.27768233 139.84882 92.613939] concat -gsave -0 0 0 setrgbcolor -newpath -0 0 moveto -5 -5 lineto --12.5 0 lineto -5 5 lineto -0 0 lineto -closepath -eofill -grestore -0 0 0 setrgbcolor -[] 0 setdash -1.25 setlinewidth -0 setlinejoin -0 setlinecap -newpath -0 0 moveto -5 -5 lineto --12.5 0 lineto -5 5 lineto -0 0 lineto -closepath -stroke -grestore -gsave -0 0 0 setrgbcolor -newpath -116.35625 59.344904 moveto -116.35625 59.792904 lineto -109.46825 59.792904 lineto -109.46825 59.344904 lineto -110.36424 59.251571 110.95224 59.111571 111.23225 58.924904 curveto -111.51224 58.738238 111.65224 58.383572 111.65225 57.860904 curveto -111.65224 57.711573 111.63357 57.468906 111.59625 57.132904 curveto -111.03625 53.464904 lineto -104.87625 53.464904 lineto -103.28025 56.628904 lineto -102.90691 57.375573 102.72024 57.954239 102.72025 58.364904 curveto -102.72024 58.719572 102.81358 58.952905 103.00025 59.064904 curveto -103.20558 59.176905 103.66291 59.270238 104.37225 59.344904 curveto -104.37225 59.792904 lineto -99.136247 59.792904 lineto -99.136247 59.344904 lineto -99.714915 59.232904 100.19091 58.952905 100.56425 58.504904 curveto -100.95625 58.056906 101.68425 56.91824 102.74825 55.088904 curveto -110.86825 41.088904 lineto -111.59625 41.088904 lineto -114.22825 56.936904 lineto -114.4149 57.963572 114.62023 58.607572 114.84425 58.868904 curveto -115.06823 59.111571 115.57223 59.270238 116.35625 59.344904 curveto -105.46425 52.456904 moveto -110.89625 52.456904 lineto -109.66425 45.176904 lineto -105.46425 52.456904 lineto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -191.403 49.958793 moveto -191.94433 50.182802 192.38299 50.397469 192.719 50.602793 curveto -193.05499 50.789468 193.40966 51.050801 193.783 51.386793 curveto -194.17499 51.704134 194.46432 52.096134 194.651 52.562793 curveto -194.83766 53.029466 194.93099 53.570799 194.931 54.186793 curveto -194.93099 55.84813 194.24032 57.201462 192.859 58.246793 curveto -191.49633 59.27346 189.71366 59.786793 187.511 59.786793 curveto -179.615 59.786793 lineto -179.615 59.338793 lineto -180.41767 59.18946 180.94034 59.012127 181.183 58.806793 curveto -181.42567 58.582794 181.659 58.069461 181.883 57.266793 curveto -185.327 44.890793 lineto -185.53233 44.181475 185.635 43.584142 185.635 43.098793 curveto -185.635 42.70681 185.48567 42.436143 185.187 42.286793 curveto -184.907 42.137477 184.33767 42.025477 183.479 41.950793 curveto -183.479 41.502793 lineto -190.703 41.502793 lineto -192.51366 41.502811 193.89499 41.857477 194.847 42.566793 curveto -195.81766 43.276143 196.30299 44.293475 196.303 45.618793 curveto -196.30299 46.16014 196.20032 46.654806 195.995 47.102793 curveto -195.80832 47.550805 195.56566 47.914805 195.267 48.194793 curveto -194.96832 48.474804 194.63232 48.736137 194.259 48.978793 curveto -193.88566 49.202803 193.51232 49.370803 193.139 49.482793 curveto -192.78432 49.594803 192.44833 49.69747 192.131 49.790793 curveto -191.81366 49.884136 191.57099 49.940136 191.403 49.958793 curveto -186.503 50.518793 moveto -186.18566 51.769467 185.87767 52.889466 185.579 53.878793 curveto -185.299 54.868131 185.103 55.54013 184.991 55.894793 curveto -184.879 56.249463 184.78567 56.576129 184.711 56.874793 curveto -184.655 57.173462 184.627 57.472128 184.627 57.770793 curveto -184.627 58.554794 185.22433 58.946794 186.419 58.946793 curveto -188.11766 58.946794 189.45233 58.517461 190.423 57.658793 curveto -191.41233 56.781462 191.90699 55.586797 191.907 54.074793 curveto -191.90699 53.309466 191.73899 52.6468 191.403 52.086793 curveto -191.08566 51.508134 190.63766 51.097468 190.059 50.854793 curveto -189.49899 50.630802 188.31366 50.518802 186.503 50.518793 curveto -188.603 43.126793 moveto -186.783 49.622793 lineto -189.135 49.622803 190.74033 49.370803 191.599 48.866793 curveto -192.84966 48.176138 193.47499 47.009472 193.475 45.366793 curveto -193.47499 44.340142 193.20432 43.584142 192.663 43.098793 curveto -192.14033 42.59481 191.31899 42.34281 190.199 42.342793 curveto -189.65766 42.34281 189.275 42.39881 189.051 42.510793 curveto -188.84566 42.604143 188.69633 42.809476 188.603 43.126793 curveto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -131.85129 68.737501 moveto -131.13128 70.44951 130.49928 71.809508 129.95529 72.817501 curveto -129.41128 73.809506 129.01128 74.489506 128.75529 74.857501 curveto -128.51528 75.225505 128.33928 75.585505 128.22729 75.937501 curveto -128.21128 76.001504 128.20328 76.097504 128.20329 76.225501 curveto -128.20328 76.577504 128.29128 76.969503 128.46729 77.401501 curveto -128.65928 77.833502 128.90728 78.049502 129.21129 78.049501 curveto -129.48328 78.049502 129.72328 77.945502 129.93129 77.737501 curveto -130.15528 77.529503 130.30728 77.281503 130.38729 76.993501 curveto -130.84329 76.993501 lineto -130.34728 78.865501 129.65928 79.8015 128.77929 79.801501 curveto -127.93128 79.8015 127.50728 79.137501 127.50729 77.809501 curveto -127.50728 77.473503 127.52328 77.113503 127.55529 76.729501 curveto -127.50729 76.729501 lineto -126.96328 77.593503 126.22729 78.321502 125.29929 78.913501 curveto -124.38729 79.505501 123.44329 79.8015 122.46729 79.801501 curveto -121.33129 79.8015 120.45129 79.441501 119.82729 78.721501 curveto -119.20329 77.985502 118.89129 77.041503 118.89129 75.889501 curveto -118.89129 74.753505 119.18729 73.617506 119.77929 72.481501 curveto -120.37129 71.345509 121.18729 70.40151 122.22729 69.649501 curveto -123.26729 68.881511 124.36329 68.497512 125.51529 68.497501 curveto -126.44329 68.497512 127.10728 68.817511 127.50729 69.457501 curveto -127.92328 70.08151 128.13128 70.865509 128.13129 71.809501 curveto -128.13128 71.969508 128.11528 72.225508 128.08329 72.577501 curveto -128.13129 72.577501 lineto -129.83529 68.737501 lineto -131.85129 68.737501 lineto -127.50729 72.025501 moveto -127.50728 70.13751 126.81928 69.193511 125.44329 69.193501 curveto -124.57929 69.193511 123.78729 69.64951 123.06729 70.561501 curveto -122.36329 71.473509 121.83529 72.481508 121.48329 73.585501 curveto -121.14729 74.673505 120.97929 75.633504 120.97929 76.465501 curveto -120.97929 78.225502 121.65129 79.105501 122.99529 79.105501 curveto -123.87529 79.105501 124.67529 78.673501 125.39529 77.809501 curveto -126.13129 76.929503 126.66728 75.961504 127.00329 74.905501 curveto -127.33928 73.833506 127.50728 72.873507 127.50729 72.025501 curveto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -179.40752 73.544226 moveto -179.40751 73.848232 179.35151 74.224231 179.23952 74.672226 curveto -179.14351 75.12023 178.95151 75.63223 178.66352 76.208226 curveto -178.39151 76.784229 178.04751 77.320228 177.63152 77.816226 curveto -177.23151 78.296227 176.67951 78.704227 175.97552 79.040226 curveto -175.27151 79.376226 174.48751 79.544226 173.62352 79.544226 curveto -172.95151 79.544226 172.37551 79.376226 171.89552 79.040226 curveto -171.41551 78.688227 171.17551 78.200227 171.17552 77.576226 curveto -171.17552 77.408226 lineto -171.87152 77.408226 lineto -171.85551 77.456228 171.84751 77.520228 171.84752 77.600226 curveto -171.84751 77.984228 172.03151 78.312227 172.39952 78.584226 curveto -172.76751 78.856227 173.15951 78.992227 173.57552 78.992226 curveto -174.59951 78.992227 175.46351 78.376227 176.16752 77.144226 curveto -176.88751 75.89623 177.24751 74.640231 177.24752 73.376226 curveto -177.24751 72.560233 177.09551 71.880234 176.79152 71.336226 curveto -176.48751 70.776235 175.99951 70.496235 175.32752 70.496226 curveto -175.11951 70.496235 174.84751 70.560235 174.51152 70.688226 curveto -174.17551 70.816235 173.94351 70.880235 173.81552 70.880226 curveto -173.41551 70.880235 173.21551 70.704235 173.21552 70.352226 curveto -173.21551 70.000236 173.32751 69.752236 173.55152 69.608226 curveto -173.77551 69.464236 173.97551 69.392236 174.15152 69.392226 curveto -174.32751 69.392236 174.56751 69.464236 174.87152 69.608226 curveto -175.17551 69.752236 175.39151 69.824236 175.51952 69.824226 curveto -176.19151 69.824236 176.78351 69.384236 177.29552 68.504226 curveto -177.80751 67.608238 178.06351 66.752239 178.06352 65.936226 curveto -178.06351 65.31224 177.90351 64.808241 177.58352 64.424226 curveto -177.27951 64.024242 176.80751 63.824242 176.16752 63.824226 curveto -174.40751 63.824242 173.21551 65.26424 172.59152 68.144226 curveto -169.03952 84.176226 lineto -167.07152 84.176226 lineto -170.23952 69.848226 lineto -170.43151 69.000237 170.68751 68.208237 171.00752 67.472226 curveto -171.32751 66.736239 171.73551 66.03224 172.23152 65.360226 curveto -172.72751 64.672241 173.34351 64.136241 174.07952 63.752226 curveto -174.83151 63.352242 175.66351 63.152242 176.57552 63.152226 curveto -177.58351 63.152242 178.41551 63.376242 179.07152 63.824226 curveto -179.72751 64.272241 180.0555 64.928241 180.05552 65.792226 curveto -180.0555 66.896239 179.63951 67.808238 178.80752 68.528226 curveto -177.99151 69.232236 177.01551 69.768236 175.87952 70.136226 curveto -176.98351 70.280235 177.84751 70.640235 178.47152 71.216226 curveto -179.09551 71.792234 179.40751 72.568233 179.40752 73.544226 curveto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -115.79613 110.12297 moveto -115.79613 109.45097 116.01213 108.69897 116.44413 107.86697 curveto -116.87613 107.03497 117.30813 106.25897 117.74013 105.53897 curveto -118.17213 104.81897 118.38813 104.25897 118.38813 103.85897 curveto -118.38813 103.47497 lineto -118.38813 102.99497 118.35613 102.45097 118.29213 101.84297 curveto -118.24413 101.23498 118.15613 100.53098 118.02813 99.730971 curveto -117.90013 98.930978 117.67613 98.266978 117.35613 97.738971 curveto -117.05213 97.210979 116.68413 96.94698 116.25213 96.946971 curveto -115.88413 96.94698 115.56413 97.10698 115.29213 97.426971 curveto -115.03613 97.730979 114.86013 98.082979 114.76413 98.482971 curveto -114.30813 98.482971 lineto -114.93213 95.986981 115.84413 94.738982 117.04413 94.738971 curveto -118.30813 94.738982 118.94013 96.76298 118.94013 100.81097 curveto -118.94013 101.29098 118.93213 101.86697 118.91613 102.53897 curveto -118.90013 103.21097 118.89213 103.59497 118.89213 103.69097 curveto -118.94013 103.69097 lineto -119.67613 102.66697 120.30812 101.70697 120.83613 100.81097 curveto -121.38012 99.914977 121.74812 99.258977 121.94013 98.842971 curveto -122.14812 98.426978 122.38812 97.882979 122.66013 97.210971 curveto -122.93212 96.53898 123.10012 96.138981 123.16413 96.010971 curveto -123.56412 95.162982 124.13212 94.738982 124.86813 94.738971 curveto -125.34812 94.738982 125.58812 95.002982 125.58813 95.530971 curveto -125.58812 96.074981 125.04412 97.02698 123.95613 98.386971 curveto -122.88412 99.746977 121.78812 101.05098 120.66813 102.29897 curveto -119.54813 103.54697 118.95613 104.28297 118.89213 104.50697 curveto -118.82813 104.74697 118.77213 105.17097 118.72413 105.77897 curveto -118.69213 106.37097 118.65213 106.95497 118.60413 107.53097 curveto -118.55613 108.10697 118.46813 108.68297 118.34013 109.25897 curveto -118.22813 109.83497 118.02013 110.29897 117.71613 110.65097 curveto -117.42813 111.00297 117.05213 111.17897 116.58813 111.17897 curveto -116.06013 111.17897 115.79613 110.82697 115.79613 110.12297 curveto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -180.1485 111.17118 moveto -178.90049 111.17118 177.90049 110.83518 177.1485 110.16318 curveto -176.3965 109.49118 176.0205 108.57119 176.0205 107.40318 curveto -176.0205 105.78719 176.6525 104.35519 177.9165 103.10718 curveto -179.19649 101.84319 180.67649 101.21119 182.3565 101.21118 curveto -182.80449 101.21119 183.26849 101.27519 183.7485 101.40318 curveto -183.7965 101.35518 lineto -183.66849 101.25919 183.22049 100.97119 182.4525 100.49118 curveto -181.68449 100.01119 181.11649 99.571194 180.7485 99.171183 curveto -180.39649 98.755195 180.22049 98.291196 180.2205 97.779183 curveto -180.22049 96.947197 180.56449 96.243198 181.2525 95.667183 curveto -181.95649 95.075199 182.74049 94.779199 183.6045 94.779183 curveto -184.45249 94.779199 185.15649 95.051199 185.7165 95.595183 curveto -186.29249 96.123198 186.62049 96.787197 186.7005 97.587183 curveto -186.0765 97.587183 lineto -185.98049 96.947197 185.70049 96.411197 185.2365 95.979183 curveto -184.78849 95.547198 184.22849 95.331198 183.5565 95.331183 curveto -183.09249 95.331198 182.64449 95.475198 182.2125 95.763183 curveto -181.79649 96.035198 181.58849 96.387197 181.5885 96.819183 curveto -181.58849 97.107197 181.78049 97.427196 182.1645 97.779183 curveto -182.54849 98.115196 183.01249 98.475195 183.5565 98.859183 curveto -184.11649 99.243195 184.66849 99.667194 185.2125 100.13118 curveto -185.75649 100.59519 186.22049 101.17919 186.6045 101.88318 curveto -186.98848 102.58719 187.18048 103.34719 187.1805 104.16318 curveto -187.18048 105.98719 186.47649 107.61119 185.0685 109.03518 curveto -183.67649 110.45918 182.03649 111.17118 180.1485 111.17118 curveto -184.8525 104.47518 moveto -184.85249 102.74719 184.06849 101.88319 182.5005 101.88318 curveto -181.54049 101.88319 180.72449 102.19519 180.0525 102.81918 curveto -179.38049 103.44319 178.90849 104.17119 178.6365 105.00318 curveto -178.38049 105.81919 178.25249 106.67519 178.2525 107.57118 curveto -178.25249 109.52318 179.02849 110.49918 180.5805 110.49918 curveto -181.47649 110.49918 182.26049 110.14718 182.9325 109.44318 curveto -183.62049 108.73919 184.10849 107.94719 184.3965 107.06718 curveto -184.70049 106.17119 184.85249 105.30719 184.8525 104.47518 curveto -fill -grestore -gsave -0 0 0 setrgbcolor -newpath -151.10231 105.76539 moveto -151.1023 105.5574 150.9343 105.2934 150.59831 104.97339 curveto -150.2623 104.6534 150.0943 104.3254 150.09431 103.98939 curveto -150.0943 103.7334 150.1743 103.5334 150.33431 103.38939 curveto -150.4943 103.2454 150.7103 103.1734 150.98231 103.17339 curveto -151.3503 103.1734 151.6623 103.3174 151.91831 103.60539 curveto -152.1903 103.8774 152.3263 104.2054 152.32631 104.58939 curveto -152.3263 105.0374 152.1823 105.6134 151.89431 106.31739 curveto -151.6223 107.0054 151.2783 107.6454 150.86231 108.23739 curveto -149.6303 109.9654 148.5183 111.3894 147.52631 112.50939 curveto -146.53431 113.62939 145.88631 114.18939 145.58231 114.18939 curveto -145.43831 114.18939 145.36631 113.90939 145.36631 113.34939 curveto -145.36631 112.66139 145.31031 111.5894 145.19831 110.13339 curveto -145.08631 108.6614 144.96631 107.5094 144.83831 106.67739 curveto -144.67831 105.5734 144.50231 104.8614 144.31031 104.54139 curveto -144.11831 104.2214 143.79031 104.0614 143.32631 104.06139 curveto -143.02231 104.0614 142.78231 104.0694 142.60631 104.08539 curveto -142.60631 103.77339 lineto -143.16631 103.6774 143.65431 103.5894 144.07031 103.50939 curveto -144.48631 103.4294 144.77431 103.3654 144.93431 103.31739 curveto -145.09431 103.2694 145.23831 103.2374 145.36631 103.22139 curveto -145.49431 103.1894 145.62231 103.1734 145.75031 103.17339 curveto -146.00631 103.1734 146.26231 104.1174 146.51831 106.00539 curveto -146.79031 107.8934 146.97431 109.9174 147.07031 112.07739 curveto -147.81431 111.30939 lineto -148.6623 110.4134 149.4223 109.4054 150.09431 108.28539 curveto -150.7663 107.1494 151.1023 106.3094 151.10231 105.76539 curveto -fill -grestore -grestore -grestore -showpage -%%EOF diff --git a/1-toky/toky03.svg b/1-toky/toky03.svg deleted file mode 100644 index 8f8b389..0000000 --- a/1-toky/toky03.svg +++ /dev/null @@ -1,241 +0,0 @@ - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - A - B - α - β - γ - δ - v - - -