]> mj.ucw.cz Git - ads2.git/commitdiff
Goldberg: Prepis
authorMartin Mares <mj@ucw.cz>
Mon, 7 Nov 2011 22:19:46 +0000 (23:19 +0100)
committerMartin Mares <mj@ucw.cz>
Mon, 7 Nov 2011 22:19:46 +0000 (23:19 +0100)
4-goldberg/4-goldberg.tex

index 6288dfb9cfc0a154c2794ebb53f7f3cbe02bb170..8096cea24af2bd7e02db2169e2933e5ceb43f29d 100644 (file)
 
 \prednaska{4}{Goldbergùv algoritmus}{}
 
-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
+Pøedstavíme si je¹tì jeden algoritmus pro~hledání maximálního toku v~síti,
+který bude daleko jednodu¹¹í ne¾ Dinicùv algoritmus z~pøedchozí pøedná¹ky
+a po pár snadných úpravách bude mít stejnou nebo dokonce lep¹í èasovou
+slo¾itost. Jednoduchost algoritmu bude ale vykoupena trochu slo¾itìj¹ím
+rozborem jeho správnosti a efektivity.
 
-\s{Pozorování:} Ka¾dý tok~$f$ je také vlna, ale opaènì to obvykle platit nemusí.
+\h{Vlny a pøebytky}
 
-\s{Operace:} {\I Pøevedení pøebytku}
+\s{Znaèení} z~minulých pøedná¹ek, které se nám bude hodit:
 
-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)$.
+\itemize\ibull
+\:{\I sí»} $S=(V,E,z,s,c)$: $V$ je mno¾ina vrcholù, $E$ mno¾ina hran,
+$z$~{\I zdroj,} $s$~{\I spotøebiè} a $c$~funkce udávající {\I kapacity} hran.
+\:$n$ udává poèet vrcholù grafu, $m$~poèet jeho hran.
+\:$f^\Delta(v)$ je {\I pøebytek} vrcholu~$v$ pøi ohodnocení hran funkcí~$f$,
+tedy souèet hodnot~$f$ na hranách vedoucích do~$v$ minus souèet na hranách
+vedoucích z~$v$ ven.
+\:$r(uv) = c(uv) - f(uv) + f(vu)$ je {\I rezerva} hrany~$uv$; ta øíká, kolik
+jednotek toku mù¾eme po této hranì je¹tì poslat, a~to buï pøiètením po smìru
+hrany nebo odeètením proti smìru. Hranám s~kladnou rezervou øíkáme {\I nenasycené,}
+stejnì øíkáme cestám slo¾eným ze~samých takových hran.
+\endlist
 
-\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
+Pøedchozí algoritmy zaèínaly s~nulovým tokem a postupnì ho zlep¹ovaly,
+a¾ se stal maximálním. Goldbergùv algoritmus naproti tomu zaène s~ohodnocením
+hran, které ani nemusí být tokem, a~postupnì ho upravuje a zmen¹uje, a¾ se
+z~nìj stane tok, a~to dokonce maximální.
+
+\s{Definice:} Funkce $f:E \rightarrow {\bb R}_0^+$ je {\I vlna} v~síti~$S$,
+splòuje-li následující dvì podmínky:
+
+\itemize\ibull
+\:$\forall e \in E : f(e) \leq c(e)$ (vlna nepøekroèí kapacity hran),
+\:$\forall v \in V \setminus \{z, s\} : f^\Delta(v) \geq 0$ (pøebytek ve~vrcholech je nezáporný).
+\endlist
+
+Ka¾dý tok je tedy vlnou, ale opaènì tomu tak být nemusí -- potøebujeme se
+postupnì zbavit nenulových pøebytkù ve~v¹ech vrcholech kromì zdroje a spotøebièe.
+K~tomu nám bude slou¾it následující operace:
+
+\s{Definice:} {\I Pøevedení pøebytku} po hranì~$uv$, pøièem¾ $f^\Delta(u)>0$ a $r(uv)>0$,
+provedeme tak, ¾e po hranì~$uv$ po¹leme $\delta = \min(f^\Delta(u), r(uv))$ jednotek toku,
+podobnì jako v~pøedchozích algoritmech buï pøiètením po smìru nebo odeètením proti smìru.
+
+\s{Pozorování:} Pøevedení zmìní pøebytky a rezervy následovnì:
 
