From 861a6135ec8e6d31c19886dd72a9432772d71158 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Mon, 7 Nov 2011 23:19:46 +0100 Subject: [PATCH] Goldberg: Prepis --- 4-goldberg/4-goldberg.tex | 502 +++++++++++++++++++++++--------------- 1 file changed, 309 insertions(+), 193 deletions(-) diff --git a/4-goldberg/4-goldberg.tex b/4-goldberg/4-goldberg.tex index 6288dfb..8096cea 100644 --- a/4-goldberg/4-goldberg.tex +++ b/4-goldberg/4-goldberg.tex @@ -2,257 +2,332 @@ \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 -- 2.39.2