From: Martin Mares Date: Wed, 28 Nov 2007 12:52:34 +0000 (+0100) Subject: Odstraneny DOSovske konce radku. X-Git-Url: http://mj.ucw.cz/gitweb/?a=commitdiff_plain;h=176e2e9640afa113c950efed56bd123ea67c13c0;p=ads2.git Odstraneny DOSovske konce radku. --- diff --git a/4-goldberg/4-goldberg.tex b/4-goldberg/4-goldberg.tex index 4ca1bc0..352b0bd 100755 --- a/4-goldberg/4-goldberg.tex +++ b/4-goldberg/4-goldberg.tex @@ -1,124 +1,124 @@ -\input lecnotes.tex - -\prednaska{4}{Goldgergùv algoritmus}{(zapsali R. Tupec, -%J. Volec, -J. Záloha)} - -\noindent -Pøedstavíme si nový algoritmus pro hledání toku v síti, který se uká¾e stejnì dobrý jako -{\I Dinicùv alogritmus} ($\O(mn^{2})$), a po nìkolika vylep¹eních bude i lep¹í. - -\noindent -Tento algoritmus narozdíl od {\I Dinicova algoritmu} zaèíná s pøebytky v sousedních vrcholech zdroje a sna¾í se jich zbavit pomocí pøevedení. Abychom se pøi pøi tomto pøevádìní nezacyklili definujeme vý¹ku vrcholu a pøevádíme pouze z kopce. - -\s{Definice:} Funkce $f:E \rightarrow \bb{R}_{0}^{+}$ -je {\I vlna} v síti ($V, E, z, s, c$), taková ¾e $ \forall (u,v) \in E : f(u,v) \leq c(u,v) \wedge $, kde $c(u,v)$ je kapacita hrany$(u,v)$, pro -$ \forall v \ne z, v \ne s : f^{\Delta}(v) \geq 0 $. - -\s{Poznámka:} Funkci $f^{\Delta}(v)$ definujeme pro libovolnou funkci $f : E \rightarrow \bb R$ -: $$f^{\Delta}(v):=\sum_{(u,v) \in E}{f(u,v)} - \sum_{(v,u) \in E}{f(v,u)}$$ -Tok je vlna, kde $ f^{\Delta}(v) = 0 , \forall v \in V , v \ne z,s $. - -\noindent -Algoritmus pracuje se sítí rezerv. To je funkce $r(u, v) u,v \in V$ taková, ¾e pro $\forall (u, v) \in E: r(u,v)+f(u,v)=c(u,v)$. Pokud v síti neexistují nìkteré zpìtné hrany, tak je pøidáme s nulovou kapacitou. - -\noindent -V algoritmu budeme provádìt dvì operace na vrcholech sítì. K tomu budeme potøebovat pøiøadit v¹em -vrcholùm vý¹ky pomocí funkce $h : V \rightarrow \bb{N}$. - -\s{Operace:} pro $ (u,v) \in E$ - -\algo -\:{\I Pøevedení pøebytku} - -Pokud platí: -\itemize\ibull - \: $u : f^{\Delta}(v) > 0$ - \: $v : h(u) > h(v)$ - \: $r(u,v)>0$ -\endlist - pøevedeme tok o velikosti $\delta:=min(f^{\Delta}(u),r(u,v))$ z $u$ do $v$ takto: $f^{\Delta}(u):=f^{\Delta}(u)-\delta$, $f^{\Delta}(v):=f^{\Delta}(v)+\delta$, $r(u,v)=r(u,v)-\delta$ a $r(v,u)=r(v,u)+\delta$ . - -Øekneme, ¾e pøevedení je {\I nasycené}, pokud je po pøevodu rezerva na hranì $(u,v)$ nulová, tedy $r(u,v)=0$. -Naopak pøevedení {\I nenasycené}, pokud po pøevodu $f^{\Delta}(v) = 0$. Pokud $r(u,v)=0 \wedge f^{\Delta}(v) = 0$ -budeme pøevedení pova¾ovat za {\I nasycené}. - -\:{\I Zvednutí vrcholu} $u$ - -Pokud v algoritmu narazíme na pøebytek, který nelze pøevést, zvedneme vrchol $h(u):=h(u)+1$. -\endalgo - -\s{Algoritmus:} (Goldberg) - -\algo -\:$h(*)\leftarrow 0, h(z)\leftarrow \bb{N}$. -\:$f(*)\leftarrow 0, \forall u \in V, (z,u) \in E : f(u,v)\leftarrow c(z,u)$. -\:Dokud $\exists u \in V, u \ne z, u \ne s, f^{\Delta}(u)>0$: -\::Pokud $\exists (u,v) \in E, r(u,v)>0 \wedge h(u)>h(v)$, tak prevedeme pøebytek po (u,v). -\::Jinak zvedneme $u$. -\:Vrátíme tok $f$ jako výsledek. -\endalgo - -%\s{Poznámka:} Pokud v síti neexistují nìkteré zpìtné hrany, tak je tam pøidáme s nulovou kapacitou - -\noindent -Následovat bude nìkolik lemmat a invariantù, jimi¾ se doká¾e správnost a èasová slo¾itost vý¹e popsaného -agoritmu. - -\s{Invariant A:} Funkce $f:E \rightarrow \bb{R}$, se kterou pracuje algoritmus je vlna. Pro $\forall v \in V, h(v)$ neklesá a $h(z)=n, h(s)=0$. - -\proof -Pro první èást invariantu si staèí rozmyslet, ¾e v~¾ádném kroku algoritmu nepøekroèíme kapacity hran a~nevytvoøíme záporný pøebytek. Pro $\forall v \in V, v \ne z, v \ne z$ skuteènì vý¹ku pouze zvy¹ujeme a z podmínky v tøetím kroku algoritmu vyplývá, ¾e nás pøebytky v $z$ a $s$ v podstatì nezajímají, tudí¾ ani nemìníme jejich vý¹ku. -\qed - -\s{Invariant S(o spádu):} Pro $\forall (u,v) \in E, r(u,v)>0 : h(u) \leq h(v)+1$. Tedy neexistuje hrana se spádem vìt¹ím ne¾ jedna a nenulovou rezervou. - -\proof -Podívejme se, kdy by mohla vzniknout nenasycená hrana se spádem vìt¹ím ne¾ 1. V druhé fázi algoritmu k tomu nedojde. Pokud ji¾ existuje vrchol $v$ s pøebytkem a nenasycená hrana $(v,u)$ a platí $h(v)=h(u)+1$ vrchol $v$ algoritmu nezvedá a rovnou pøebytek posílá po této hranì. Uva¾me tedy je¹tì druhý pøípad, kdy existuje nasycená hrana $(u,v)$ se spádem vìt¹ím ne¾ jedna a tuto hranu se pokusíme odsytit. Jen¾e to také nejde, proto¾e kdybychom cokoli poslali proti smìru této hrany, bude to proti smìru funkce $h$, ale to nejde. -\qed - -\s{Lemma K (o korektnosti):} Kdy¾ se algorimus zastaví, vydá maximální tok $f$. - -\proof -Nejprve uká¾eme, ¾e $f$ je tok a pak jeho maximalitu. Vyjdìme z toho, ¾e $f$ je vlna a algorimus se mù¾e zastavit jen pokud nastanou oba tyto pøípady souèasnì: -\itemize\ibull -\:ve vrcholech grafu nejsou ¾ádné pøebytky. Potom, ale $f$ je zároveò tok. -\:pokud existuje nenasycená cesta $P$ ze zdroje do stoku. O té víme, ¾e má maximálnì $n-1$ hran. Zároveò v¹ak musí mít spád $n$, ale to znamená, ¾e existuje hrana $(u,v)$, pro kterou platí $h(u,v)>=2$, ale to je spor s Invariantem S. -\endlist -\qed - -\s{Invarinat C (cesta domù, do zdroje):} Je-li $v \in V(G), v \neq z,s, f^{\Delta}(v) > 0$, pak existuje nenasycená cesta z $v$ do $z$. - -\proof -Mìjme nìjaký vrchol $v \in V(G)$ takový, ¾e $f^{\Delta}(v) > 0$. -Potom definujme mno¾inu $A := \{ u \in V(G) : \exists$ nenasycená cesta z $v$ do $u \}$. -Mìjme vrcholy $a \in A$ a $b \in V(G) - A$ takové, ¾e $(b,a)\in E$. O nich víme, ¾e $f(b, a)=0$, proto¾e pokud by tomu tak nebylo, muselo by platit $r(a, b)>0$, a tedy $b$ patøí do mno¾iny $A$. - -\noindent Seètìme pøebytky ve v¹ech vrcholech $A$. Proto¾e 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 a v¹echny hrany, jejich¾ oba vrcholy le¾í v $A$, se jedenkrát pøiètou a jedenkrát odeètou, platí: -$$\sum_{u \in A}f^{\Delta}(u)=\sum_{(a,b)\in E \cap (\bar{A}\times A)}f(a,b)-\sum_{(b,a)\in E \cap (A\times \bar{A})}f(b,a)$$ -Proto¾e v¹ak do $A$ nic neteèe, nebo» obsahuje zdroj (pokud není izolovaný, existují nenasycené zpìtné hrany), tento výraz musí být men¹í, roven nule. Odtud vyplývá, ¾e pokud nìco odtéká ven z $A$ nebo $A$ obsahuje $s$, pak $\exists u \in A, f^{\Delta}(u)<0$. Toto $u$ musí být zdroj, proto¾e v¹echny ostatní vrcholy mají kladný pøebytek. -\qed -\s{Invariant V (vý¹ka):} Pro $\forall v \in V$ platí $h(v)\le 2n$. - -\proof -Víme, ¾e poèet hran v cestì ze $z$ do $\forall v \in V$ je maximálnì $n-1$. -Pokud by existoval vrchol $v$ s vý¹kou $h(v)>2n$, musel by být zvednut alespoò $2n$-krát. To ale znamená, ¾e by po $2n-1$ zvednutích musel mít stále pøebytek. Pokud tento pøebytek nelze pøevést do ¾ádného jiného vrcholu ${u} \in E$, musí platit $h(v)\le h({u})$ a tedy $v$ bude zvednut po $2n$-té. To ale znamená, ¾e by platilo $h(v)-h(z)=n$. Dále víme z Invariantu C, ¾e existuje nenasycená cesta z $v$ do $z$. Potom, ale v cestì ze $z$ do $v$ existuje hrana se spádem vìt¹ím ne¾ 1 a to je spor s Invariantem S. -\qed - -\s{Lemma Z (poèet zvednutí):} Poèet v¹ech zvednutí je maximálnì $2n^{2}$. - -\proof -Staèí si uvìdomit, ¾e ka¾dý vrchol zvednut maximálnì $2n$-krát a vrcholù je $n$. -\qed -% -%\s{Definice:} Nasycené pøevedení je pøevedení pøebytku z vrcholu hranou takové, ¾e tato hrana bude nasycena. -% -%\s{Definice:} Nenasycené pøevedení je takové pøevedení, které není syté a pøi nìm¾ dojde k odstranìní pøebytku z vrcholu. - -\s{Lemma SY (sytá pøevedení):} Poìet v¹ech sytých pøevedení je maximálnì $NM$. - -\proof -Mìjme hranu $(u,v) \in E$, kterou jsme právì nasytili. Tedy platí $h(v)h(u)$. Proto, abychom tuto hranu opìt nasytili, musíme opìt zmìnit nerovnost vý¹ek na $h(v) 0$ + \: $v : h(u) > h(v)$ + \: $r(u,v)>0$ +\endlist + pøevedeme tok o velikosti $\delta:=min(f^{\Delta}(u),r(u,v))$ z $u$ do $v$ takto: $f^{\Delta}(u):=f^{\Delta}(u)-\delta$, $f^{\Delta}(v):=f^{\Delta}(v)+\delta$, $r(u,v)=r(u,v)-\delta$ a $r(v,u)=r(v,u)+\delta$ . + +Øekneme, ¾e pøevedení je {\I nasycené}, pokud je po pøevodu rezerva na hranì $(u,v)$ nulová, tedy $r(u,v)=0$. +Naopak pøevedení {\I nenasycené}, pokud po pøevodu $f^{\Delta}(v) = 0$. Pokud $r(u,v)=0 \wedge f^{\Delta}(v) = 0$ +budeme pøevedení pova¾ovat za {\I nasycené}. + +\:{\I Zvednutí vrcholu} $u$ + +Pokud v algoritmu narazíme na pøebytek, který nelze pøevést, zvedneme vrchol $h(u):=h(u)+1$. +\endalgo + +\s{Algoritmus:} (Goldberg) + +\algo +\:$h(*)\leftarrow 0, h(z)\leftarrow \bb{N}$. +\:$f(*)\leftarrow 0, \forall u \in V, (z,u) \in E : f(u,v)\leftarrow c(z,u)$. +\:Dokud $\exists u \in V, u \ne z, u \ne s, f^{\Delta}(u)>0$: +\::Pokud $\exists (u,v) \in E, r(u,v)>0 \wedge h(u)>h(v)$, tak prevedeme pøebytek po (u,v). +\::Jinak zvedneme $u$. +\:Vrátíme tok $f$ jako výsledek. +\endalgo + +%\s{Poznámka:} Pokud v síti neexistují nìkteré zpìtné hrany, tak je tam pøidáme s nulovou kapacitou + +\noindent +Následovat bude nìkolik lemmat a invariantù, jimi¾ se doká¾e správnost a èasová slo¾itost vý¹e popsaného +agoritmu. + +\s{Invariant A:} Funkce $f:E \rightarrow \bb{R}$, se kterou pracuje algoritmus je vlna. Pro $\forall v \in V, h(v)$ neklesá a $h(z)=n, h(s)=0$. + +\proof +Pro první èást invariantu si staèí rozmyslet, ¾e v~¾ádném kroku algoritmu nepøekroèíme kapacity hran a~nevytvoøíme záporný pøebytek. Pro $\forall v \in V, v \ne z, v \ne z$ skuteènì vý¹ku pouze zvy¹ujeme a z podmínky v tøetím kroku algoritmu vyplývá, ¾e nás pøebytky v $z$ a $s$ v podstatì nezajímají, tudí¾ ani nemìníme jejich vý¹ku. +\qed + +\s{Invariant S(o spádu):} Pro $\forall (u,v) \in E, r(u,v)>0 : h(u) \leq h(v)+1$. Tedy neexistuje hrana se spádem vìt¹ím ne¾ jedna a nenulovou rezervou. + +\proof +Podívejme se, kdy by mohla vzniknout nenasycená hrana se spádem vìt¹ím ne¾ 1. V druhé fázi algoritmu k tomu nedojde. Pokud ji¾ existuje vrchol $v$ s pøebytkem a nenasycená hrana $(v,u)$ a platí $h(v)=h(u)+1$ vrchol $v$ algoritmu nezvedá a rovnou pøebytek posílá po této hranì. Uva¾me tedy je¹tì druhý pøípad, kdy existuje nasycená hrana $(u,v)$ se spádem vìt¹ím ne¾ jedna a tuto hranu se pokusíme odsytit. Jen¾e to také nejde, proto¾e kdybychom cokoli poslali proti smìru této hrany, bude to proti smìru funkce $h$, ale to nejde. +\qed + +\s{Lemma K (o korektnosti):} Kdy¾ se algorimus zastaví, vydá maximální tok $f$. + +\proof +Nejprve uká¾eme, ¾e $f$ je tok a pak jeho maximalitu. Vyjdìme z toho, ¾e $f$ je vlna a algorimus se mù¾e zastavit jen pokud nastanou oba tyto pøípady souèasnì: +\itemize\ibull +\:ve vrcholech grafu nejsou ¾ádné pøebytky. Potom, ale $f$ je zároveò tok. +\:pokud existuje nenasycená cesta $P$ ze zdroje do stoku. O té víme, ¾e má maximálnì $n-1$ hran. Zároveò v¹ak musí mít spád $n$, ale to znamená, ¾e existuje hrana $(u,v)$, pro kterou platí $h(u,v)>=2$, ale to je spor s Invariantem S. +\endlist +\qed + +\s{Invarinat C (cesta domù, do zdroje):} Je-li $v \in V(G), v \neq z,s, f^{\Delta}(v) > 0$, pak existuje nenasycená cesta z $v$ do $z$. + +\proof +Mìjme nìjaký vrchol $v \in V(G)$ takový, ¾e $f^{\Delta}(v) > 0$. +Potom definujme mno¾inu $A := \{ u \in V(G) : \exists$ nenasycená cesta z $v$ do $u \}$. +Mìjme vrcholy $a \in A$ a $b \in V(G) - A$ takové, ¾e $(b,a)\in E$. O nich víme, ¾e $f(b, a)=0$, proto¾e pokud by tomu tak nebylo, muselo by platit $r(a, b)>0$, a tedy $b$ patøí do mno¾iny $A$. + +\noindent Seètìme pøebytky ve v¹ech vrcholech $A$. Proto¾e 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 a v¹echny hrany, jejich¾ oba vrcholy le¾í v $A$, se jedenkrát pøiètou a jedenkrát odeètou, platí: +$$\sum_{u \in A}f^{\Delta}(u)=\sum_{(a,b)\in E \cap (\bar{A}\times A)}f(a,b)-\sum_{(b,a)\in E \cap (A\times \bar{A})}f(b,a)$$ +Proto¾e v¹ak do $A$ nic neteèe, nebo» obsahuje zdroj (pokud není izolovaný, existují nenasycené zpìtné hrany), tento výraz musí být men¹í, roven nule. Odtud vyplývá, ¾e pokud nìco odtéká ven z $A$ nebo $A$ obsahuje $s$, pak $\exists u \in A, f^{\Delta}(u)<0$. Toto $u$ musí být zdroj, proto¾e v¹echny ostatní vrcholy mají kladný pøebytek. +\qed +\s{Invariant V (vý¹ka):} Pro $\forall v \in V$ platí $h(v)\le 2n$. + +\proof +Víme, ¾e poèet hran v cestì ze $z$ do $\forall v \in V$ je maximálnì $n-1$. +Pokud by existoval vrchol $v$ s vý¹kou $h(v)>2n$, musel by být zvednut alespoò $2n$-krát. To ale znamená, ¾e by po $2n-1$ zvednutích musel mít stále pøebytek. Pokud tento pøebytek nelze pøevést do ¾ádného jiného vrcholu ${u} \in E$, musí platit $h(v)\le h({u})$ a tedy $v$ bude zvednut po $2n$-té. To ale znamená, ¾e by platilo $h(v)-h(z)=n$. Dále víme z Invariantu C, ¾e existuje nenasycená cesta z $v$ do $z$. Potom, ale v cestì ze $z$ do $v$ existuje hrana se spádem vìt¹ím ne¾ 1 a to je spor s Invariantem S. +\qed + +\s{Lemma Z (poèet zvednutí):} Poèet v¹ech zvednutí je maximálnì $2n^{2}$. + +\proof +Staèí si uvìdomit, ¾e ka¾dý vrchol zvednut maximálnì $2n$-krát a vrcholù je $n$. +\qed +% +%\s{Definice:} Nasycené pøevedení je pøevedení pøebytku z vrcholu hranou takové, ¾e tato hrana bude nasycena. +% +%\s{Definice:} Nenasycené pøevedení je takové pøevedení, které není syté a pøi nìm¾ dojde k odstranìní pøebytku z vrcholu. + +\s{Lemma SY (sytá pøevedení):} Poìet v¹ech sytých pøevedení je maximálnì $NM$. + +\proof +Mìjme hranu $(u,v) \in E$, kterou jsme právì nasytili. Tedy platí $h(v)h(u)$. Proto, abychom tuto hranu opìt nasytili, musíme opìt zmìnit nerovnost vý¹ek na $h(v)