+$$\eqalign{
+f'^\Delta(u) &= f^\Delta(u) - \delta \cr
+f'^\Delta(v) &= f^\Delta(v) + \delta \cr
+r'(uv) &= r(uv) - \delta \cr
+r'(vu) &= r(vu) + \delta \cr
+}$$
 
-\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$.
+Rádi bychom postupným pøevádìním v¹echny pøebytky buï pøepravili do spotøebièe
+nebo, pokud je vlna pøíli¹ velká, je pøelili zpìt do zdroje. Chceme se ov¹em vyhnout
+pøelévání pøebytkù tam a zase zpìt, tak¾e vrcholùm pøiøadíme {\I vý¹ky} -- to budou
+nìjaká pøirozená èísla.
 
+Pøebytek pak budeme ochotni pøevádìt pouze z~vy¹¹ího vrcholu do~ni¾¹ího. Pokud se
+stane, ¾e nalezneme vrchol s~pøebytkem, ze kterého nevede ¾ádná nenasycená hrana
+smìrem dolù, budeme tento vrchol {\I zvedat} -- tedy zvy¹ovat mu vý¹ku po jedné,
+ne¾ se dostane dostateènì vysoko, aby z~nìj pøebytek mohl odtéci.
 
-\s{Algoritmus (Goldbergùv)}
+Získáme tak následující algoritmus:
+
+\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).
+\:Nastavíme poèáteèní vý¹ky (zdroj ve~vý¹ce~$n$, ostatní ve~vý¹ce~0):
+\::$h(z)\leftarrow n$
+\::$h(v)\leftarrow 0$ pro v¹echny $v\ne z$
+\:Vytvoøíme poèáteèní vlnu (v¹echny hrany ze~$z$ na maximum, jinde~0):
+\::$f\leftarrow \hbox{v¹ude nulová funkce}$
+\::$f(zv)\leftarrow c(zv)$, kdykoliv $zv\in E$
 \: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$.
