]> mj.ucw.cz Git - ads2.git/commitdiff
Oziven Goldberguv algoritmus
authorMartin Mares <mj@ucw.cz>
Thu, 3 Nov 2011 23:09:09 +0000 (00:09 +0100)
committerMartin Mares <mj@ucw.cz>
Thu, 3 Nov 2011 23:09:09 +0000 (00:09 +0100)
4-goldberg/4-goldberg.tex [new file with mode: 0644]
4-goldberg/Goldberg01.eps [new file with mode: 0644]
4-goldberg/Makefile [new file with mode: 0644]
old/3-goldberg/3-goldberg.tex [deleted file]
old/3-goldberg/Goldberg01.eps [deleted file]
old/3-goldberg/Makefile [deleted file]

diff --git a/4-goldberg/4-goldberg.tex b/4-goldberg/4-goldberg.tex
new file mode 100644 (file)
index 0000000..70544d4
--- /dev/null
@@ -0,0 +1,283 @@
+\input lecnotes.tex
+
+\prednaska{3}{Goldbergùv algoritmus}{(zapsala Markéta Popelová)}
+
+Pøedstavíme si~nový algoritmus pro~hledání maximálního toku v~síti, který se~uká¾e být stejnì dobrý jako {\I Dinicùv algoritmus} ($\O(MN^{2})$) a~po~nìkolika vylep¹eních bude i~lep¹í. Nejdøíve si~pøipomeòme definice, které budeme potøebovat:
+
+\s{Definice:} Mìjme sí» $S=(V,E,z,s,c)$, tok~$f$ a~libovolný vrchol~$v$. Pak $f^{\Delta}(v)$ nazýváme {\I pøebytek} ve~vrcholu~$v$ a~definujeme ho takto: $$f^{\Delta}(v):=\sum_{uv \in E}{f(uv)} - \sum_{vu \in E}{f(vu)}.$$ Pøebytek ve~vrcholu~$v$ je tedy souèet v¹eho, co do~vrcholu~$v$ pøiteèe, minus souèet v¹eho, co z~$v$ odteèe.
+
+\s{Definice:} Dále pro~libovolnou hranu~$uv \in E$ definujeme její {\I rezervu} následovnì:
+$$r(uv) = c(uv) - f(uv) + f(vu).$$ Rezerva hrany znaèí, co je¹tì je mo¾no po~této hranì poslat.
+
+\s{Poznámka:} Dále budeme oznaèovat písmenem~$N$ poèet vrcholù a~$M$ poèet hran, tedy~$N = \vert V \vert$ a~$M = \vert E \vert$.
+
+Goldbergùv algoritmus na~rozdíl od~Dinicova algoritmu zaèíná s~ohodnocením hran, které pravdìpodobnì není tokem (budeme ho nazývat {\I vlna}), a~postupnì ho zmen¹uje a¾ na~korektní tok.
+
+\s{Definice:} Funkce $f:E \rightarrow {\bb R}_{0}^{+}$ je {\I vlna} v~síti~$(V, E, z, s, c)$ tehdy, kdy¾ jsou splnìny následující dvì podmínky:
+       \numlist\ndotted
+       \:$\forall e \in E : f(e) \leq c(e)$ (vlna na hranì nepøekroèí kapacitu hrany)
+       \:$ \forall v \in V \setminus \{z, s\} : f^{\Delta}(v) \geq 0$ (pøebytek ve vrcholu je nezáporný).
+       \endlist
+
+\s{Pozorování:} Ka¾dý tok~$f$ je také vlna, ale opaènì to obvykle platit nemusí.
+
+\s{Operace:} {\I Pøevedení pøebytku}
+
+Algoritmus bude potøebovat pøevádìt pøebytky z~vrcholu~$u$ na~sousední vrchol~$v$. Mìjme hranu~$uv$ s~kladnou rezervou $r(uv) > 0$ a~kladným pøebytkem ve~vrcholu~$u$: $f^\Delta(u) > 0$. Èást pøebytku budeme chtít poslat z~vrcholu~$u$ do~vrcholu~$v$. Vezmeme $\delta := \min (f^\Delta(u), r(uv))$ a~po~hranì~$uv$ po¹leme tok o velikosti~$\delta$. Výsledná situace bude vypadat následovnì:
+       \itemize\ibull
+       \:$f'^\Delta(u) = f^\Delta(u) - \delta$.
+       \:$f'^\Delta(v) = f^\Delta(v) + \delta$.
+       \:$r'(uv) = r(uv) - \delta$.
+       \:$r'(vu) = r(vu) + \delta$.
+       \endlist
+       
+Kdybychom ov¹em nepøidali ¾ádnou jinou podmínku, ná¹ algoritmus by se~mohl krásnì zacyklit (napø. posílat pøebytek z~$u$ do~$v$ a~zase zpátky). Abychom se~tomu vyhnuli, zavedeme {\I vý¹ku vrcholu} $h: V \to {\bb N}$ a~dovolíme pøevádìt pøebytek pouze z~vy¹¹ího vrcholu~$u$ na~ni¾¹í $v$: $h(u) > h(v)$.
+
+\s{Shrnutí:} Podmínky pro~pøevedení pøebytku po~hranì $uv \in E$:
+       \numlist\ndotted
+       \:Ve~vrcholu~$u$ je nenulový pøebytek: $f^{\Delta}(u) > 0$.
+       \:Vrchol~$u$ je vý¹ ne¾ vrchol~$v$: $h(u) > h(v)$.
+       \:Hrana~$uv$ má nenulovou rezervu: $r(uv)>0$.
+       \endlist
+
+
+\s{Operace:} Pro~vrchol~$u \in V$ definujme {\I zvednutí vrcholu}:
+Pokud bìhem výpoètu narazíme ve~vrcholu~$u$ na~pøebytek, který nelze nikam pøevést, zvìt¹íme vý¹ku vrcholu~$u$ o~jednièku, tj. $h(u) \leftarrow h(u)+1$.
+
+
+\s{Algoritmus (Goldbergùv)}
+
+\algo
+\:$\forall v \in V: h(v)\leftarrow 0$ (v¹em vrcholùm nastavíme poèáteèní vý¹ku nula) a~$h(z)\leftarrow N$ (zdroj zvedneme do~vý¹ky~$N$).
+\:$\forall e \in E: f(e)\leftarrow 0$ (po~hranách nejdøíve nenecháme protékat nic) a~$\forall zu \in E : f(zu)\leftarrow c(zu)$ (ze~zdroje pustíme maximální mo¾nou vlnu).
+\:Dokud $\exists u \in V \setminus \{z,s\}: f^{\Delta}(u)>0$:
+\::Pokud $\exists v \in V: uv \in E,~r(uv)>0$ a~$h(u)>h(v)$, pak pøevedeme pøebytek po~hranì z~$u$ do~$v$.
+\::V~opaèném pøípadì zvedneme $u$:~$h(u) \leftarrow h(u) + 1$.
+\:Vrátíme tok~$f$ jako výsledek.
+\endalgo
+
+\noindent
+Nyní bude následovat nìkolik lemmat a~invariantù, jimi¾ doká¾eme správnost a~èasovou slo¾itost Goldbergova algoritmu.
+
+\s{Invariant A (základní):}
+       \numlist \ndotted
+       \:Funkce~$f$ je v~ka¾dém kroku algoritmu vlna.
+       \:$h(v)$ nikdy neklesá pro~¾ádné~$v$.
+       \:$h(z)=N$ a~$h(s)=0$ po~celou dobu bìhu algoritmu.
+       \endlist
+
+\proof Indukcí dle poètu prùchodù cyklem (3. -- 5. krok algoritmu).
+
+Na zaèátku je v¹e v~poøádku ($f$ je nulová funkce, pøebytky v¹ech vrcholù jsou nezáporné, tedy~$f$ je vlna, $h(z)=N$ a~$h(s)=0$). V~prùbìhu se~tyto hodnoty mìní pouze pøi:
+       \itemize\ibull
+       \:Pøevedení po~hranì~$uv$: Po hranì~$uv$ se~nepo¹le více ne¾ její rezerva. Pøebytek~$u$ se~sní¾í, ale nejménì na~nulu. Pøebytek~$v$ se~zvý¹í. Tedy~$f$ zùstává vlnou. Vý¹ky se~nemìní.
+       \:Zvednutí vrcholu~$u$: Mìní pouze vý¹ky -- a~to vrcholù rùzných od zdroje èi stoku -- a~pouze se zvy¹ují.
+       \qeditem
+       \endlist
+
+\s{Invariant S (o~Spádu):} Neexistuje hrana $uv \in E: r(uv)>0$ \& $h(u) > h(v)+1$ (s~kladnou rezervou a~spádem vìt¹ím ne¾ jedna).
+
+\proof Indukcí dle bìhu algoritmu.
+
+Na zaèátku mají v¹echny hrany ze~zdroje rezervu nulovou a~v¹echny ostatní vedou mezi vrcholy s~vý¹kou 0. V~prùbìhu by se~tento invariant mohl pokazit pouze dvìma zpùsoby:
+       \itemize\ibull
+       \:Zvednutím vrcholu~$u$, ze~kterého vede hrana~$uv$ s~kladnou rezervou a~spádem 1. Tento pøípad nemù¾e nastat, nebo» hranu zvedáme pouze tehdy, kdy¾ neexistuje vrchol~$v$ takový, ¾e hrana~$uv$ má kladnou rezervu a~spád alespoò 1. Takový vrchol v~na¹em pøípadì existuje, proto se~místo zvednutí vrcholu~$u$ po¹le pøebytek po~hranì~$uv$.
+       \:Zvìt¹ením rezervy hrany se~spádem vìt¹ím ne¾ 1. Toto také nemù¾e nastat, nebo» rezervu bychom mohli zvìt¹it jedinì tak, ¾e bychom poslali nìco v~protismìru -- a~to nesmíme, jeliko¾ bychom poslali pøebytek z~ni¾¹ího vrcholu na~vy¹¹í.
+       \qeditem
+       \endlist
+
+\s{Definice:} Cestu~$P$ nazveme {\I nenasycenou}, pokud v¹echny její hrany mají kladnou rezervu. Neboli $\forall e \in P: r(e) > 0$.
+
+\s{Lemma K (o~Korektnosti):} Kdy¾ se~algoritmus zastaví, je~$f$ maximální tok.
+
+\proof Dùkaz rozlo¾me do~dvou krokù. Nejdøíve uká¾eme, ¾e~$f$ je tok, a~pak jeho maximalitu.
+
+       \numlist\ndotted
+       \:Nech» se~algoritmus zastavil. Pak nemohl existovat ¾ádný vrchol~$v$ (kromì zdroje a~stoku) s~kladným pøebytkem. Tedy $\forall v \in V~\setminus \{z,s\}: f^\Delta(v) = 0$. (Víme ji¾, ¾e~$f$ je po~celou dobu vlna, tak¾e pøebytek nemù¾e být nikdy záporný.) V~tom pøípadì splòuje~$f$ podmínky toku.
+       \:Pro spor pøedpokládejme, ¾e tok~$f$ není maximální. Pak existuje nenasycená cesta ze~zdroje do~stoku. Vezmìme si~libovolnou takovou cestu. Zdroj je stále ve~vý¹ce~$N$ a~spotøebiè ve~vý¹ce 0 (viz invariant A). Tato cesta tedy pøekonává vý¹ku~$N$, ale mù¾e mít nejvý¹e~$N-1$ hran. Proto existuje alespoò jedna hrana se~spádem alespoò 2. Tato hrana tedy nemù¾e mít kladnou rezervu (viz invariant S). Tato cesta proto nemù¾e být zlep¹ující, co¾ je spor. Tím jsme dokázali, ¾e~$f$ je nutnì maximální tok.
+       \qeditem
+       \endlist
+       
+\s{Lemma C (Cesta):} Mìjme vrchol $v \in V$. Pokud $f^{\Delta}(v) > 0$, pak existuje nenasycená cesta z~vrcholu~$v$ do~zdroje.
+
+\proof
+Pro vrchol~$v \in V$ s $f^{\Delta}(v) > 0$ definujme mno¾inu $A := \{ u \in V : \exists$ nenasycená cesta z~$v$ do~$u \}$.
+
+Seètìme pøebytky ve~v¹ech vrcholech mno¾iny~$A$. Pøebytek ka¾dého vrcholu se~spoèítá jako souèet tokù do~nìj vstupujících minus souèet tokù z~nìj vystupujících. V¹echny hrany, jejich¾ oba vrcholy le¾í v~$A$, se~jednou pøiètou a~jednou odeètou. Proto nás budou zajímat pouze hrany mezi~$A$ a~$V \setminus A$.
+
+ $$\sum_{u \in A}f^{\Delta}(u) = \underbrace{ \sum_{ab \in E \cap ( (V \setminus A) \times A )} f(ab) }\limits_{=0} -  \underbrace{ \sum_{ab \in E \cap (  A \times (V \setminus A) )} f(ab) }\limits_{\geq 0}~\leq~0.$$
+
+Uka¾me si, proè je první svorka rovna nule. Mìjme vrcholy $a \in V \setminus A$ a~$b \in A$ takové, ¾e $ab\in E$. O~nich víme, ¾e $r(ba) = 0$ (jinak by~$a$ patøilo do~$A$) $\Rightarrow f(ba) = c(ba) \Rightarrow f(ab)=0$. Proto do~$A$ nic nepøitéká.
+
+\figure{Goldberg01.eps}{Obrázek k dùkazu lemmatu C}{0.2\hsize}
+
+Proè je druhá svorka nezáporná, je zøejmé, nebo» tok na~hranì je v¾dy nezáporný a~souèet nezáporných èísel je nezáporné èíslo.
+
+Proto $\sum_{u \in A}{f^\Delta(u) \le 0}$. Zároveò v¹ak v~$A$ je aspoò jeden vrchol s~kladným pøebytkem, toti¾~$v$, proto v~$A$ musí být také vrchol se~záporným pøebytkem -- a~jediný takový je zdroj. Tím je dokázáno, ¾e $z \in A$, tedy ¾e vede nenasycená cesta z~vrcholu~$v$ do~zdroje.
+\qed
+
+\s{Invariant V (Vý¹ka):} $\forall v \in V$ platí $h(v)\leq 2N$.
+
+\proof
+Kdyby existoval vrchol~$v$ s~vý¹kou $h(v) > 2N$, tak by musel být nìkdy zvednut z~vý¹ky~$2N$. Tehdy musel mít kladný pøebytek $f^\Delta(v)>0$ (jinak by nemohl být zvednut). Dle lemmatu C musela existovat nenasycená cesta z~$v$ do~zdroje. Tato cesta mìla spád alespoò~$N$, ale mohla mít nejvý¹e~$N-1$ hran (jinak by to nebyla cesta v~síti na~$N$ vrcholech). Tudí¾ musela na~této cestì existovat hrana se~spádem alespoò 2, co¾ je spor s~invariantem S (nebo» v¹echny hrany této cesty mají z~definice nenasycené cesty kladné rezervy).
+\qed
+
+\s{Lemma Z (poèet Zvednutí):} Poèet v¹ech zvednutí je maximálnì~$2N^{2}$.
+
+\proof
+Staèí si~uvìdomit, ¾e ka¾dý vrchol mù¾eme zvednout maximálnì~$2N$-krát a~vrcholù je~$N$.
+\qed
+
+Teï nám je¹tì zbývá urèit poèet provedených pøevedení. Bude se~nám hodit, kdy¾ pøevedení rozdìlíme na~dva druhy:
+
+\s{Definice:} Øekneme, ¾e pøevedení je {\I nasycené}, pokud po~pøevodu rezerva na~hranì~$uv$ klesla na~nulu, tedy $r(uv)=0$. V~opaèném pøípadì je {\I nenasycené}, a~tehdy urèitì klesne pøebytek ve~vrcholu~$u$ na~nulu, tedy $f^{\Delta}(u) = 0$ (pøi~nasyceném pøevedení se~to~ale mù¾e stát také).
+
+\s{Lemma S (naSycená pøevedení):} Poèet v¹ech nasycených pøevedení je nejvý¹~$NM$.
+
+\proof
+Pro ka¾dou hranu~$uv$ spoèítejme poèet nasycených pøevedení (tedy takových pøevedení, ¾e po~nich klesne rezerva hrany na~nulu). Abychom dvakrát nasycenì pøevedli pøebytek (nebo jeho èást) z~vrcholu~$u$ do~vrcholu~$v$, tak jsme museli~$u$ mezitím alespoò dvakrát zvednout:
+
+Po~prvním nasyceném pøevedení z~vrcholu~$u$ do~vrcholu~$v$ se~vynulovala rezerva hrany~$uv$. Uvìdomme si, ¾e pøi~této operaci muselo být~$u$ vý¹e ne¾~$v$, a~dokonce víme, ¾e bylo vý¹e pøesnì o~1 (viz lemma~S). Po~této hranì tedy nemù¾eme u¾~nic více pøevést. Aby do¹lo k~druhému nasycenému pøevedení z~$u$ do~$v$, musíme nejprve opìt zvý¹it rezervu hrany~$uv$. Jediný zpùsob, jak toho lze dosáhnout, je pøevést èást pøebytku z~$v$ zpátky do~$u$. K~tomu se~musí~$v$ dostat (alespoò o~1) vý¹e ne¾~$u$. Po~pøelití bude rezerva~$uv$ opìt kladná. A~abychom provedli nasycené pøevedení znovu ve~smìru z~$u$ do~$v$, musíme zase~$u$ dostat (alespoò o~1) vý¹e ne¾~$v$. Proto musíme~$u$ alespoò o~2 zvednout -- nejprve na~úroveò~$v$ a~pak je¹tì o~1 vý¹e.
+
+
+Ukázali jsme si~tedy, ¾e mezi ka¾dými dvìma nasycenými pøevedeními jsme vrchol~$u$ zvedli alespoò dvakrát. Nicménì libovolnou hranu mù¾eme zvednout nejvý¹e~$2N$-krát (viz invariant V). V¹ech hran je~$M$, tudí¾ poèet v¹ech nasycených pøevedení je nejvý¹e~$NM$.
+\qed
+
+\s{Lemma N (Nenasycená pøevedení):} Poèet v¹ech nenasycených pøevedení je~$\O(N^2M)$.
+
+\proof
+Dùkaz provedeme pomocí potenciálové metody -- nadefinujme si~následující funkci jako potenciál:
+ $$ \Phi := \sum_{\scriptstyle{v: f^{\Delta}(v) > 0} \atop \scriptstyle{v \ne z,s}} h(v). $$
+Nyní se~podívejme, jak se~ná¹ potenciál bìhem algoritmu vyvíjí a~jaké má vlastnosti:
+
+       \itemize\ibull
+       \:Na poèátku je $ \Phi = 0 $.
+       \:Bìhem celého algoritmu je $ \Phi \ge 0 $, nebo» je souètem nezáporných èlenù.
+       \:Zvednutí vrcholu zvý¹í $\Phi$ o~jednièku (Aby byl vrchol zvednut, musel mít kladný pøebytek $\Rightarrow$ vrchol do~sumy ji¾ pøispíval, teï jen pøispìje èíslem o 1 vy¹¹ím.). Ji¾ víme, ¾e za~celý prùbìh algoritmu je v¹ech zvednutí maximálnì~$2N^2$, proto zvedáním vrcholù zvý¹íme potenciál dohromady nejvý¹e o~$2N^2$.
+       \:Nasycené pøevedení zvý¹í~$\Phi$ nejvý¹e o~$2N$, proto¾e buï po~pøevodu hranou~$uv$ v~$u$ zùstal nìjaký pøebytek, tak¾e se~mohl potenciál zvý¹it nejvý¹e o~$h(v) \leq 2N$, nebo je pøebytek v~$u$ po~pøevodu nulový a~potenciál se~dokonce o~jedna sní¾il. Za~celý prùbìh tak dojde k~maximálnì~$NM$ takovýmto pøevedením, díky nim¾ se~potenciál zvý¹í maximálnì o~$2N^2M$.
+       \:Koneènì kdy¾ pøevádíme po~hranì~$uv$ nenasycenì, tak od~potenciálu urèitì odeèteme vý¹ku vrcholu~$u$ (nebo» se~vynuluje pøebytek ve~vrcholu~$u$) a~mo¾ná pøièteme vý¹ku vrcholu~$v$. Jen¾e $h(v) = h(u) - 1$, a~proto nenasycené pøevedení potenciál v¾dy sní¾í alespoò o~jedna.
+       \endlist
+
+\>Z~tohoto rozboru chování potenciálu~$\Phi$ v~prùbìhu algoritmu získáváme, ¾e poèet v¹ech nenasycených pøevedení mù¾e být nejvý¹e $2N^2 + 2N^2M$, co¾ je $\O(N^2M)$.
+\qed
+
+\s{Implementace:}
+
+Budeme si~pamatovat seznam~$P$ v¹ech vrcholù~$v \ne z,s$ s~kladným pøebytkem. Neboli
+$$P = \{ v \in V \setminus \{z,s\} ~\vert~ f^{\Delta}(v) > 0 \}.$$
+Kdy¾ mìníme pøebytek nìjakého vrcholu, mù¾eme ná¹ seznam v~konstantním èase aktualizovat (napø. tak, ¾e si~ka¾dý vrchol pamatuje pozici, na~které v~seznamu~$P$ je). V~konstantním èase také umíme odpovìdìt, zda existuje nìjaký vrchol s~pøebytkem.
+
+Dále si~pro ka¾dý vrchol~$u \in V$ budeme pamatovat~$L(u)$-seznam hran~$uv \in E$ takových, které vedou dolù (mají spád alespoò 1) a~kladnou rezervu. Neboli
+$$L(u) = \{ uv \in E ~\vert~ v \in V,~ r(uv) > 0,~ h(v) < h(u)\}.$$
+Díky tomu mù¾eme pøistupovat k~patøièným sousedùm~$u$ v~èase $\O(1)$, stejnì jako pøidávat hrany do~$L(u)$, resp. je mazat. Opìt ka¾dá hrana si~bude pamatovat pozici, na~které se~nachází v~seznamu~$L$.
+
+\s{Rozbor èasové slo¾itosti algoritmu:}
+
+\numlist\ndotted
+\:Inicializace vý¹ek \dots\ $\O(N)$.
+\:Inicializace vlny~$f$ \dots\ $\O(M)$.
+\:Výbìr vrcholu~$u$ s~kladným pøebytkem -- vezmeme první vrchol v~$P$ \dots\ $\O(1)$.
+\:Výbìr vrcholu~$v$, do~kterého vede z~$u$ hrana s~kladnou rezervou a~který je ní¾e ne¾~$u$ -- vezmeme první hranu z~$L(u)$ \dots\ $\O(1)$.
+       
+       Pøevedení pøebytku: \dots\ $\O(1)$.
+               \itemize\idot
+               \:Nasycené pøevedení \dots\ $\O(1)$.
+                       \itemize\idot
+                       \:Rezerva hrany~$uv$ klesne na~nulu $\Rightarrow$ hrana~$uv$ vypadne z~$L(u)$ \dots\ $\O(1)$.
+                       \:Pøebytek vrcholu~$v$ se~zvý¹í $\Rightarrow$ pokud je¹tì nebyl v~seznamu~$P$, tak se~tam pøidá \dots\ $\O(1)$.
+                       \:Pøebytek vrcholu~$u$ mo¾ná také klesne na~nulu $\Rightarrow$ pak by vrchol~$u$ vypadnul z~$P$ \dots\ $\O(1)$.
+                       \endlist
+               \:Nenasycené pøevedení \dots\ $\O(1)$.
+                       \itemize\idot
+                       \:Rezerva hrany~$uv$ zùstane nezáporná $\Rightarrow$ hrana~$uv$ zùstane v~$L(u)$ \dots\ $\O(1)$.
+                       \:Vynuluje se~pøebytek vrcholu~$u$~$\Rightarrow$ vrchol $u$ vypadne z~$P$ \dots~$\O(1)$.
+                       \:Pøebytek vrcholu~$v$ se~zvý¹í~$\Rightarrow$ pokud je¹tì nebyl v~seznamu~$P$, tak se~tam pøidá \dots\ $\O(1)$.
+                       \endlist
+               \endlist
+\:Zvednutí vrcholu~$u$ \dots $\O(N)$.
+
+Musíme obejít v¹echny hrany do~$u$ a~z~$u$, kterých je nejvý¹e~$2N-2$, porovnat
+vý¹ky a~pøípadnì tyto hrany~$uv$ odebrat ze~seznamu~$L(v)$ resp. pøidat
+do~$L(u)$. Abychom pro~odebrání hrany~$uv$ ze~seznamu~$L(v)$ nemuseli procházet
+celý seznam, budeme si~$\forall u \in V$ pamatovat je¹tì $L^{-1}(u) := $ seznam
+ukazatelù na~hrany~$uv$ v~seznamech~$L(v)$.
+
+\endlist
+
+Vidíme, ¾e ka¾dé zvednutí je sice drahé, ale je jich zase pomìrnì málo. Naopak pøevádìní pøebytkù je èastá operace, tak¾e je výhodné, ¾e trvá konstantní èas.
+
+\s{Shrnutí:}
+
+\itemize\ibull
+\:V¹ech zvednutí je $\O(N^2)$ (viz lemma Z), ka¾dé trvá $\O(N)$ \dots\ $\O(N^3).$
+\:V¹ech nasycených pøevedení je $\O(NM)$ (viz lemma S), ka¾dé trvá $\O(1)$ \dots\ $\O(NM).$
+\:V¹ech nenasycených pøevedení je $\O(N^2M)$ (viz lemma N), ka¾dé trvá $\O(1)$ \dots\ $\O(N^2M).$
+\endlist
+
+Dohromady má tedy Goldbergùv algoritmus èasovou slo¾itost $\O(N^2M)$. Vidíme, ¾e u¾ v~tomto obecném pøípadì to není hor¹í ne¾ Dinicùv algoritmus. Pøí¹tì si~uká¾eme, ¾e mù¾e mít i~mnohem lep¹í. Nejdøíve ale zformulujme v¹echna dokázaná tvrzení do~následující vìty:
+
+\s{Vìta:} Goldbergùv algoritmus najde maximální tok v~èase $\O(N^2M)$.
+
+\s{Pozorování:} Pokud bychom volili v¾dy nejvy¹¹í z~vrcholù s~pøebytkem, tak by se~mohl algoritmus chovat lépe. Podívejme se~na~to pozornìji a~vylep¹ený Goldebrgùv algoritmus oznaème G'.
+
+\s{Algoritmus (Vylep¹ený Goldbergùv algoritmus)}
+
+\algo
+\:$\forall v \in V: h(v)\leftarrow 0$ (v¹em vrcholùm nastavíme poèáteèní vý¹ku nula) a~$h(z)\leftarrow N$ (zdroj zvedneme do~vý¹ky~$N$).
+\:$\forall e \in E: f(e)\leftarrow 0$ (po~hranách nejdøíve nenecháme protékat nic) a~$\forall zu \in E : f(zu)\leftarrow c(zu)$ (ze~zdroje pustíme maximální mo¾nou vlnu).
+\:Dokud $\exists u \in V \setminus \{z,s\}: f^{\Delta}(u)>0$:
+\::Vybereme z~vrcholù s~pøebytkem ten s~nejvy¹¹í vý¹kou, oznaèíme ho~$u$.
+\:::Pokud $\exists v \in V: uv \in E,~r(uv)>0$ a~$h(u)>h(v)$, pak pøevedeme pøebytek po~hranì z~$u$ do~$v$.
+\:::V~opaèném pøípadì zvedneme $u$:~$h(u) \leftarrow h(u) + 1$.
+\:Vrátíme tok~$f$ jako výsledek.
+\endalgo
+
+Rozmysleme si, o~kolik bude vylep¹ený algoritmus G' lep¹í ne¾ ten pùvodní. Ten pùvodní mìl èasovou slo¾itost $\O(N^2M)$ a~pøevládal èlen, který odpovídal nenasyceným pøevedením. Zkusme tedy právì poèet nenasycených pøevedení odhadnout ve~vylep¹eném algoritmu o~nìco tìsnìji.
+
+\s{Lemma N' (Nenasycená pøevedení):} Algoritmus G' provede~$\O(N^3)$ nenasycených pøevedení.
+
+\proof
+Dokazovat budeme opìt pomocí potenciálové metody. Zadefinujme si~potenciál {\I nejvy¹¹í hladinu s~pøebytkem}:
+$$H := \max \{ h(v) \mid v \neq z,s ~\&~ f^\Delta(v) > 0\}.$$
+Rozdìlíme bìh algoritmu na~{\I fáze}. Ka¾dá fáze konèí tím, ¾e~se~$H$ zmìní. Jak se~mù¾e zmìnit? Buï se~$H$ zvý¹í, co¾ znamená, ¾e~nìjaký vrchol s~pøebytkem v~nejvy¹¹í hladinì byl o~1 zvednut, nebo se~$H$ sní¾í. My víme, ¾e zvednutí je v~celém algoritmu $\O(N^2)$. Zároveò si~mù¾eme uvìdomit, ¾e~$H$ je nezáporný potenciál, kdy sní¾ení i~zvý¹ení ho zmìní o~1, tedy poèet sní¾ení bude stejný jako poèet zvý¹ení, a~proto obojího je~$\O(N^2)$. Tudí¾ poèet fází je také~$\O(N^2)$.
+
+Je dùle¾ité, ¾e~bìhem jedné fáze provedeme nejvý¹e jedno nenasycené pøevedení z~ka¾dého vrcholu. Po~ka¾dém nenasyceném pøevedení po~hranì $uv$ se~toti¾ vynuluje pøebytek v~$u$ a~aby se~provedlo dal¹í nenasycené pøevedení z~vrcholu~$u$, muselo by nejdøíve být co~pøevádìt. Muselo by tedy do~$u$ nìco pøitéci. My ale víme, ¾e pøevádíme pouze shora dolù a~$u$ je v~nejvy¹¹í hladinì (to zajistí právì to vylep¹ení algoritmu), tedy nejdøíve by musel být nìjaký jiný vrchol zvednut. Tím by se~ale zmìnilo~$H$ a~skonèila by tato fáze.
+
+Proto poèet v¹ech nenasycených pøevedení bìhem jedné fáze je nejvý¹e~$N$. A ji¾ jsme dokázali, ¾e~fází je~$\O(N^2)$. Tedy poèet v¹ech nenasycených pøevedení je~$\O(N^3)$.
+\qed
+
+Tento odhad je hezký, ale stále není tìsný a~algoritmus se~chová lépe. Doka¾me si~je¹tì jeden tìsnìj¹í odhad na~poèet nenasycených pøevedení.
+
+\s{Lemma N'' (Nenasycená pøevedení):} Poèet nenasycených pøevedení je~$\O(N^2 \sqrt{M})$.
+
+\s{Poznámka:} Tato èasová slo¾itost je výhodná napøíklad pro~øídké grafy. Ty mají toti¾ pomìrnì malý poèet hran.
+
+\proof
+Rozdìlme si~fáze na~dva druhy: laciné a~drahé podle toho, kolik se~v~nich provede nenasycených pøevedení. Zvolme si~nìjaké nezáporné~$K$. Zatím nebudeme urèovat jeho hodnotu. Uvidíme, ¾e~èasová slo¾itost algoritmu bude závislá na~tomto parametru~$K$. Proto jeho hodnotu zvolíme a¾ pozdìji a~to tak, aby byla slo¾itost co nejni¾¹í.
+
+{\I Laciné fáze} budou ty, bìhem nich¾ se~provede nejvý¹e~$K$ nenasycených pøevedení. {\I Drahé fáze} budou ty ostatní, tedy takové, bìhem nich¾ se~provede více jak~$K$ nenasycených pøevedení.
+
+Teï potøebujeme odhadnout, kolik nás budou stát oba typy fází. Zaènìme s~tìmi jednodu¹¹ími -- s~lacinými. Víme, ¾e~v¹ech fází je~$\O(N^2)$. Tìch laciných bude tedy urèitì také~$O(N^2)$. Nenasycených pøevedení se~bìhem jedné laciné fáze provede nejvíce~$K$. Tedy celkem se~bìhem laciných fází provede~$\O(N^2K)$ nenasycených pøevedení.
+
+Pro~poèet nenasycených pøevedení v~drahých fázích si~zaveïme nový potenciál definovaný následovnì:
+$$\Phi := \sum_{\scriptstyle{v \ne z,s} \atop \scriptstyle{f^{\Delta}(v) \ne 0}} {p(v) \over K},$$
+kde~$p(v)$ je poèet takových vrcholù~$u$, které nejsou vý¹e ne¾~$v$. Neboli
+$$p(v) = \vert \{ u \in V \mid h(u) \leq h(v) \} \vert.$$
+Tedy platí, ¾e~$p(v)$ je v¾dy nezáporné a~nejvý¹e má hodnotu~$N$. Dále víme, ¾e~$\Phi$ bude v¾dy nezáporné (nebo» je to souèet nezáporných èlenù) a~nejvý¹e bude nabývat hodnoty~$N^2 \over K$. Rozmysleme si, jak nám ovlivní tento potenciál na¹e tøi operace:
+\itemize\ibull
+\:{\bf Zvednutí}: Za~ka¾dý zvednutý vrchol pøibude nejvý¹e~$N \over K$ (tento vrchol mù¾e být nadzvednut nejvý¹e nad~v¹echny ostatní vrcholy) a~mo¾ná nìco ubude (napø. kdy¾ vrchol vyzvedneme na~úroveò k~ostatním).
+\:{\bf Nasycené pøevedení} po~hranì $uv$: Mù¾e vynulovat pøebytek ve~vrcholu~$u$, pak se~$\Phi$ sní¾í. Mù¾e zvý¹it pøebytek ve~$v$ z~nuly, pak se~$\Phi$ zvý¹í. Ale nejvý¹e se~zvý¹í o~$N \over K$, nebo» do~$\Phi$ pøibude jen jeden sèítanec za~vrchol $v$ a~ten pøispìje nejvý¹e hodnotou~$N \over K$ (pod ním mù¾e být nejvíce~$N$ vrcholù).
+\:{\bf Nenasycená pøevedení} po~hranì $uv$ v~drahých fázích: Tato operace vynuluje pøebytek v~$u$, tedy~$\Phi$ klesne alespoò o~$p(u) \over K$. Zároveò mù¾e zvý¹it pøebytek ve~$v$ z~nuly, ale~$\Phi$ stoupne nejvý¹e o~$p(v) \over K$. Celkem tedy~$\Phi$ klesne alespoò o~$p(u) - p(v) \over K$.
+\endlist
+Uvìdomme si, ¾e~pokud pøevádíme po~hranì~$uv$, tak platí, ¾e~$h(u) = h(v) + 1$. Pak~$p(u) - p(v)$ je pøesnì poèet vrcholù na~hladinì~$H$. Tìch je alespoò tolik, kolik je nenasycených pøevedení bìhem jedné fáze (to jsme dokázali ji¾ v~lemmatu N'), a~my jsme si~zadefinovali, ¾e v~drahé fázi je poèet nenasycených pøevedení alespoò~$K$. Tedy~$p(u) - p(v) > K$. Proto bìhem jednoho nenasyceného pøevedení~$\Phi$ klesne alespoò o~${K \over K} = 1$. Nenasycená pøevedení potenciál nezvy¹ují.
+
+Potenciál~$\Phi$ se~mù¾e zvìt¹it pouze pøi~operacích zvednutí a~nasycené pøevedení. Zvednutí se~provede celkem~$\O(N^2)$ a~ka¾dé zvý¹í potenciál nejvý¹e o~$N \over K$. Nasycených pøevedení se provede celkem~$\O(NM)$ a~ka¾dé zvý¹í potenciál takté¾ nejvý¹e o~$N \over K$. Celkem se~tedy~$\Phi$ zvý¹í nejvý¹e o
+$${N \over K} \O(N^2) + {N \over K} \O(NM) = \O \left({N^3 \over K} + {N^2M \over K}\right).$$
+
+Teï vyu¾ijeme toho, ¾e~$\Phi$ je nezáporný potenciál, tedy kdy¾ ka¾dé nenasycené pøevdení v~drahé fázi sní¾í~$\Phi$ alespoò o~1, tak v¹ech nenasycených pøevdení v~drahých fázích je~$\O({N^3 \over K} + {N^2M \over K})$. U¾ jsme ukázali, ¾e~nenasycených pøevední v~laciných fázích je~$\O(N^2K)$. Proto celkem v¹ech nenasycených pøevedení je
+$$\O \left(N^2K + {N^3 \over K} + {N^2M \over K} \right) = \O \left(N^2K + {N^2M \over K} \right)$$
+(nebo» pro~souvislé grafy platí, ¾e~$M \geq N \Rightarrow N^2M \geq N^3$). A~my chceme, aby jich bylo co nejménì. Tato funkce má minimum tehdy, kdy¾ $N^2K = {N^2M \over K}$, èili $K = \sqrt{M}$.
+
+Proto v¹ech nenasycených pøevedení je  $\O(N^2\sqrt{M})$.
+\qed
+\bye
diff --git a/4-goldberg/Goldberg01.eps b/4-goldberg/Goldberg01.eps
new file mode 100644 (file)
index 0000000..70be6d9
--- /dev/null
@@ -0,0 +1,517 @@
+%!PS-Adobe-3.0 EPSF-3.0
+%%Creator: inkscape 0.46
+%%Pages: 1
+%%Orientation: Portrait
+%%BoundingBox: 0 0 311 196
+%%HiResBoundingBox: 7.6535002e-09 -2.5149246e-06 310.80097 195.23405
+%%EndComments
+%%Page: 1 1
+0 196 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 0 0 1 -7.2922934 -15.871617] concat
+gsave [1 0 0 1 -105.66802 -41.295546] concat
+0 0 0 setrgbcolor
+[] 0 setdash
+0.80000001 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+327.93522 188.25911 moveto
+327.93522 250.38705 279.87044 300.80972 220.64777 300.80972 curveto
+161.42509 300.80972 113.36031 250.38705 113.36031 188.25911 curveto
+113.36031 126.13117 161.42509 75.708496 220.64777 75.708496 curveto
+279.87044 75.708496 327.93522 126.13117 327.93522 188.25911 curveto
+closepath
+stroke
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0.80000001 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+280.82453 35.083625 moveto
+274.32214 36.15662 267.81146 37.271113 261.46388 39.07255 curveto
+256.08401 40.577261 250.81811 42.517725 245.82341 45.028881 curveto
+242.79426 46.611213 239.80154 48.311743 237.07234 50.377073 curveto
+234.88576 52.176848 232.73392 54.282673 231.7761 57.010153 curveto
+230.78471 60.185495 231.63558 63.732075 233.65009 66.325725 curveto
+236.75865 70.711495 240.33853 74.740745 243.39187 79.167695 curveto
+247.43465 84.791545 250.49703 91.075895 252.79232 97.599345 curveto
+255.73385 105.89744 257.62345 114.54784 258.74508 123.2725 curveto
+259.85691 132.25533 260.47539 141.30252 260.54328 150.35388 curveto
+260.61846 156.41558 260.15107 162.46548 259.4918 168.48702 curveto
+258.79686 174.88094 257.75376 181.2491 256.18144 187.48805 curveto
+254.45425 194.02304 252.04233 200.40052 248.79575 206.33576 curveto
+247.2219 209.23818 245.37178 211.98356 243.24102 214.50717 curveto
+239.09684 219.50186 234.37978 223.98307 229.5905 228.35067 curveto
+228.29104 229.49906 226.85166 230.63983 226.19953 232.30237 curveto
+225.88232 233.85635 227.01743 235.15405 228.04206 236.16404 curveto
+230.86374 238.84504 234.40416 240.56607 237.77898 242.42967 curveto
+244.47556 245.58462 251.01265 249.15643 258.0782 251.44753 curveto
+263.50053 253.31902 269.10056 254.64678 274.77642 255.46817 curveto
+281.19473 256.48978 287.71445 256.73692 294.20191 256.45025 curveto
+299.14227 256.2547 304.06877 255.67187 308.93321 254.79402 curveto
+314.84679 253.66015 320.68583 252.06888 326.29328 249.86487 curveto
+335.79003 246.03402 344.80686 240.95359 352.85154 234.60416 curveto
+359.46392 229.40402 365.5126 223.47549 370.79463 216.92672 curveto
+375.60643 210.82002 379.79681 204.2236 383.33905 197.30459 curveto
+387.6165 188.82584 390.7268 179.78059 392.82506 170.52565 curveto
+394.15871 164.50115 394.96709 158.35759 395.28813 152.19661 curveto
+395.7406 141.38443 394.72997 130.5209 392.3705 119.96144 curveto
+390.72701 112.77723 388.56478 105.6875 385.51691 98.966625 curveto
+382.44736 92.078085 378.75152 85.457485 374.33557 79.338215 curveto
+369.33811 72.377305 363.48786 66.041715 357.08025 60.359605 curveto
+351.79315 55.738659 346.09511 51.583256 339.99622 48.096383 curveto
+334.45248 44.913288 328.59052 42.258109 322.49914 40.311008 curveto
+314.227 37.734459 305.64752 36.306252 297.06034 35.276544 curveto
+292.71018 34.814917 288.33133 34.464891 283.95627 34.610909 curveto
+282.91236 34.768481 281.86844 34.926053 280.82453 35.083625 curveto
+closepath
+stroke
+0 0 0 setrgbcolor
+[] 0 setdash
+1 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+280.5668 226.72064 moveto
+148.58299 192.30769 lineto
+stroke
+gsave [0.77411904 0.20184081 -0.20184081 0.77411904 158.25948 194.8307] 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
+286.23483 122.89173 moveto
+163.96762 131.39375 lineto
+stroke
+gsave [0.79807286 -0.055495103 0.055495103 0.79807286 173.94353 130.70006] 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
+267.20648 73.68421 moveto
+156.27531 100.80972 lineto
+stroke
+gsave [0.77710466 -0.19002198 0.19002198 0.77710466 165.98912 98.434445] 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
+284.1675 181.73326 moveto
+163.31146 161.35254 lineto
+stroke
+gsave [0.78886172 0.13303075 -0.13303075 0.78886172 173.17223 163.01542] 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 [1 0 0 1 -10.931174 -14.170041] concat
+gsave
+0 0 0 setrgbcolor
+newpath
+69.75 150.46416 moveto
+69.749976 149.90952 69.301976 149.20552 68.406 148.35216 curveto
+67.509978 147.49885 67.061979 146.62419 67.062 145.72816 curveto
+67.061979 145.04552 67.275312 144.51219 67.702 144.12816 curveto
+68.128644 143.74419 68.704644 143.55219 69.43 143.55216 curveto
+70.411309 143.55219 71.243308 143.93619 71.926 144.70416 curveto
+72.651306 145.42952 73.013973 146.30419 73.014 147.32816 curveto
+73.013973 148.52285 72.629973 150.05885 71.862 151.93616 curveto
+71.136641 153.77085 70.219309 155.47751 69.11 157.05616 curveto
+65.824647 161.66417 62.859316 165.4615 60.214 168.44816 curveto
+57.568655 171.43483 55.840657 172.92816 55.03 172.92816 curveto
+54.645991 172.92816 54.453991 172.1815 54.454 170.68816 curveto
+54.453991 168.8535 54.304658 165.99484 54.006 162.11216 curveto
+53.707325 158.18684 53.387326 155.11485 53.046 152.89616 curveto
+52.619326 149.95218 52.149994 148.05352 51.638 147.20016 curveto
+51.125995 146.34685 50.251329 145.92019 49.014 145.92016 curveto
+48.203331 145.92019 47.563332 145.94152 47.094 145.98416 curveto
+47.094 145.15216 lineto
+48.58733 144.89619 49.888663 144.66152 50.998 144.44816 curveto
+52.107327 144.23486 52.875326 144.06419 53.302 143.93616 curveto
+53.728659 143.80819 54.112658 143.72286 54.454 143.68016 curveto
+54.795324 143.59486 55.136657 143.55219 55.478 143.55216 curveto
+56.160656 143.55219 56.843322 146.06952 57.526 151.10416 curveto
+58.251321 156.13885 58.741987 161.53617 58.998 167.29616 curveto
+60.982 165.24816 lineto
+63.243316 162.85884 65.26998 160.17084 67.062 157.18416 curveto
+68.853977 154.15485 69.749976 151.91485 69.75 150.46416 curveto
+fill
+grestore
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+112.67278 62.815617 moveto
+112.67278 63.967617 lineto
+94.960781 63.967617 lineto
+94.960781 62.815617 lineto
+97.264756 62.575618 98.776754 62.215619 99.496781 61.735617 curveto
+100.21675 61.25562 100.57675 60.343621 100.57678 58.999617 curveto
+100.57675 58.615622 100.52875 57.991623 100.43278 57.127617 curveto
+98.992781 47.695617 lineto
+83.152781 47.695617 lineto
+79.048781 55.831617 lineto
+78.088775 57.751623 77.608776 59.239622 77.608781 60.295617 curveto
+77.608776 61.20762 77.848775 61.807619 78.328781 62.095617 curveto
+78.856774 62.383619 80.032773 62.623618 81.856781 62.815617 curveto
+81.856781 63.967617 lineto
+68.392781 63.967617 lineto
+68.392781 62.815617 lineto
+69.880783 62.527618 71.104782 61.807619 72.064781 60.655617 curveto
+73.07278 59.503621 74.944778 56.575624 77.680781 51.871617 curveto
+98.560781 15.871617 lineto
+100.43278 15.871617 lineto
+107.20078 56.623617 lineto
+107.68075 59.263622 108.20875 60.91962 108.78478 61.591617 curveto
+109.36074 62.215619 110.65674 62.623618 112.67278 62.815617 curveto
+84.664781 45.103617 moveto
+98.632781 45.103617 lineto
+95.464781 26.383617 lineto
+84.664781 45.103617 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+287.18781 17.761328 moveto
+287.18781 18.913328 lineto
+285.65176 18.961374 284.30776 19.921373 283.15581 21.793328 curveto
+256.29981 66.073328 lineto
+254.93181 66.073328 lineto
+248.81181 28.633328 lineto
+248.0438 24.121369 247.3958 21.433372 246.86781 20.569328 curveto
+246.3878 19.705374 245.1398 19.153374 243.12381 18.913328 curveto
+243.12381 17.761328 lineto
+260.47581 17.761328 lineto
+260.47581 18.913328 lineto
+258.21979 19.153374 256.73179 19.513374 256.01181 19.993328 curveto
+255.29179 20.473373 254.93179 21.337372 254.93181 22.585328 curveto
+254.93179 23.06537 254.95579 23.42537 255.00381 23.665328 curveto
+259.75581 55.561328 lineto
+274.58781 29.929328 lineto
+277.08377 25.609368 278.33177 22.753371 278.33181 21.361328 curveto
+278.33177 20.065373 276.81977 19.249374 273.79581 18.913328 curveto
+273.79581 17.761328 lineto
+287.18781 17.761328 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+296.71543 16.825328 moveto
+301.89943 16.825328 lineto
+322.63543 66.073328 lineto
+317.52343 66.073328 lineto
+296.71543 16.825328 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+378.24418 63.625328 moveto
+378.24418 64.777328 lineto
+360.53218 64.777328 lineto
+360.53218 63.625328 lineto
+362.83616 63.38533 364.34816 63.02533 365.06818 62.545328 curveto
+365.78816 62.065331 366.14816 61.153332 366.14818 59.809328 curveto
+366.14816 59.425334 366.10016 58.801334 366.00418 57.937328 curveto
+364.56418 48.505328 lineto
+348.72418 48.505328 lineto
+344.62018 56.641328 lineto
+343.66018 58.561335 343.18018 60.049333 343.18018 61.105328 curveto
+343.18018 62.017331 343.42018 62.617331 343.90018 62.905328 curveto
+344.42818 63.19333 345.60418 63.43333 347.42818 63.625328 curveto
+347.42818 64.777328 lineto
+333.96418 64.777328 lineto
+333.96418 63.625328 lineto
+335.45219 63.33733 336.67619 62.617331 337.63618 61.465328 curveto
+338.64418 60.313333 340.51618 57.385336 343.25218 52.681328 curveto
+364.13218 16.681328 lineto
+366.00418 16.681328 lineto
+372.77218 57.433328 lineto
+373.25215 60.073333 373.78015 61.729332 374.35618 62.401328 curveto
+374.93215 63.02533 376.22815 63.43333 378.24418 63.625328 curveto
+350.23618 45.913328 moveto
+364.20418 45.913328 lineto
+361.03618 27.193328 lineto
+350.23618 45.913328 lineto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+321.33714 220.85778 moveto
+321.76378 220.85778 322.46778 220.40978 323.44914 219.51378 curveto
+324.43044 218.57512 325.43311 217.55112 326.45714 216.44178 curveto
+327.22514 217.08178 lineto
+324.87844 219.98312 323.12911 221.88178 321.97714 222.77778 curveto
+320.82511 223.67378 319.60912 224.12178 318.32914 224.12178 curveto
+316.62245 224.12178 315.76912 223.24711 315.76914 221.49778 curveto
+315.76912 220.43112 316.25979 217.97779 317.24114 214.13778 curveto
+314.42512 218.10579 312.14246 220.77245 310.39314 222.13778 curveto
+308.64379 223.50311 306.63846 224.18578 304.37714 224.18578 curveto
+302.32913 224.18578 300.72913 223.56711 299.57714 222.32978 curveto
+298.42514 221.04978 297.84914 219.30045 297.84914 217.08178 curveto
+297.84914 213.79646 298.76647 210.44713 300.60114 207.03378 curveto
+302.47847 203.62047 304.84646 200.80447 307.70514 198.58578 curveto
+310.60646 196.36714 313.42246 195.25781 316.15314 195.25778 curveto
+319.01178 195.25781 320.71845 196.49514 321.27314 198.96978 curveto
+321.97714 195.89778 lineto
+322.16914 195.70578 lineto
+326.07314 195.25778 lineto
+326.52114 195.44978 lineto
+326.47844 195.62048 326.35044 196.06848 326.13714 196.79378 curveto
+322.33978 210.70313 320.44112 218.44712 320.44114 220.02578 curveto
+320.44112 220.58045 320.73978 220.85778 321.33714 220.85778 curveto
+320.12114 200.56978 moveto
+320.12112 199.37514 319.75845 198.43647 319.03314 197.75378 curveto
+318.35045 197.02847 317.41178 196.66581 316.21714 196.66578 curveto
+313.87046 196.66581 311.63046 198.03114 309.49714 200.76178 curveto
+307.40646 203.49247 305.8278 206.35113 304.76114 209.33778 curveto
+303.73713 212.28179 303.22513 214.58579 303.22514 216.24978 curveto
+303.22513 217.70045 303.56647 218.87379 304.24914 219.76978 curveto
+304.9318 220.62312 305.8278 221.04978 306.93714 221.04978 curveto
+308.94246 221.04978 310.99046 219.89778 313.08114 217.59378 curveto
+315.17179 215.24712 316.85712 212.47379 318.13714 209.27378 curveto
+319.45978 206.0738 320.12112 203.17247 320.12114 200.56978 curveto
+fill
+grestore
+gsave
+0 0 0 setrgbcolor
+newpath
+116.35173 140.22451 moveto
+116.35173 139.13651 lineto
+119.55172 138.75255 122.81572 138.26189 126.14373 137.66451 curveto
+126.46373 137.98451 lineto
+119.80773 162.81651 lineto
+122.06905 159.2752 124.13838 156.7792 126.01573 155.32851 curveto
+127.89304 153.87787 129.94104 153.15254 132.15973 153.15251 curveto
+134.29304 153.15254 136.0637 153.87787 137.47173 155.32851 curveto
+138.8797 156.7792 139.5837 158.61387 139.58373 160.83251 curveto
+139.5837 164.11786 138.5597 167.42452 136.51173 170.75251 curveto
+134.50637 174.03785 131.92504 176.74718 128.76773 178.88051 curveto
+125.61038 181.01384 122.45305 182.08051 119.29573 182.08051 curveto
+117.50372 182.08051 115.62639 181.69651 113.66373 180.92851 curveto
+111.74373 180.16051 110.78373 179.41385 110.78373 178.68851 curveto
+110.78373 178.43251 lineto
+119.48773 146.36851 lineto
+120.17039 143.97921 120.51172 142.50722 120.51173 141.95251 curveto
+120.51172 141.22722 120.27705 140.77922 119.80773 140.60851 curveto
+119.38105 140.39522 118.22905 140.26722 116.35173 140.22451 curveto
+119.23173 180.60851 moveto
+121.40772 180.60851 123.47705 179.84051 125.43973 178.30451 curveto
+127.44504 176.76852 129.04504 174.93385 130.23973 172.80051 curveto
+131.43437 170.66719 132.37304 168.59786 133.05573 166.59251 curveto
+133.78104 164.58719 134.1437 162.9872 134.14373 161.79251 curveto
+134.1437 160.08587 133.73837 158.74187 132.92773 157.76051 curveto
+132.11704 156.7792 131.02904 156.28854 129.66373 156.28851 curveto
+127.74371 156.28854 125.90905 157.20587 124.15973 159.04051 curveto
+122.41038 160.83253 120.98105 162.9872 119.87173 165.50451 curveto
+118.76239 168.02186 117.88772 170.47519 117.24773 172.86451 curveto
+116.60772 175.21118 116.28772 177.06718 116.28773 178.43251 curveto
+116.28772 179.88318 117.26905 180.60851 119.23173 180.60851 curveto
+fill
+grestore
+gsave [3.8010801 0 0 3.658223 -475.86267 -552.55121] concat
+gsave
+0 0 0 setrgbcolor
+newpath
+144.12956 193.31984 moveto
+144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
+141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
+141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
+143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
+closepath
+fill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0.80000001 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+144.12956 193.31984 moveto
+144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
+141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
+141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
+143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
+closepath
+stroke
+grestore
+gsave [3.8010801 0 0 3.658223 -403.59545 -516.51882] concat
+gsave
+0 0 0 setrgbcolor
+newpath
+144.12956 193.31984 moveto
+144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
+141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
+141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
+143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
+closepath
+fill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0.80000001 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+144.12956 193.31984 moveto
+144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
+141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
+141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
+143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
+closepath
+stroke
+grestore
+gsave [3.8010801 0 0 3.658223 -253.79788 -476.43785] concat
+gsave
+0 0 0 setrgbcolor
+newpath
+144.12956 193.31984 moveto
+144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
+141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
+141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
+143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
+closepath
+fill
+grestore
+0 0 0 setrgbcolor
+[] 0 setdash
+0.80000001 setlinewidth
+0 setlinejoin
+0 setlinecap
+newpath
+144.12956 193.31984 moveto
+144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
+141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
+141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
+143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
+closepath
+stroke
+grestore
+grestore
+grestore
+showpage
+%%EOF
diff --git a/4-goldberg/Makefile b/4-goldberg/Makefile
new file mode 100644 (file)
index 0000000..a7a85b6
--- /dev/null
@@ -0,0 +1,3 @@
+P=4-goldberg
+
+include ../Makerules
diff --git a/old/3-goldberg/3-goldberg.tex b/old/3-goldberg/3-goldberg.tex
deleted file mode 100644 (file)
index 70544d4..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-\input lecnotes.tex
-
-\prednaska{3}{Goldbergùv algoritmus}{(zapsala Markéta Popelová)}
-
-Pøedstavíme si~nový algoritmus pro~hledání maximálního toku v~síti, který se~uká¾e být stejnì dobrý jako {\I Dinicùv algoritmus} ($\O(MN^{2})$) a~po~nìkolika vylep¹eních bude i~lep¹í. Nejdøíve si~pøipomeòme definice, které budeme potøebovat:
-
-\s{Definice:} Mìjme sí» $S=(V,E,z,s,c)$, tok~$f$ a~libovolný vrchol~$v$. Pak $f^{\Delta}(v)$ nazýváme {\I pøebytek} ve~vrcholu~$v$ a~definujeme ho takto: $$f^{\Delta}(v):=\sum_{uv \in E}{f(uv)} - \sum_{vu \in E}{f(vu)}.$$ Pøebytek ve~vrcholu~$v$ je tedy souèet v¹eho, co do~vrcholu~$v$ pøiteèe, minus souèet v¹eho, co z~$v$ odteèe.
-
-\s{Definice:} Dále pro~libovolnou hranu~$uv \in E$ definujeme její {\I rezervu} následovnì:
-$$r(uv) = c(uv) - f(uv) + f(vu).$$ Rezerva hrany znaèí, co je¹tì je mo¾no po~této hranì poslat.
-
-\s{Poznámka:} Dále budeme oznaèovat písmenem~$N$ poèet vrcholù a~$M$ poèet hran, tedy~$N = \vert V \vert$ a~$M = \vert E \vert$.
-
-Goldbergùv algoritmus na~rozdíl od~Dinicova algoritmu zaèíná s~ohodnocením hran, které pravdìpodobnì není tokem (budeme ho nazývat {\I vlna}), a~postupnì ho zmen¹uje a¾ na~korektní tok.
-
-\s{Definice:} Funkce $f:E \rightarrow {\bb R}_{0}^{+}$ je {\I vlna} v~síti~$(V, E, z, s, c)$ tehdy, kdy¾ jsou splnìny následující dvì podmínky:
-       \numlist\ndotted
-       \:$\forall e \in E : f(e) \leq c(e)$ (vlna na hranì nepøekroèí kapacitu hrany)
-       \:$ \forall v \in V \setminus \{z, s\} : f^{\Delta}(v) \geq 0$ (pøebytek ve vrcholu je nezáporný).
-       \endlist
-
-\s{Pozorování:} Ka¾dý tok~$f$ je také vlna, ale opaènì to obvykle platit nemusí.
-
-\s{Operace:} {\I Pøevedení pøebytku}
-
-Algoritmus bude potøebovat pøevádìt pøebytky z~vrcholu~$u$ na~sousední vrchol~$v$. Mìjme hranu~$uv$ s~kladnou rezervou $r(uv) > 0$ a~kladným pøebytkem ve~vrcholu~$u$: $f^\Delta(u) > 0$. Èást pøebytku budeme chtít poslat z~vrcholu~$u$ do~vrcholu~$v$. Vezmeme $\delta := \min (f^\Delta(u), r(uv))$ a~po~hranì~$uv$ po¹leme tok o velikosti~$\delta$. Výsledná situace bude vypadat následovnì:
-       \itemize\ibull
-       \:$f'^\Delta(u) = f^\Delta(u) - \delta$.
-       \:$f'^\Delta(v) = f^\Delta(v) + \delta$.
-       \:$r'(uv) = r(uv) - \delta$.
-       \:$r'(vu) = r(vu) + \delta$.
-       \endlist
-       
-Kdybychom ov¹em nepøidali ¾ádnou jinou podmínku, ná¹ algoritmus by se~mohl krásnì zacyklit (napø. posílat pøebytek z~$u$ do~$v$ a~zase zpátky). Abychom se~tomu vyhnuli, zavedeme {\I vý¹ku vrcholu} $h: V \to {\bb N}$ a~dovolíme pøevádìt pøebytek pouze z~vy¹¹ího vrcholu~$u$ na~ni¾¹í $v$: $h(u) > h(v)$.
-
-\s{Shrnutí:} Podmínky pro~pøevedení pøebytku po~hranì $uv \in E$:
-       \numlist\ndotted
-       \:Ve~vrcholu~$u$ je nenulový pøebytek: $f^{\Delta}(u) > 0$.
-       \:Vrchol~$u$ je vý¹ ne¾ vrchol~$v$: $h(u) > h(v)$.
-       \:Hrana~$uv$ má nenulovou rezervu: $r(uv)>0$.
-       \endlist
-
-
-\s{Operace:} Pro~vrchol~$u \in V$ definujme {\I zvednutí vrcholu}:
-Pokud bìhem výpoètu narazíme ve~vrcholu~$u$ na~pøebytek, který nelze nikam pøevést, zvìt¹íme vý¹ku vrcholu~$u$ o~jednièku, tj. $h(u) \leftarrow h(u)+1$.
-
-
-\s{Algoritmus (Goldbergùv)}
-
-\algo
-\:$\forall v \in V: h(v)\leftarrow 0$ (v¹em vrcholùm nastavíme poèáteèní vý¹ku nula) a~$h(z)\leftarrow N$ (zdroj zvedneme do~vý¹ky~$N$).
-\:$\forall e \in E: f(e)\leftarrow 0$ (po~hranách nejdøíve nenecháme protékat nic) a~$\forall zu \in E : f(zu)\leftarrow c(zu)$ (ze~zdroje pustíme maximální mo¾nou vlnu).
-\:Dokud $\exists u \in V \setminus \{z,s\}: f^{\Delta}(u)>0$:
-\::Pokud $\exists v \in V: uv \in E,~r(uv)>0$ a~$h(u)>h(v)$, pak pøevedeme pøebytek po~hranì z~$u$ do~$v$.
-\::V~opaèném pøípadì zvedneme $u$:~$h(u) \leftarrow h(u) + 1$.
-\:Vrátíme tok~$f$ jako výsledek.
-\endalgo
-
-\noindent
-Nyní bude následovat nìkolik lemmat a~invariantù, jimi¾ doká¾eme správnost a~èasovou slo¾itost Goldbergova algoritmu.
-
-\s{Invariant A (základní):}
-       \numlist \ndotted
-       \:Funkce~$f$ je v~ka¾dém kroku algoritmu vlna.
-       \:$h(v)$ nikdy neklesá pro~¾ádné~$v$.
-       \:$h(z)=N$ a~$h(s)=0$ po~celou dobu bìhu algoritmu.
-       \endlist
-
-\proof Indukcí dle poètu prùchodù cyklem (3. -- 5. krok algoritmu).
-
-Na zaèátku je v¹e v~poøádku ($f$ je nulová funkce, pøebytky v¹ech vrcholù jsou nezáporné, tedy~$f$ je vlna, $h(z)=N$ a~$h(s)=0$). V~prùbìhu se~tyto hodnoty mìní pouze pøi:
-       \itemize\ibull
-       \:Pøevedení po~hranì~$uv$: Po hranì~$uv$ se~nepo¹le více ne¾ její rezerva. Pøebytek~$u$ se~sní¾í, ale nejménì na~nulu. Pøebytek~$v$ se~zvý¹í. Tedy~$f$ zùstává vlnou. Vý¹ky se~nemìní.
-       \:Zvednutí vrcholu~$u$: Mìní pouze vý¹ky -- a~to vrcholù rùzných od zdroje èi stoku -- a~pouze se zvy¹ují.
-       \qeditem
-       \endlist
-
-\s{Invariant S (o~Spádu):} Neexistuje hrana $uv \in E: r(uv)>0$ \& $h(u) > h(v)+1$ (s~kladnou rezervou a~spádem vìt¹ím ne¾ jedna).
-
-\proof Indukcí dle bìhu algoritmu.
-
-Na zaèátku mají v¹echny hrany ze~zdroje rezervu nulovou a~v¹echny ostatní vedou mezi vrcholy s~vý¹kou 0. V~prùbìhu by se~tento invariant mohl pokazit pouze dvìma zpùsoby:
-       \itemize\ibull
-       \:Zvednutím vrcholu~$u$, ze~kterého vede hrana~$uv$ s~kladnou rezervou a~spádem 1. Tento pøípad nemù¾e nastat, nebo» hranu zvedáme pouze tehdy, kdy¾ neexistuje vrchol~$v$ takový, ¾e hrana~$uv$ má kladnou rezervu a~spád alespoò 1. Takový vrchol v~na¹em pøípadì existuje, proto se~místo zvednutí vrcholu~$u$ po¹le pøebytek po~hranì~$uv$.
-       \:Zvìt¹ením rezervy hrany se~spádem vìt¹ím ne¾ 1. Toto také nemù¾e nastat, nebo» rezervu bychom mohli zvìt¹it jedinì tak, ¾e bychom poslali nìco v~protismìru -- a~to nesmíme, jeliko¾ bychom poslali pøebytek z~ni¾¹ího vrcholu na~vy¹¹í.
-       \qeditem
-       \endlist
-
-\s{Definice:} Cestu~$P$ nazveme {\I nenasycenou}, pokud v¹echny její hrany mají kladnou rezervu. Neboli $\forall e \in P: r(e) > 0$.
-
-\s{Lemma K (o~Korektnosti):} Kdy¾ se~algoritmus zastaví, je~$f$ maximální tok.
-
-\proof Dùkaz rozlo¾me do~dvou krokù. Nejdøíve uká¾eme, ¾e~$f$ je tok, a~pak jeho maximalitu.
-
-       \numlist\ndotted
-       \:Nech» se~algoritmus zastavil. Pak nemohl existovat ¾ádný vrchol~$v$ (kromì zdroje a~stoku) s~kladným pøebytkem. Tedy $\forall v \in V~\setminus \{z,s\}: f^\Delta(v) = 0$. (Víme ji¾, ¾e~$f$ je po~celou dobu vlna, tak¾e pøebytek nemù¾e být nikdy záporný.) V~tom pøípadì splòuje~$f$ podmínky toku.
-       \:Pro spor pøedpokládejme, ¾e tok~$f$ není maximální. Pak existuje nenasycená cesta ze~zdroje do~stoku. Vezmìme si~libovolnou takovou cestu. Zdroj je stále ve~vý¹ce~$N$ a~spotøebiè ve~vý¹ce 0 (viz invariant A). Tato cesta tedy pøekonává vý¹ku~$N$, ale mù¾e mít nejvý¹e~$N-1$ hran. Proto existuje alespoò jedna hrana se~spádem alespoò 2. Tato hrana tedy nemù¾e mít kladnou rezervu (viz invariant S). Tato cesta proto nemù¾e být zlep¹ující, co¾ je spor. Tím jsme dokázali, ¾e~$f$ je nutnì maximální tok.
-       \qeditem
-       \endlist
-       
-\s{Lemma C (Cesta):} Mìjme vrchol $v \in V$. Pokud $f^{\Delta}(v) > 0$, pak existuje nenasycená cesta z~vrcholu~$v$ do~zdroje.
-
-\proof
-Pro vrchol~$v \in V$ s $f^{\Delta}(v) > 0$ definujme mno¾inu $A := \{ u \in V : \exists$ nenasycená cesta z~$v$ do~$u \}$.
-
-Seètìme pøebytky ve~v¹ech vrcholech mno¾iny~$A$. Pøebytek ka¾dého vrcholu se~spoèítá jako souèet tokù do~nìj vstupujících minus souèet tokù z~nìj vystupujících. V¹echny hrany, jejich¾ oba vrcholy le¾í v~$A$, se~jednou pøiètou a~jednou odeètou. Proto nás budou zajímat pouze hrany mezi~$A$ a~$V \setminus A$.
-
- $$\sum_{u \in A}f^{\Delta}(u) = \underbrace{ \sum_{ab \in E \cap ( (V \setminus A) \times A )} f(ab) }\limits_{=0} -  \underbrace{ \sum_{ab \in E \cap (  A \times (V \setminus A) )} f(ab) }\limits_{\geq 0}~\leq~0.$$
-
-Uka¾me si, proè je první svorka rovna nule. Mìjme vrcholy $a \in V \setminus A$ a~$b \in A$ takové, ¾e $ab\in E$. O~nich víme, ¾e $r(ba) = 0$ (jinak by~$a$ patøilo do~$A$) $\Rightarrow f(ba) = c(ba) \Rightarrow f(ab)=0$. Proto do~$A$ nic nepøitéká.
-
-\figure{Goldberg01.eps}{Obrázek k dùkazu lemmatu C}{0.2\hsize}
-
-Proè je druhá svorka nezáporná, je zøejmé, nebo» tok na~hranì je v¾dy nezáporný a~souèet nezáporných èísel je nezáporné èíslo.
-
-Proto $\sum_{u \in A}{f^\Delta(u) \le 0}$. Zároveò v¹ak v~$A$ je aspoò jeden vrchol s~kladným pøebytkem, toti¾~$v$, proto v~$A$ musí být také vrchol se~záporným pøebytkem -- a~jediný takový je zdroj. Tím je dokázáno, ¾e $z \in A$, tedy ¾e vede nenasycená cesta z~vrcholu~$v$ do~zdroje.
-\qed
-
-\s{Invariant V (Vý¹ka):} $\forall v \in V$ platí $h(v)\leq 2N$.
-
-\proof
-Kdyby existoval vrchol~$v$ s~vý¹kou $h(v) > 2N$, tak by musel být nìkdy zvednut z~vý¹ky~$2N$. Tehdy musel mít kladný pøebytek $f^\Delta(v)>0$ (jinak by nemohl být zvednut). Dle lemmatu C musela existovat nenasycená cesta z~$v$ do~zdroje. Tato cesta mìla spád alespoò~$N$, ale mohla mít nejvý¹e~$N-1$ hran (jinak by to nebyla cesta v~síti na~$N$ vrcholech). Tudí¾ musela na~této cestì existovat hrana se~spádem alespoò 2, co¾ je spor s~invariantem S (nebo» v¹echny hrany této cesty mají z~definice nenasycené cesty kladné rezervy).
-\qed
-
-\s{Lemma Z (poèet Zvednutí):} Poèet v¹ech zvednutí je maximálnì~$2N^{2}$.
-
-\proof
-Staèí si~uvìdomit, ¾e ka¾dý vrchol mù¾eme zvednout maximálnì~$2N$-krát a~vrcholù je~$N$.
-\qed
-
-Teï nám je¹tì zbývá urèit poèet provedených pøevedení. Bude se~nám hodit, kdy¾ pøevedení rozdìlíme na~dva druhy:
-
-\s{Definice:} Øekneme, ¾e pøevedení je {\I nasycené}, pokud po~pøevodu rezerva na~hranì~$uv$ klesla na~nulu, tedy $r(uv)=0$. V~opaèném pøípadì je {\I nenasycené}, a~tehdy urèitì klesne pøebytek ve~vrcholu~$u$ na~nulu, tedy $f^{\Delta}(u) = 0$ (pøi~nasyceném pøevedení se~to~ale mù¾e stát také).
-
-\s{Lemma S (naSycená pøevedení):} Poèet v¹ech nasycených pøevedení je nejvý¹~$NM$.
-
-\proof
-Pro ka¾dou hranu~$uv$ spoèítejme poèet nasycených pøevedení (tedy takových pøevedení, ¾e po~nich klesne rezerva hrany na~nulu). Abychom dvakrát nasycenì pøevedli pøebytek (nebo jeho èást) z~vrcholu~$u$ do~vrcholu~$v$, tak jsme museli~$u$ mezitím alespoò dvakrát zvednout:
-
-Po~prvním nasyceném pøevedení z~vrcholu~$u$ do~vrcholu~$v$ se~vynulovala rezerva hrany~$uv$. Uvìdomme si, ¾e pøi~této operaci muselo být~$u$ vý¹e ne¾~$v$, a~dokonce víme, ¾e bylo vý¹e pøesnì o~1 (viz lemma~S). Po~této hranì tedy nemù¾eme u¾~nic více pøevést. Aby do¹lo k~druhému nasycenému pøevedení z~$u$ do~$v$, musíme nejprve opìt zvý¹it rezervu hrany~$uv$. Jediný zpùsob, jak toho lze dosáhnout, je pøevést èást pøebytku z~$v$ zpátky do~$u$. K~tomu se~musí~$v$ dostat (alespoò o~1) vý¹e ne¾~$u$. Po~pøelití bude rezerva~$uv$ opìt kladná. A~abychom provedli nasycené pøevedení znovu ve~smìru z~$u$ do~$v$, musíme zase~$u$ dostat (alespoò o~1) vý¹e ne¾~$v$. Proto musíme~$u$ alespoò o~2 zvednout -- nejprve na~úroveò~$v$ a~pak je¹tì o~1 vý¹e.
-
-
-Ukázali jsme si~tedy, ¾e mezi ka¾dými dvìma nasycenými pøevedeními jsme vrchol~$u$ zvedli alespoò dvakrát. Nicménì libovolnou hranu mù¾eme zvednout nejvý¹e~$2N$-krát (viz invariant V). V¹ech hran je~$M$, tudí¾ poèet v¹ech nasycených pøevedení je nejvý¹e~$NM$.
-\qed
-
-\s{Lemma N (Nenasycená pøevedení):} Poèet v¹ech nenasycených pøevedení je~$\O(N^2M)$.
-
-\proof
-Dùkaz provedeme pomocí potenciálové metody -- nadefinujme si~následující funkci jako potenciál:
- $$ \Phi := \sum_{\scriptstyle{v: f^{\Delta}(v) > 0} \atop \scriptstyle{v \ne z,s}} h(v). $$
-Nyní se~podívejme, jak se~ná¹ potenciál bìhem algoritmu vyvíjí a~jaké má vlastnosti:
-
-       \itemize\ibull
-       \:Na poèátku je $ \Phi = 0 $.
-       \:Bìhem celého algoritmu je $ \Phi \ge 0 $, nebo» je souètem nezáporných èlenù.
-       \:Zvednutí vrcholu zvý¹í $\Phi$ o~jednièku (Aby byl vrchol zvednut, musel mít kladný pøebytek $\Rightarrow$ vrchol do~sumy ji¾ pøispíval, teï jen pøispìje èíslem o 1 vy¹¹ím.). Ji¾ víme, ¾e za~celý prùbìh algoritmu je v¹ech zvednutí maximálnì~$2N^2$, proto zvedáním vrcholù zvý¹íme potenciál dohromady nejvý¹e o~$2N^2$.
-       \:Nasycené pøevedení zvý¹í~$\Phi$ nejvý¹e o~$2N$, proto¾e buï po~pøevodu hranou~$uv$ v~$u$ zùstal nìjaký pøebytek, tak¾e se~mohl potenciál zvý¹it nejvý¹e o~$h(v) \leq 2N$, nebo je pøebytek v~$u$ po~pøevodu nulový a~potenciál se~dokonce o~jedna sní¾il. Za~celý prùbìh tak dojde k~maximálnì~$NM$ takovýmto pøevedením, díky nim¾ se~potenciál zvý¹í maximálnì o~$2N^2M$.
-       \:Koneènì kdy¾ pøevádíme po~hranì~$uv$ nenasycenì, tak od~potenciálu urèitì odeèteme vý¹ku vrcholu~$u$ (nebo» se~vynuluje pøebytek ve~vrcholu~$u$) a~mo¾ná pøièteme vý¹ku vrcholu~$v$. Jen¾e $h(v) = h(u) - 1$, a~proto nenasycené pøevedení potenciál v¾dy sní¾í alespoò o~jedna.
-       \endlist
-
-\>Z~tohoto rozboru chování potenciálu~$\Phi$ v~prùbìhu algoritmu získáváme, ¾e poèet v¹ech nenasycených pøevedení mù¾e být nejvý¹e $2N^2 + 2N^2M$, co¾ je $\O(N^2M)$.
-\qed
-
-\s{Implementace:}
-
-Budeme si~pamatovat seznam~$P$ v¹ech vrcholù~$v \ne z,s$ s~kladným pøebytkem. Neboli
-$$P = \{ v \in V \setminus \{z,s\} ~\vert~ f^{\Delta}(v) > 0 \}.$$
-Kdy¾ mìníme pøebytek nìjakého vrcholu, mù¾eme ná¹ seznam v~konstantním èase aktualizovat (napø. tak, ¾e si~ka¾dý vrchol pamatuje pozici, na~které v~seznamu~$P$ je). V~konstantním èase také umíme odpovìdìt, zda existuje nìjaký vrchol s~pøebytkem.
-
-Dále si~pro ka¾dý vrchol~$u \in V$ budeme pamatovat~$L(u)$-seznam hran~$uv \in E$ takových, které vedou dolù (mají spád alespoò 1) a~kladnou rezervu. Neboli
-$$L(u) = \{ uv \in E ~\vert~ v \in V,~ r(uv) > 0,~ h(v) < h(u)\}.$$
-Díky tomu mù¾eme pøistupovat k~patøièným sousedùm~$u$ v~èase $\O(1)$, stejnì jako pøidávat hrany do~$L(u)$, resp. je mazat. Opìt ka¾dá hrana si~bude pamatovat pozici, na~které se~nachází v~seznamu~$L$.
-
-\s{Rozbor èasové slo¾itosti algoritmu:}
-
-\numlist\ndotted
-\:Inicializace vý¹ek \dots\ $\O(N)$.
-\:Inicializace vlny~$f$ \dots\ $\O(M)$.
-\:Výbìr vrcholu~$u$ s~kladným pøebytkem -- vezmeme první vrchol v~$P$ \dots\ $\O(1)$.
-\:Výbìr vrcholu~$v$, do~kterého vede z~$u$ hrana s~kladnou rezervou a~který je ní¾e ne¾~$u$ -- vezmeme první hranu z~$L(u)$ \dots\ $\O(1)$.
-       
-       Pøevedení pøebytku: \dots\ $\O(1)$.
-               \itemize\idot
-               \:Nasycené pøevedení \dots\ $\O(1)$.
-                       \itemize\idot
-                       \:Rezerva hrany~$uv$ klesne na~nulu $\Rightarrow$ hrana~$uv$ vypadne z~$L(u)$ \dots\ $\O(1)$.
-                       \:Pøebytek vrcholu~$v$ se~zvý¹í $\Rightarrow$ pokud je¹tì nebyl v~seznamu~$P$, tak se~tam pøidá \dots\ $\O(1)$.
-                       \:Pøebytek vrcholu~$u$ mo¾ná také klesne na~nulu $\Rightarrow$ pak by vrchol~$u$ vypadnul z~$P$ \dots\ $\O(1)$.
-                       \endlist
-               \:Nenasycené pøevedení \dots\ $\O(1)$.
-                       \itemize\idot
-                       \:Rezerva hrany~$uv$ zùstane nezáporná $\Rightarrow$ hrana~$uv$ zùstane v~$L(u)$ \dots\ $\O(1)$.
-                       \:Vynuluje se~pøebytek vrcholu~$u$~$\Rightarrow$ vrchol $u$ vypadne z~$P$ \dots~$\O(1)$.
-                       \:Pøebytek vrcholu~$v$ se~zvý¹í~$\Rightarrow$ pokud je¹tì nebyl v~seznamu~$P$, tak se~tam pøidá \dots\ $\O(1)$.
-                       \endlist
-               \endlist
-\:Zvednutí vrcholu~$u$ \dots $\O(N)$.
-
-Musíme obejít v¹echny hrany do~$u$ a~z~$u$, kterých je nejvý¹e~$2N-2$, porovnat
-vý¹ky a~pøípadnì tyto hrany~$uv$ odebrat ze~seznamu~$L(v)$ resp. pøidat
-do~$L(u)$. Abychom pro~odebrání hrany~$uv$ ze~seznamu~$L(v)$ nemuseli procházet
-celý seznam, budeme si~$\forall u \in V$ pamatovat je¹tì $L^{-1}(u) := $ seznam
-ukazatelù na~hrany~$uv$ v~seznamech~$L(v)$.
-
-\endlist
-
-Vidíme, ¾e ka¾dé zvednutí je sice drahé, ale je jich zase pomìrnì málo. Naopak pøevádìní pøebytkù je èastá operace, tak¾e je výhodné, ¾e trvá konstantní èas.
-
-\s{Shrnutí:}
-
-\itemize\ibull
-\:V¹ech zvednutí je $\O(N^2)$ (viz lemma Z), ka¾dé trvá $\O(N)$ \dots\ $\O(N^3).$
-\:V¹ech nasycených pøevedení je $\O(NM)$ (viz lemma S), ka¾dé trvá $\O(1)$ \dots\ $\O(NM).$
-\:V¹ech nenasycených pøevedení je $\O(N^2M)$ (viz lemma N), ka¾dé trvá $\O(1)$ \dots\ $\O(N^2M).$
-\endlist
-
-Dohromady má tedy Goldbergùv algoritmus èasovou slo¾itost $\O(N^2M)$. Vidíme, ¾e u¾ v~tomto obecném pøípadì to není hor¹í ne¾ Dinicùv algoritmus. Pøí¹tì si~uká¾eme, ¾e mù¾e mít i~mnohem lep¹í. Nejdøíve ale zformulujme v¹echna dokázaná tvrzení do~následující vìty:
-
-\s{Vìta:} Goldbergùv algoritmus najde maximální tok v~èase $\O(N^2M)$.
-
-\s{Pozorování:} Pokud bychom volili v¾dy nejvy¹¹í z~vrcholù s~pøebytkem, tak by se~mohl algoritmus chovat lépe. Podívejme se~na~to pozornìji a~vylep¹ený Goldebrgùv algoritmus oznaème G'.
-
-\s{Algoritmus (Vylep¹ený Goldbergùv algoritmus)}
-
-\algo
-\:$\forall v \in V: h(v)\leftarrow 0$ (v¹em vrcholùm nastavíme poèáteèní vý¹ku nula) a~$h(z)\leftarrow N$ (zdroj zvedneme do~vý¹ky~$N$).
-\:$\forall e \in E: f(e)\leftarrow 0$ (po~hranách nejdøíve nenecháme protékat nic) a~$\forall zu \in E : f(zu)\leftarrow c(zu)$ (ze~zdroje pustíme maximální mo¾nou vlnu).
-\:Dokud $\exists u \in V \setminus \{z,s\}: f^{\Delta}(u)>0$:
-\::Vybereme z~vrcholù s~pøebytkem ten s~nejvy¹¹í vý¹kou, oznaèíme ho~$u$.
-\:::Pokud $\exists v \in V: uv \in E,~r(uv)>0$ a~$h(u)>h(v)$, pak pøevedeme pøebytek po~hranì z~$u$ do~$v$.
-\:::V~opaèném pøípadì zvedneme $u$:~$h(u) \leftarrow h(u) + 1$.
-\:Vrátíme tok~$f$ jako výsledek.
-\endalgo
-
-Rozmysleme si, o~kolik bude vylep¹ený algoritmus G' lep¹í ne¾ ten pùvodní. Ten pùvodní mìl èasovou slo¾itost $\O(N^2M)$ a~pøevládal èlen, který odpovídal nenasyceným pøevedením. Zkusme tedy právì poèet nenasycených pøevedení odhadnout ve~vylep¹eném algoritmu o~nìco tìsnìji.
-
-\s{Lemma N' (Nenasycená pøevedení):} Algoritmus G' provede~$\O(N^3)$ nenasycených pøevedení.
-
-\proof
-Dokazovat budeme opìt pomocí potenciálové metody. Zadefinujme si~potenciál {\I nejvy¹¹í hladinu s~pøebytkem}:
-$$H := \max \{ h(v) \mid v \neq z,s ~\&~ f^\Delta(v) > 0\}.$$
-Rozdìlíme bìh algoritmu na~{\I fáze}. Ka¾dá fáze konèí tím, ¾e~se~$H$ zmìní. Jak se~mù¾e zmìnit? Buï se~$H$ zvý¹í, co¾ znamená, ¾e~nìjaký vrchol s~pøebytkem v~nejvy¹¹í hladinì byl o~1 zvednut, nebo se~$H$ sní¾í. My víme, ¾e zvednutí je v~celém algoritmu $\O(N^2)$. Zároveò si~mù¾eme uvìdomit, ¾e~$H$ je nezáporný potenciál, kdy sní¾ení i~zvý¹ení ho zmìní o~1, tedy poèet sní¾ení bude stejný jako poèet zvý¹ení, a~proto obojího je~$\O(N^2)$. Tudí¾ poèet fází je také~$\O(N^2)$.
-
-Je dùle¾ité, ¾e~bìhem jedné fáze provedeme nejvý¹e jedno nenasycené pøevedení z~ka¾dého vrcholu. Po~ka¾dém nenasyceném pøevedení po~hranì $uv$ se~toti¾ vynuluje pøebytek v~$u$ a~aby se~provedlo dal¹í nenasycené pøevedení z~vrcholu~$u$, muselo by nejdøíve být co~pøevádìt. Muselo by tedy do~$u$ nìco pøitéci. My ale víme, ¾e pøevádíme pouze shora dolù a~$u$ je v~nejvy¹¹í hladinì (to zajistí právì to vylep¹ení algoritmu), tedy nejdøíve by musel být nìjaký jiný vrchol zvednut. Tím by se~ale zmìnilo~$H$ a~skonèila by tato fáze.
-
-Proto poèet v¹ech nenasycených pøevedení bìhem jedné fáze je nejvý¹e~$N$. A ji¾ jsme dokázali, ¾e~fází je~$\O(N^2)$. Tedy poèet v¹ech nenasycených pøevedení je~$\O(N^3)$.
-\qed
-
-Tento odhad je hezký, ale stále není tìsný a~algoritmus se~chová lépe. Doka¾me si~je¹tì jeden tìsnìj¹í odhad na~poèet nenasycených pøevedení.
-
-\s{Lemma N'' (Nenasycená pøevedení):} Poèet nenasycených pøevedení je~$\O(N^2 \sqrt{M})$.
-
-\s{Poznámka:} Tato èasová slo¾itost je výhodná napøíklad pro~øídké grafy. Ty mají toti¾ pomìrnì malý poèet hran.
-
-\proof
-Rozdìlme si~fáze na~dva druhy: laciné a~drahé podle toho, kolik se~v~nich provede nenasycených pøevedení. Zvolme si~nìjaké nezáporné~$K$. Zatím nebudeme urèovat jeho hodnotu. Uvidíme, ¾e~èasová slo¾itost algoritmu bude závislá na~tomto parametru~$K$. Proto jeho hodnotu zvolíme a¾ pozdìji a~to tak, aby byla slo¾itost co nejni¾¹í.
-
-{\I Laciné fáze} budou ty, bìhem nich¾ se~provede nejvý¹e~$K$ nenasycených pøevedení. {\I Drahé fáze} budou ty ostatní, tedy takové, bìhem nich¾ se~provede více jak~$K$ nenasycených pøevedení.
-
-Teï potøebujeme odhadnout, kolik nás budou stát oba typy fází. Zaènìme s~tìmi jednodu¹¹ími -- s~lacinými. Víme, ¾e~v¹ech fází je~$\O(N^2)$. Tìch laciných bude tedy urèitì také~$O(N^2)$. Nenasycených pøevedení se~bìhem jedné laciné fáze provede nejvíce~$K$. Tedy celkem se~bìhem laciných fází provede~$\O(N^2K)$ nenasycených pøevedení.
-
-Pro~poèet nenasycených pøevedení v~drahých fázích si~zaveïme nový potenciál definovaný následovnì:
-$$\Phi := \sum_{\scriptstyle{v \ne z,s} \atop \scriptstyle{f^{\Delta}(v) \ne 0}} {p(v) \over K},$$
-kde~$p(v)$ je poèet takových vrcholù~$u$, které nejsou vý¹e ne¾~$v$. Neboli
-$$p(v) = \vert \{ u \in V \mid h(u) \leq h(v) \} \vert.$$
-Tedy platí, ¾e~$p(v)$ je v¾dy nezáporné a~nejvý¹e má hodnotu~$N$. Dále víme, ¾e~$\Phi$ bude v¾dy nezáporné (nebo» je to souèet nezáporných èlenù) a~nejvý¹e bude nabývat hodnoty~$N^2 \over K$. Rozmysleme si, jak nám ovlivní tento potenciál na¹e tøi operace:
-\itemize\ibull
-\:{\bf Zvednutí}: Za~ka¾dý zvednutý vrchol pøibude nejvý¹e~$N \over K$ (tento vrchol mù¾e být nadzvednut nejvý¹e nad~v¹echny ostatní vrcholy) a~mo¾ná nìco ubude (napø. kdy¾ vrchol vyzvedneme na~úroveò k~ostatním).
-\:{\bf Nasycené pøevedení} po~hranì $uv$: Mù¾e vynulovat pøebytek ve~vrcholu~$u$, pak se~$\Phi$ sní¾í. Mù¾e zvý¹it pøebytek ve~$v$ z~nuly, pak se~$\Phi$ zvý¹í. Ale nejvý¹e se~zvý¹í o~$N \over K$, nebo» do~$\Phi$ pøibude jen jeden sèítanec za~vrchol $v$ a~ten pøispìje nejvý¹e hodnotou~$N \over K$ (pod ním mù¾e být nejvíce~$N$ vrcholù).
-\:{\bf Nenasycená pøevedení} po~hranì $uv$ v~drahých fázích: Tato operace vynuluje pøebytek v~$u$, tedy~$\Phi$ klesne alespoò o~$p(u) \over K$. Zároveò mù¾e zvý¹it pøebytek ve~$v$ z~nuly, ale~$\Phi$ stoupne nejvý¹e o~$p(v) \over K$. Celkem tedy~$\Phi$ klesne alespoò o~$p(u) - p(v) \over K$.
-\endlist
-Uvìdomme si, ¾e~pokud pøevádíme po~hranì~$uv$, tak platí, ¾e~$h(u) = h(v) + 1$. Pak~$p(u) - p(v)$ je pøesnì poèet vrcholù na~hladinì~$H$. Tìch je alespoò tolik, kolik je nenasycených pøevedení bìhem jedné fáze (to jsme dokázali ji¾ v~lemmatu N'), a~my jsme si~zadefinovali, ¾e v~drahé fázi je poèet nenasycených pøevedení alespoò~$K$. Tedy~$p(u) - p(v) > K$. Proto bìhem jednoho nenasyceného pøevedení~$\Phi$ klesne alespoò o~${K \over K} = 1$. Nenasycená pøevedení potenciál nezvy¹ují.
-
-Potenciál~$\Phi$ se~mù¾e zvìt¹it pouze pøi~operacích zvednutí a~nasycené pøevedení. Zvednutí se~provede celkem~$\O(N^2)$ a~ka¾dé zvý¹í potenciál nejvý¹e o~$N \over K$. Nasycených pøevedení se provede celkem~$\O(NM)$ a~ka¾dé zvý¹í potenciál takté¾ nejvý¹e o~$N \over K$. Celkem se~tedy~$\Phi$ zvý¹í nejvý¹e o
-$${N \over K} \O(N^2) + {N \over K} \O(NM) = \O \left({N^3 \over K} + {N^2M \over K}\right).$$
-
-Teï vyu¾ijeme toho, ¾e~$\Phi$ je nezáporný potenciál, tedy kdy¾ ka¾dé nenasycené pøevdení v~drahé fázi sní¾í~$\Phi$ alespoò o~1, tak v¹ech nenasycených pøevdení v~drahých fázích je~$\O({N^3 \over K} + {N^2M \over K})$. U¾ jsme ukázali, ¾e~nenasycených pøevední v~laciných fázích je~$\O(N^2K)$. Proto celkem v¹ech nenasycených pøevedení je
-$$\O \left(N^2K + {N^3 \over K} + {N^2M \over K} \right) = \O \left(N^2K + {N^2M \over K} \right)$$
-(nebo» pro~souvislé grafy platí, ¾e~$M \geq N \Rightarrow N^2M \geq N^3$). A~my chceme, aby jich bylo co nejménì. Tato funkce má minimum tehdy, kdy¾ $N^2K = {N^2M \over K}$, èili $K = \sqrt{M}$.
-
-Proto v¹ech nenasycených pøevedení je  $\O(N^2\sqrt{M})$.
-\qed
-\bye
diff --git a/old/3-goldberg/Goldberg01.eps b/old/3-goldberg/Goldberg01.eps
deleted file mode 100644 (file)
index 70be6d9..0000000
+++ /dev/null
@@ -1,517 +0,0 @@
-%!PS-Adobe-3.0 EPSF-3.0
-%%Creator: inkscape 0.46
-%%Pages: 1
-%%Orientation: Portrait
-%%BoundingBox: 0 0 311 196
-%%HiResBoundingBox: 7.6535002e-09 -2.5149246e-06 310.80097 195.23405
-%%EndComments
-%%Page: 1 1
-0 196 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 0 0 1 -7.2922934 -15.871617] concat
-gsave [1 0 0 1 -105.66802 -41.295546] concat
-0 0 0 setrgbcolor
-[] 0 setdash
-0.80000001 setlinewidth
-0 setlinejoin
-0 setlinecap
-newpath
-327.93522 188.25911 moveto
-327.93522 250.38705 279.87044 300.80972 220.64777 300.80972 curveto
-161.42509 300.80972 113.36031 250.38705 113.36031 188.25911 curveto
-113.36031 126.13117 161.42509 75.708496 220.64777 75.708496 curveto
-279.87044 75.708496 327.93522 126.13117 327.93522 188.25911 curveto
-closepath
-stroke
-grestore
-0 0 0 setrgbcolor
-[] 0 setdash
-0.80000001 setlinewidth
-0 setlinejoin
-0 setlinecap
-newpath
-280.82453 35.083625 moveto
-274.32214 36.15662 267.81146 37.271113 261.46388 39.07255 curveto
-256.08401 40.577261 250.81811 42.517725 245.82341 45.028881 curveto
-242.79426 46.611213 239.80154 48.311743 237.07234 50.377073 curveto
-234.88576 52.176848 232.73392 54.282673 231.7761 57.010153 curveto
-230.78471 60.185495 231.63558 63.732075 233.65009 66.325725 curveto
-236.75865 70.711495 240.33853 74.740745 243.39187 79.167695 curveto
-247.43465 84.791545 250.49703 91.075895 252.79232 97.599345 curveto
-255.73385 105.89744 257.62345 114.54784 258.74508 123.2725 curveto
-259.85691 132.25533 260.47539 141.30252 260.54328 150.35388 curveto
-260.61846 156.41558 260.15107 162.46548 259.4918 168.48702 curveto
-258.79686 174.88094 257.75376 181.2491 256.18144 187.48805 curveto
-254.45425 194.02304 252.04233 200.40052 248.79575 206.33576 curveto
-247.2219 209.23818 245.37178 211.98356 243.24102 214.50717 curveto
-239.09684 219.50186 234.37978 223.98307 229.5905 228.35067 curveto
-228.29104 229.49906 226.85166 230.63983 226.19953 232.30237 curveto
-225.88232 233.85635 227.01743 235.15405 228.04206 236.16404 curveto
-230.86374 238.84504 234.40416 240.56607 237.77898 242.42967 curveto
-244.47556 245.58462 251.01265 249.15643 258.0782 251.44753 curveto
-263.50053 253.31902 269.10056 254.64678 274.77642 255.46817 curveto
-281.19473 256.48978 287.71445 256.73692 294.20191 256.45025 curveto
-299.14227 256.2547 304.06877 255.67187 308.93321 254.79402 curveto
-314.84679 253.66015 320.68583 252.06888 326.29328 249.86487 curveto
-335.79003 246.03402 344.80686 240.95359 352.85154 234.60416 curveto
-359.46392 229.40402 365.5126 223.47549 370.79463 216.92672 curveto
-375.60643 210.82002 379.79681 204.2236 383.33905 197.30459 curveto
-387.6165 188.82584 390.7268 179.78059 392.82506 170.52565 curveto
-394.15871 164.50115 394.96709 158.35759 395.28813 152.19661 curveto
-395.7406 141.38443 394.72997 130.5209 392.3705 119.96144 curveto
-390.72701 112.77723 388.56478 105.6875 385.51691 98.966625 curveto
-382.44736 92.078085 378.75152 85.457485 374.33557 79.338215 curveto
-369.33811 72.377305 363.48786 66.041715 357.08025 60.359605 curveto
-351.79315 55.738659 346.09511 51.583256 339.99622 48.096383 curveto
-334.45248 44.913288 328.59052 42.258109 322.49914 40.311008 curveto
-314.227 37.734459 305.64752 36.306252 297.06034 35.276544 curveto
-292.71018 34.814917 288.33133 34.464891 283.95627 34.610909 curveto
-282.91236 34.768481 281.86844 34.926053 280.82453 35.083625 curveto
-closepath
-stroke
-0 0 0 setrgbcolor
-[] 0 setdash
-1 setlinewidth
-0 setlinejoin
-0 setlinecap
-newpath
-280.5668 226.72064 moveto
-148.58299 192.30769 lineto
-stroke
-gsave [0.77411904 0.20184081 -0.20184081 0.77411904 158.25948 194.8307] 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
-286.23483 122.89173 moveto
-163.96762 131.39375 lineto
-stroke
-gsave [0.79807286 -0.055495103 0.055495103 0.79807286 173.94353 130.70006] 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
-267.20648 73.68421 moveto
-156.27531 100.80972 lineto
-stroke
-gsave [0.77710466 -0.19002198 0.19002198 0.77710466 165.98912 98.434445] 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
-284.1675 181.73326 moveto
-163.31146 161.35254 lineto
-stroke
-gsave [0.78886172 0.13303075 -0.13303075 0.78886172 173.17223 163.01542] 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 [1 0 0 1 -10.931174 -14.170041] concat
-gsave
-0 0 0 setrgbcolor
-newpath
-69.75 150.46416 moveto
-69.749976 149.90952 69.301976 149.20552 68.406 148.35216 curveto
-67.509978 147.49885 67.061979 146.62419 67.062 145.72816 curveto
-67.061979 145.04552 67.275312 144.51219 67.702 144.12816 curveto
-68.128644 143.74419 68.704644 143.55219 69.43 143.55216 curveto
-70.411309 143.55219 71.243308 143.93619 71.926 144.70416 curveto
-72.651306 145.42952 73.013973 146.30419 73.014 147.32816 curveto
-73.013973 148.52285 72.629973 150.05885 71.862 151.93616 curveto
-71.136641 153.77085 70.219309 155.47751 69.11 157.05616 curveto
-65.824647 161.66417 62.859316 165.4615 60.214 168.44816 curveto
-57.568655 171.43483 55.840657 172.92816 55.03 172.92816 curveto
-54.645991 172.92816 54.453991 172.1815 54.454 170.68816 curveto
-54.453991 168.8535 54.304658 165.99484 54.006 162.11216 curveto
-53.707325 158.18684 53.387326 155.11485 53.046 152.89616 curveto
-52.619326 149.95218 52.149994 148.05352 51.638 147.20016 curveto
-51.125995 146.34685 50.251329 145.92019 49.014 145.92016 curveto
-48.203331 145.92019 47.563332 145.94152 47.094 145.98416 curveto
-47.094 145.15216 lineto
-48.58733 144.89619 49.888663 144.66152 50.998 144.44816 curveto
-52.107327 144.23486 52.875326 144.06419 53.302 143.93616 curveto
-53.728659 143.80819 54.112658 143.72286 54.454 143.68016 curveto
-54.795324 143.59486 55.136657 143.55219 55.478 143.55216 curveto
-56.160656 143.55219 56.843322 146.06952 57.526 151.10416 curveto
-58.251321 156.13885 58.741987 161.53617 58.998 167.29616 curveto
-60.982 165.24816 lineto
-63.243316 162.85884 65.26998 160.17084 67.062 157.18416 curveto
-68.853977 154.15485 69.749976 151.91485 69.75 150.46416 curveto
-fill
-grestore
-grestore
-gsave
-0 0 0 setrgbcolor
-newpath
-112.67278 62.815617 moveto
-112.67278 63.967617 lineto
-94.960781 63.967617 lineto
-94.960781 62.815617 lineto
-97.264756 62.575618 98.776754 62.215619 99.496781 61.735617 curveto
-100.21675 61.25562 100.57675 60.343621 100.57678 58.999617 curveto
-100.57675 58.615622 100.52875 57.991623 100.43278 57.127617 curveto
-98.992781 47.695617 lineto
-83.152781 47.695617 lineto
-79.048781 55.831617 lineto
-78.088775 57.751623 77.608776 59.239622 77.608781 60.295617 curveto
-77.608776 61.20762 77.848775 61.807619 78.328781 62.095617 curveto
-78.856774 62.383619 80.032773 62.623618 81.856781 62.815617 curveto
-81.856781 63.967617 lineto
-68.392781 63.967617 lineto
-68.392781 62.815617 lineto
-69.880783 62.527618 71.104782 61.807619 72.064781 60.655617 curveto
-73.07278 59.503621 74.944778 56.575624 77.680781 51.871617 curveto
-98.560781 15.871617 lineto
-100.43278 15.871617 lineto
-107.20078 56.623617 lineto
-107.68075 59.263622 108.20875 60.91962 108.78478 61.591617 curveto
-109.36074 62.215619 110.65674 62.623618 112.67278 62.815617 curveto
-84.664781 45.103617 moveto
-98.632781 45.103617 lineto
-95.464781 26.383617 lineto
-84.664781 45.103617 lineto
-fill
-grestore
-gsave
-0 0 0 setrgbcolor
-newpath
-287.18781 17.761328 moveto
-287.18781 18.913328 lineto
-285.65176 18.961374 284.30776 19.921373 283.15581 21.793328 curveto
-256.29981 66.073328 lineto
-254.93181 66.073328 lineto
-248.81181 28.633328 lineto
-248.0438 24.121369 247.3958 21.433372 246.86781 20.569328 curveto
-246.3878 19.705374 245.1398 19.153374 243.12381 18.913328 curveto
-243.12381 17.761328 lineto
-260.47581 17.761328 lineto
-260.47581 18.913328 lineto
-258.21979 19.153374 256.73179 19.513374 256.01181 19.993328 curveto
-255.29179 20.473373 254.93179 21.337372 254.93181 22.585328 curveto
-254.93179 23.06537 254.95579 23.42537 255.00381 23.665328 curveto
-259.75581 55.561328 lineto
-274.58781 29.929328 lineto
-277.08377 25.609368 278.33177 22.753371 278.33181 21.361328 curveto
-278.33177 20.065373 276.81977 19.249374 273.79581 18.913328 curveto
-273.79581 17.761328 lineto
-287.18781 17.761328 lineto
-fill
-grestore
-gsave
-0 0 0 setrgbcolor
-newpath
-fill
-grestore
-gsave
-0 0 0 setrgbcolor
-newpath
-296.71543 16.825328 moveto
-301.89943 16.825328 lineto
-322.63543 66.073328 lineto
-317.52343 66.073328 lineto
-296.71543 16.825328 lineto
-fill
-grestore
-gsave
-0 0 0 setrgbcolor
-newpath
-fill
-grestore
-gsave
-0 0 0 setrgbcolor
-newpath
-378.24418 63.625328 moveto
-378.24418 64.777328 lineto
-360.53218 64.777328 lineto
-360.53218 63.625328 lineto
-362.83616 63.38533 364.34816 63.02533 365.06818 62.545328 curveto
-365.78816 62.065331 366.14816 61.153332 366.14818 59.809328 curveto
-366.14816 59.425334 366.10016 58.801334 366.00418 57.937328 curveto
-364.56418 48.505328 lineto
-348.72418 48.505328 lineto
-344.62018 56.641328 lineto
-343.66018 58.561335 343.18018 60.049333 343.18018 61.105328 curveto
-343.18018 62.017331 343.42018 62.617331 343.90018 62.905328 curveto
-344.42818 63.19333 345.60418 63.43333 347.42818 63.625328 curveto
-347.42818 64.777328 lineto
-333.96418 64.777328 lineto
-333.96418 63.625328 lineto
-335.45219 63.33733 336.67619 62.617331 337.63618 61.465328 curveto
-338.64418 60.313333 340.51618 57.385336 343.25218 52.681328 curveto
-364.13218 16.681328 lineto
-366.00418 16.681328 lineto
-372.77218 57.433328 lineto
-373.25215 60.073333 373.78015 61.729332 374.35618 62.401328 curveto
-374.93215 63.02533 376.22815 63.43333 378.24418 63.625328 curveto
-350.23618 45.913328 moveto
-364.20418 45.913328 lineto
-361.03618 27.193328 lineto
-350.23618 45.913328 lineto
-fill
-grestore
-gsave
-0 0 0 setrgbcolor
-newpath
-321.33714 220.85778 moveto
-321.76378 220.85778 322.46778 220.40978 323.44914 219.51378 curveto
-324.43044 218.57512 325.43311 217.55112 326.45714 216.44178 curveto
-327.22514 217.08178 lineto
-324.87844 219.98312 323.12911 221.88178 321.97714 222.77778 curveto
-320.82511 223.67378 319.60912 224.12178 318.32914 224.12178 curveto
-316.62245 224.12178 315.76912 223.24711 315.76914 221.49778 curveto
-315.76912 220.43112 316.25979 217.97779 317.24114 214.13778 curveto
-314.42512 218.10579 312.14246 220.77245 310.39314 222.13778 curveto
-308.64379 223.50311 306.63846 224.18578 304.37714 224.18578 curveto
-302.32913 224.18578 300.72913 223.56711 299.57714 222.32978 curveto
-298.42514 221.04978 297.84914 219.30045 297.84914 217.08178 curveto
-297.84914 213.79646 298.76647 210.44713 300.60114 207.03378 curveto
-302.47847 203.62047 304.84646 200.80447 307.70514 198.58578 curveto
-310.60646 196.36714 313.42246 195.25781 316.15314 195.25778 curveto
-319.01178 195.25781 320.71845 196.49514 321.27314 198.96978 curveto
-321.97714 195.89778 lineto
-322.16914 195.70578 lineto
-326.07314 195.25778 lineto
-326.52114 195.44978 lineto
-326.47844 195.62048 326.35044 196.06848 326.13714 196.79378 curveto
-322.33978 210.70313 320.44112 218.44712 320.44114 220.02578 curveto
-320.44112 220.58045 320.73978 220.85778 321.33714 220.85778 curveto
-320.12114 200.56978 moveto
-320.12112 199.37514 319.75845 198.43647 319.03314 197.75378 curveto
-318.35045 197.02847 317.41178 196.66581 316.21714 196.66578 curveto
-313.87046 196.66581 311.63046 198.03114 309.49714 200.76178 curveto
-307.40646 203.49247 305.8278 206.35113 304.76114 209.33778 curveto
-303.73713 212.28179 303.22513 214.58579 303.22514 216.24978 curveto
-303.22513 217.70045 303.56647 218.87379 304.24914 219.76978 curveto
-304.9318 220.62312 305.8278 221.04978 306.93714 221.04978 curveto
-308.94246 221.04978 310.99046 219.89778 313.08114 217.59378 curveto
-315.17179 215.24712 316.85712 212.47379 318.13714 209.27378 curveto
-319.45978 206.0738 320.12112 203.17247 320.12114 200.56978 curveto
-fill
-grestore
-gsave
-0 0 0 setrgbcolor
-newpath
-116.35173 140.22451 moveto
-116.35173 139.13651 lineto
-119.55172 138.75255 122.81572 138.26189 126.14373 137.66451 curveto
-126.46373 137.98451 lineto
-119.80773 162.81651 lineto
-122.06905 159.2752 124.13838 156.7792 126.01573 155.32851 curveto
-127.89304 153.87787 129.94104 153.15254 132.15973 153.15251 curveto
-134.29304 153.15254 136.0637 153.87787 137.47173 155.32851 curveto
-138.8797 156.7792 139.5837 158.61387 139.58373 160.83251 curveto
-139.5837 164.11786 138.5597 167.42452 136.51173 170.75251 curveto
-134.50637 174.03785 131.92504 176.74718 128.76773 178.88051 curveto
-125.61038 181.01384 122.45305 182.08051 119.29573 182.08051 curveto
-117.50372 182.08051 115.62639 181.69651 113.66373 180.92851 curveto
-111.74373 180.16051 110.78373 179.41385 110.78373 178.68851 curveto
-110.78373 178.43251 lineto
-119.48773 146.36851 lineto
-120.17039 143.97921 120.51172 142.50722 120.51173 141.95251 curveto
-120.51172 141.22722 120.27705 140.77922 119.80773 140.60851 curveto
-119.38105 140.39522 118.22905 140.26722 116.35173 140.22451 curveto
-119.23173 180.60851 moveto
-121.40772 180.60851 123.47705 179.84051 125.43973 178.30451 curveto
-127.44504 176.76852 129.04504 174.93385 130.23973 172.80051 curveto
-131.43437 170.66719 132.37304 168.59786 133.05573 166.59251 curveto
-133.78104 164.58719 134.1437 162.9872 134.14373 161.79251 curveto
-134.1437 160.08587 133.73837 158.74187 132.92773 157.76051 curveto
-132.11704 156.7792 131.02904 156.28854 129.66373 156.28851 curveto
-127.74371 156.28854 125.90905 157.20587 124.15973 159.04051 curveto
-122.41038 160.83253 120.98105 162.9872 119.87173 165.50451 curveto
-118.76239 168.02186 117.88772 170.47519 117.24773 172.86451 curveto
-116.60772 175.21118 116.28772 177.06718 116.28773 178.43251 curveto
-116.28772 179.88318 117.26905 180.60851 119.23173 180.60851 curveto
-fill
-grestore
-gsave [3.8010801 0 0 3.658223 -475.86267 -552.55121] concat
-gsave
-0 0 0 setrgbcolor
-newpath
-144.12956 193.31984 moveto
-144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
-141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
-141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
-143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
-closepath
-fill
-grestore
-0 0 0 setrgbcolor
-[] 0 setdash
-0.80000001 setlinewidth
-0 setlinejoin
-0 setlinecap
-newpath
-144.12956 193.31984 moveto
-144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
-141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
-141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
-143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
-closepath
-stroke
-grestore
-gsave [3.8010801 0 0 3.658223 -403.59545 -516.51882] concat
-gsave
-0 0 0 setrgbcolor
-newpath
-144.12956 193.31984 moveto
-144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
-141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
-141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
-143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
-closepath
-fill
-grestore
-0 0 0 setrgbcolor
-[] 0 setdash
-0.80000001 setlinewidth
-0 setlinejoin
-0 setlinecap
-newpath
-144.12956 193.31984 moveto
-144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
-141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
-141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
-143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
-closepath
-stroke
-grestore
-gsave [3.8010801 0 0 3.658223 -253.79788 -476.43785] concat
-gsave
-0 0 0 setrgbcolor
-newpath
-144.12956 193.31984 moveto
-144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
-141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
-141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
-143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
-closepath
-fill
-grestore
-0 0 0 setrgbcolor
-[] 0 setdash
-0.80000001 setlinewidth
-0 setlinejoin
-0 setlinecap
-newpath
-144.12956 193.31984 moveto
-144.12956 194.10203 143.49474 194.73684 142.71255 194.73684 curveto
-141.93037 194.73684 141.29555 194.10203 141.29555 193.31984 curveto
-141.29555 192.53765 141.93037 191.90284 142.71255 191.90284 curveto
-143.49474 191.90284 144.12956 192.53765 144.12956 193.31984 curveto
-closepath
-stroke
-grestore
-grestore
-grestore
-showpage
-%%EOF
diff --git a/old/3-goldberg/Makefile b/old/3-goldberg/Makefile
deleted file mode 100644 (file)
index 6330e4c..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-P=3-goldberg
-
-include ../Makerules