]> mj.ucw.cz Git - ads2.git/commitdiff
Korektury Goldberga.
authorMartin Mares <mj@ucw.cz>
Sun, 1 Nov 2009 21:41:16 +0000 (22:41 +0100)
committerMartin Mares <mj@ucw.cz>
Sun, 1 Nov 2009 21:41:16 +0000 (22:41 +0100)
3-goldberg/3-goldberg.tex

index b301a269c9ad3d50ad9e62701c71b040c1f7a0a7..ce5857f7dd67113d20c97ec94f599288a19fc395 100644 (file)
@@ -4,26 +4,27 @@
 
 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: $$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:} 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:} Mìjme sí» $S=(V,E,z,s,c)$, tok~$f$ a~libovolnou hranu~$uv$. Pak $r(uv)$ je {\I rezerva} hrany $uv$ a~je definovaná: $$r(uv) = c(uv) - f(uv) + f(vu).$$ Rezerva hrany znaèí, co je¹tì je mo¾no po~té hranì poslat.
+\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:} Budeme pou¾ívat znaèení, ¾e~$N$ je poèet vrcholù a~$M$ je poèet hran, tedy~$N = \vert V \vert$ a~$M = \vert E \vert$.
+\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~nìèím, co pravdìpodobnì tok není (budeme to nazývat {\I vlna}), a~postupnì to zmen¹uje a¾ na~korektní tok.
+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:
-       \itemize\idot
-       \:$\forall e \in E : f(e) \leq c(e) $
-       \:$ \forall v \in V \setminus \{z, s\} : f^{\Delta}(v) \geq 0 $. 
+       \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 vlna. Nebo» $\forall e \in E : f(e) \leq c(e) $ a~$\forall v \ne z,s: f^{\Delta}(v) = 0$.
+\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í vrcholL~$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\idot
+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$.
@@ -32,16 +33,15 @@ Algoritmus bude pot
        
 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í:} Podímnky pro~pøevedení pøebytku po~hranì $uv \in E$:
+\s{Shrnutí:} Podnky 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{Definice:} Øekneme, ¾e pøevedení je {\I nasycené}, pokud po~pøevodu rezerva na~hranì~$uv$ klesla na~nulu, tedy $r(uv)=0$. Naopak pøevedení je {\I nenasycené}, pokud po~pøevodu klesl pøebytek ve~vrcholu~$u$ na~nulu, tedy $f^{\Delta}(u) = 0$. Pokud $r(uv)=0$ a~$f^{\Delta}(u) = 0$, budeme pøevedení pova¾ovat za~{\I nasycené}.
 
-\s{Operace:} Pro~vrchol~$u \in V$ definujme {\I zvednutí vrcholu}: 
+\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$.
 
 
@@ -50,28 +50,28 @@ Pokud b
 \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$: 
+\: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$.
+\::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~koneènost Goldbergova algoritmu.
+Nyní bude následovat nìkolik lemmat a~invariantù, jimi¾ doká¾eme správnost a~èasovou slo¾itost Goldbergova algoritmu.
 
-\s{Invariant A (základ):} 
+\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 algoritmu.
+       \:$h(z)=N$ a~$h(s)=0$ po~celou dobu bìhu algoritmu.
        \endlist
 
-\proof Indukcí dle bìhu algoritmu.
+\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:
+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 je zvy¹uje.
+       \: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
 
@@ -86,33 +86,32 @@ Na za
        \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 zlep¹ující cesta, tedy cesta ze~zdroje do~stoku, její¾ v¹echny hrany mají kladnou rezervu. 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.
+       \: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{Definice:} Cestu~$P$ nazveme {\I nenasycenou}, pokud v¹echny její hrany mají kladnou rezervu. Neboli $\forall e \in P: r(e) > 0$.
-
+       
 \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
-Mìjme nìjaký vrchol~$v \in V$ takový, ¾e $f^{\Delta}(v) > 0$. Potom definujme mno¾inu $A := \{ u \in V : \exists$ nenasycená cesta z~$v$ do~$u \}$. 
+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$. 
+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.$$
+ $$\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è $\sum_{ab \in E \cap ( V \setminus A \times A )} f(ab) = 0$. Mìjme vrcholy $a \in V \setminus A$ a~$b \in A$ takové, ¾e $ab\in E$. O~nich víme, ¾e $r(ab) = 0$ (jinak by~$a$ patøilo do~$A$) $\Rightarrow f(ab)=0$. Proto do~$A$ nic nepøitéká.
+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}
 
-Druhý èlen $\sum_{ab \in E \cap (  A \times V \setminus A )} f(ab) \geq 0$ je zøejmý, nebo» tok na~hranì je v¾dy nezáporný a~souèet nezáporných èísel je nezáporné èíslo.
+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.
 
@@ -130,10 +129,19 @@ Kdyby existoval vrchol~$v$ s~v
 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. Ale nejvý¹e mù¾eme hranu zvednout~$2N$-krát. V¹ech hran je~$M$, proto poèet v¹ech nasycených pøevedení je nejvý¹e~$NM$.
+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)$.
@@ -148,7 +156,7 @@ Nyn
        \: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. 
+       \: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)$.
@@ -156,13 +164,13 @@ Nyn
 
 \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. 
+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 
+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$. %TODO
+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:}
 
@@ -197,20 +205,75 @@ Vid
 \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).$ 
+\: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)$.
 
-%Dokázali jsme, ¾e algoritmus má èasovou slo¾itost $\O(N^2M)$ pro~libovolnou posloupnost zvedání a~pøevádìní. Nabízí se~otázka, zda není mo¾né vhodným výbìrem tìchto operací výpoèet zrychlit. Uká¾eme, ¾e pokud v~$5.$ kroku algoritmu budeme v¾dy brát vrchol~$u$ takový, ¾e~$h(u)$ je maximální, poèet nenasycených pøevedení se~sní¾í.
+\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, ¾~ 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':} Poèet nenasycených pøevedení v~upravené verzi Goldbergova algoritmu je $\O(N^2\sqrt{M})$, co¾ je maximálnì $\O(N^3)$. Díky tomu je i~slo¾itost celého algoritmu $\O(N^3)$.
+\s{Lemma N'' (Nenasycená pøevedení):} Poèet nenasycených pøevedení je~$\O(N^2 \sqrt{M})$.
 
-%\proof 
-%Viz pøí¹tí pøedná¹ku.
+\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) = 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øevý¹ení. Zvednutí se~provede celkem~$(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