+\::Pokud $\exists v \in V: uv \in E,~r(uv)>0$ a~$h(u)>h(v)$, \hfil\break {\I pøevedeme pøebytek} po~hranì~$uv$.
+\::V~opaèném pøípadì {\I 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.
+\h{Analýza algoritmu}
+
+Algoritmus je jednoduchý, ale na první pohled není vidìt ani to, ¾e se v¾dy
+zastaví, nato¾ ¾e by mìl vydat maximální tok. Postupnì o~nìm doká¾eme nìkolik
+invariantù a lemmat a postupnì se dobereme k~dùkazu správnosti a èasové slo¾itosti.
 
 \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
+\numlist \ndotted
+\:Funkce~$f$ je v~ka¾dém kroku algoritmu vlna.
+\:Vý¹ka $h(v)$ ¾ádného vrcholu~$v$ nikdy neklesá.
+\:$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).
+\proof Indukcí dle poètu prùchodù cyklem (7. -- 9. 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
+\itemize\ibull
+\:Po inicializaci algoritmu je v¹e v~poøádku: pøebytky v¹ech vrcholù mimo zdroj
+jsou nezáporné, vý¹ky souhlasí.
+\:Pøi pøevedení pøebytku: Z~definice pøevedení pøímo plyne, ¾e neporu¹uje
+kapacity a nevytváøí záporné pøebytky. Vý¹ky se nemìní.
+\:Pøi zvednutí vrcholu: Tehdy se naopak mìní jen vý¹ky, ale pouze u~vrcholù rùzných
+od~zdroje a stoku. Vý¹ky navíc pouze rostou.
+\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).
+\s{Invariant S (o~Spádu):} Neexistuje hrana $uv \in E: r(uv)>0$ \& $h(u)
+> h(v)+1$ (nenasycená hrana se~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 výpoètu by se~tento invariant mohl pokazit pouze
+dvìma zpùsoby:
 
-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$.
+\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 pøevádìli
+pøebytek z~ni¾¹ího vrcholu na~vy¹¹í.
+\qeditem
+\endlist
 
 \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
+\proof 
+Nejprve uká¾eme, ¾e {\I $f$ je tok:} Omezení na kapacity splòuje tok stejnì
+jako vlna, tak¾e postaèí dokázat, ¾e platí Kirchhoffùv zákon. Ten po¾aduje,
+aby pøebytky ve~v¹ech vrcholech kromì zdroje a spotøebièe byly nulové. To ov¹em
+musí být, proto¾e nenulový pøebytek by musel být kladný a algoritmus by se dosud
+nezastavil.
+
+Zbývá zdùvodnit, ¾e {\I $f$ je maximální:} Pro spor pøedpokládejme, ¾e tomu tak není.
+Ze~správnosti Fordova-Fulkersonova algoritmu plyne, ¾e tehdy musí existovat nenasycená
+cesta ze~zdroje do~stoku. Uva¾me 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á spád~$n$,
+ale mù¾e mít nejvý¹e~$n-1$ hran. Proto se v~ní nachází alespoò jedna hrana se~spádem
+alespoò~2. Jeliko¾ je tato hrana souèástí nenasycené cesty, musí být sama nenasycená,
+co¾ je spor s~invariantem~S. Tok je tedy maximální.
+\qed
        
-\s{Lemma C (Cesta):} Mìjme vrchol $v \in V$. Pokud $f^{\Delta}(v) > 0$, pak existuje nenasycená cesta z~vrcholu~$v$ do~zdroje.
+\s{Lemma C (Cesta do zdroje):} Mìjme vrchol~$v$, jeho¾ pøebytek $f^{\Delta}(v)$ je kladný.
+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á.
+Buï~$v$ vrchol s~kladným pøebytkem.
+Uva¾me mno¾inu $A := \{ u \in V \mid \hbox{existuje nenasycená cesta z~$v$ do~$u$} \}$.
+Uká¾eme, ¾e tato mno¾ína obsahuje zdroj.
+
+Pou¾ijeme u¾ mírnì okoukaný dùkazový trik: seèteme pøebytky ve~v¹ech vrcholech mno¾iny~$A$.
+V¹echny hrany le¾ící celé uvnitø~$A$ nebo celé venku pøispìjí dohromady nulou.
+Nenulou mohou pøispìt pouze hrany vedoucí ven z~$A$ nebo naopak zvenku dovnitø.
+Získáme:
+$$
+       \sum_{u \in A}f^{\Delta}(u) =
+       \underbrace{ \sum_{ba \in E(V\setminus A,A)} f(ba) }\limits_{=0} -
+       \underbrace{ \sum_{ab \in E(A,V\setminus A)} f(ab) }\limits_{\geq 0}
+       \leq~0.
+$$
+
+Uka¾me si, proè je první svorka rovna nule. Mìjme hranu~$ab$ ($a\in A$, $b \in V \setminus A$).
+Ta musí mít nulovou rezervu -- jinak by toti¾ i vrchol~$b$ patøil do~$a$.
+Proto po hranì $ba$ nemù¾e nic téci.
 
 \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.
+Druhá svorka je evidentnì nezáporná, proto¾e je to souèet nezáporných ohodnocení hran.
 
-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.
+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é nìjaký vrchol
+se~záporným pøebytkem -- a~jediný takový je zdroj. Tím je dokázáno, ¾e $z$ le¾í v~$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$.
+\s{Invariant V (Vý¹ka):} Pro ka¾dý vrchol~$v$ je $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).
+Kdyby existoval vrchol~$v$ s~vý¹kou $h(v) > 2n$, mohl se do této vý¹ky
+dostat pouze zvednutím z~vý¹ky alespoò~$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 nicménì pøekonávala spád alespoò~$n$, ale mohla mít nejvý¹e~\hbox{$n-1$} hran (na cestách
+se vrcholy neopakují). Tudí¾ musela obsahovat nenasycenou hranu se~spádem alespoò~2, co¾ je
+spor s~invariantem~S.
 \qed
 
-\s{Lemma Z (poèet Zvednutí):} Poèet v¹ech zvednutí je maximálnì~$2n^{2}$.
+\s{Lemma Z (poèet Zvednutí):} Bìhem výpoètu nastane nejvý¹e $2n^{2}$ zvednutí.
 
 \proof
-Staèí si~uvìdomit, ¾e ka¾dý vrchol mù¾eme zvednout maximálnì~$2n$-krát a~vrcholù je~$n$.
+Z~pøedchozího invariantu plyne, ¾e ka¾dý vrchol mohl být zvednut nejvý¹e $2n$-krát.
+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{Definice:} Øekneme, ¾e pøevedení po hranì~$uv$ je {\I nasycené}, pokud po~pøevodu
+rezerva $r(uv)$ klesla na~nulu. V~opaèném pøípadì je {\I nenasycené}, a~tehdy urèitì
+klesne pøebytek $f^\Delta(u)$ na~nulu (to se nicménì mù¾e stát i pøi nasyceném pøevedení).
 
 \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$.
+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 invariant~S). Ne¾ nastane
+dal¹í pøevedení po~této hranì, musíme její rezervu z~nuly opìt zvý¹it.
+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 tedy, ¾e mezi ka¾dými dvìma nasycenými pøevedeními musel být vrchol~$u$
+zvednut alespoò dvakrát. Podle lemmatu~V se to mohlo stát maximálnì $2n$-krát za celý
+výpoèet, tak¾e v¹ech nasycených pøevedení po~hranì~$uv$ je nejvý¹e~$n$ a po~v¹ech hranách
+dohromady 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:
+Dùkaz provedeme potenciálovou metodou. Uva¾ujme následující potenciál:
+$$ \Phi := \sum_{\scriptstyle{v \ne z,s} \atop \scriptstyle{f^{\Delta}(v) > 0}} h(v). $$
+Nyní se~podívejme, jak se~ná¹ potenciál bìhem algoritmu vyvíjí:
 
        \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.
+       \:Bìhem celého algoritmu je $ \Phi \ge 0 $, nebo» potenciál je souètem nezáporných èlenù.
+       \:Zvednutí vrcholu zvý¹í $\Phi$ o~jednièku. (Aby byl vrchol zvednut, musel mít kladný
+       pøebytek, tak¾e 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.
+       Podle lemmatu~S nastane nejvý¹e~$nm$ takových nasycených pøevedení a ta celkovì
+       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)$.
+\>Potenciál celkovì stoupne o~nejvy¹e $2n^2 + 2n^2m = \O(n^2m)$, klesá pouze pøi nenasycených
+pøevedeních a poka¾dé alespoò o~1. Proto je v¹ech nenasycených pøevedení $\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$.
+\h{Implementace}
 
-\s{Rozbor èasové slo¾itosti algoritmu:}
+Zbývá vyøe¹it, jak sí» a vý¹ky reprezentovat, abychom dokázali rychle hledat
+vrcholy s~pøebytkem a nenasycené hrany vedoucí s~kopce.
 
-\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
+Budeme si~pamatovat seznam~$P$ v¹ech vrcholù 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 tento seznam v~konstantním èase
+aktualizovat -- buïto vrchol do seznamu pøidat nebo ho naopak odebrat. (K~tomu se
+hodí, aby si vrcholy pamatovaly ukazatel na svou polohu v~seznamu~$P$).
+V~konstantním èase také umíme odpovìdìt, zda existuje nìjaký vrchol s~pøebytkem.
 
-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.
+Dále si pro ka¾dý vrchol $u \in V$ budeme pamatovat seznam~$L(u)$. Ten bude
+obsahovat v¹echny nenasycené hrany, které vedou z~$u$ dolù (mají spád alespoò 1).
+Opìt pøi zmìnách rezerv mù¾eme tyto seznamy v~konstantním èase aktualizovat.
 
-\s{Shrnutí:}
+Jednotlivé operace budou mít tyto slo¾itosti:
 
 \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).$
+\:{\I Inicializace} algoritmu -- trivialnì $\O(m)$.
+\:{\I Výbìr vrcholu} s~kladným pøebytkem a nalezení nenasycené hrany vedoucí dolù -- $\O(1)$
+  (staèí se podívat na poèátky pøíslu¹ných seznamù).
+\:{\I Pøevedení pøebytku} po~hranì~$uv$ -- zmìny rezerv $r(uv)$ a $r(vu)$ zpùsobí pøepoèítání
+  seznamù~$L(u)$ a~$L(v)$, zmìny pøebytkù $f^\Delta(u)$ a~$f^\Delta(v)$ mohou zpùsobit
+  zmìnu v~seznamu~$P$. V¹e v~èase $\O(1)$.
+\:{\I Zvednutí vrcholu~$u$} -- musíme obejít v¹echny hrany do~$u$ a~z~$u$, kterých je nejvý¹e~$2n$,
+  porovnat vý¹ky a~pøípadnì tyto hrany~$uv$ odebrat ze~seznamu~$L(v)$ resp. pøidat
+  do~$L(u)$. To trvá $\O(n)$.
 \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:
+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{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'.
+\proof
+Inicializace algoritmu trvá $\O(m)$. Pak algoritmus provede nejvý¹e~$2n^2$ zvednutí
+(viz lemma~Z), nejvý¹e $nm$ nasycených pøevedení (lemma~N) a nejvý¹e $n^2m$ nenasycených
+pøevedení. Vynásobením slo¾itostmi jednotlivých operací dostaneme èas $\O(n^3 + nm + n^2m) = \O(n^2m)$.
+Podle lemmatu~K po~zastavení vydá maximální tok.
+\qed
 
-\s{Algoritmus (Vylep¹ený Goldbergùv algoritmus)}
+\h{Vylep¹ení Goldbergova algoritmu}
 
-\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
+Základní verze Goldbervova algoritmu tedy dosáhla stejné slo¾itosti jako Dinicùv algoritmus.
+Nyní uká¾eme, ¾e pokud budeme volit vrchol, ze~kterého budeme pøevádìt pøebytek, ¹ikovnìji
+-- toti¾ jako nejvy¹¹í z~vrcholù s~nenulovým pøebytkem~--, slo¾itost se je¹tì zlep¹í.
 
-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.
+V~èasové slo¾itosti pùvodního algoritmu byl nejvýznamnìj¹í èlen $\O(n^2m)$ za~nenasycená
+pøevedení. Pokusme se jejich poèet ve~vylep¹eném algoritmu odhadnout tìsnìji.
 
-\s{Lemma N' (Nenasycená pøevedení):} Algoritmus G' provede~$\O(n^3)$ nenasycených pøevedení.
+\s{Lemma N' (Nenasycená pøevedení):} Goldbergùv algoritmus s~volbou nejvy¹¹ího vrcholu
+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}:
+Dokazovat budeme opìt pomocí potenciálové metody. Nejprve definujeme {\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.
+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
@@ -264,31 +339,72 @@ Tento odhad je hezk
 \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ì:
+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:
+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 / 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$.
+\:{\I Zvednutí}: Za~ka¾dý zvednutý vrchol pøibude nejvý¹e~$n / 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).
+\:{\I 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 / k$, nebo» do~$\Phi$ pøibude
+jen jeden sèítanec za~vrchol $v$ a~ten pøispìje nejvý¹e hodnotou~$n / k$
+(pod ním mù¾e být nejvíce~$n$ vrcholù).
+\:{\I 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) / k$. Zároveò
+mù¾e zvý¹it pøebytek ve~$v$ z~nuly, ale~$\Phi$ stoupne nejvý¹e o~$p(v) / k$.
+Celkem tedy~$\Phi$ klesne alespoò o~$p(u) - p(v) / 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})$.
+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~nadefinovali, ¾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 / 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 / k$. Nasycených pøevedení se provede celkem~$\O(nm)$ a~ka¾dé zvý¹í
+potenciál takté¾ nejvý¹e o~$n / k$. Celkem se~tedy~$\Phi$ zvý¹í nejvý¹e
+o $${n \over k} \cdot \O(n^2) + {n \over k} \cdot \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 / k} + {n^2m / 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