]> mj.ucw.cz Git - ga.git/blob - 1-toky/1-toky.tex
Bugfix.
[ga.git] / 1-toky / 1-toky.tex
1 \input ../sgr.tex
2
3 \prednaska{1}{Toky, øezy a Ford-Fulkersonùv algoritmus}{zapsal Radovan ©esták}
4
5 V~této kapitole nadefinujeme toky v~sítích, odvodíme základní vìty o~nich
6 a Ford-Fulkersonùv algoritmus pro hledání maximálního toku. Také uká¾eme,
7 jak na~hledání maximálního toku pøevést problémy týkající se øezù, separátorù
8 a párování. Dal¹í algoritmy budou následovat v~pøí¹tích kapitolách.
9
10 \todo{Tady (nebo nìkde poblí¾) by mìly být zavedeny základní znaèky.}
11
12 \todo{Co je $V$, $E$, $m$, $n$, komplementy, multihrany, WLOG souvislost \dots}
13
14 \h{Toky v sítích}
15
16 Intuitivní pohled: sí» je systém propojených potrubí, který pøepravuje tekutinu
17 ze~zdroje~$s$ (source) do~spotøebièe~$t$ (target), pøièem¾ tekutina
18 se nikde mimo tato dvì místa neztrácí ani nevzniká.
19
20 \s{Definice:}
21
22 \itemize\ibull
23 \:{\I Sí»} je uspoøádaná pìtice $(V,E,s,t,c)$, kde:
24   \itemize\ibull
25   \:$(V,E)$ je orientovaný graf,
26   \:$s\in V$ {\I zdroj,}
27   \:$t\in V$ {\I spotøebiè} neboli {\I stok} a
28   \:$c: E\rightarrow {\bb R}^+$ funkce udávající {\I kapacity} jednotlivých hran.
29   \endlist
30 \:{\I Ohodnocení} hran je libovolná funkce $f:\, E\rightarrow {\bb R}$. Pro ka¾dé ohodnocení $f$
31   mù¾eme definovat:
32   $$ f^+(v) = \sum_{e=(\cdot,w)} f(e), \quad
33      f^-(v) = \sum_{e=(w,\cdot)} f(e), \quad
34      f^\Delta(v) = f^+(v) - f^-(v)
35   $$
36   [co do~vrcholu pøiteèe, co odteèe a jaký je v~nìm pøebytek].
37 \:{\I Tok} je ohodnocení $f:\, E\rightarrow {\bb R}$, pro které platí:
38   \itemize\ibull
39   \:$\forall e: 0 \le f(e) \le w(e)$, \quad {\I (dodr¾uje kapacity)}
40   \:$\forall v\ne s,t: f^\Delta(v)=0$. \quad {\I (Kirchhoffùv zákon)}
41   \endlist
42 \:{\I Velikost toku:} $\vert f \vert = -f^\Delta(s)$.
43 \:{\I Øez (tokový):} mno¾ina vrcholù $C\subset V$ taková, ¾e $s\in C$, $t\not\in C$. Øez mù¾eme také
44   ztoto¾nit s~mno¾inami hran $C^- = E \cap (C \times \overline C)$ [tìm budeme øíkat hrany zleva doprava]
45   a $C^+ = E \cap (\overline C \times C)$ [hrany zprava doleva].
46 \:{\I Kapacita øezu:} $\vert C \vert = \sum_{e \in C^-} c(e)$ (bereme v~úvahu jen hrany zleva doprava).
47 \:{\I Tok pøes øez:}
48   $f^+(C)=\sum_{e\in C^+} f(e)$,
49   $f^-(C)=\sum_{e \in C^-} f(e)$,
50   $f^\Delta(C)=f^+(C)-f^-(C)$.
51 \:{\I Cirkulace} je nulový tok, èili $\forall v: f^\Delta(v)=0$.
52 \endlist
53
54 %%%\figure{graf.eps}{Pøíklad orientovaného grafu ze zvoleným zdrojem a stokem.}{0.4\hsize}
55
56 Základním problémem, kterým se budeme zabývat, je hledání {\I maximálního toku} (tedy toku nejvìt¹í mo¾né
57 velikosti) a {\I minimálního øezu} (øezu nejmen¹í mo¾né kapacity).
58
59 \s{Vìtièka:} V~ka¾dé síti existuje maximální tok a minimální øez.
60
61 \s{Dùkaz:} Existence minimálního øezu je triviální, proto¾e øezù v~ka¾dé síti je koneènì mnoho;
62 pro toky v~sítích s~reálnými kapacitami to ov¹em není samozøejmost a je k~tomu potøeba trocha matematické
63 analýzy (v~prostoru v¹ech ohodnocení hran tvoøí toky kompaktní mno¾inu, velikost toku je lineární funkce
64 a~tedy i spojitá, proèe¾ nabývá maxima). Pro racionální kapacity dostaneme tuto vìtièku jako dùsledek
65 analýzy Ford-Fulkersonova algoritmu.
66 \qed
67
68 \s{Pozorování:} Kdybychom velikost toku definovali podle spotøebièe, vy¹lo by toté¾:
69 $$\eqalign{
70 \sum_v f^\Delta(v) &= f^\Delta(s) + f^\Delta(t) \hbox{~~~(podle Kirchhoffova zákona jsou v¹echna ostatní $f^\Delta(v)=0$), ale také:} \cr
71 \sum_v f^\Delta(v) &= \sum_e f(e) - f(e) = 0 \hbox{~~~(ka¾dá hrana pøispìje k~jednomu $f^+(v)$ a k~jednomu $f^-(v)$),}
72 }$$
73 tak¾e $\vert f\vert = -f^\Delta(s) = f^\Delta(t).$
74
75 Stejnì tak mù¾eme velikost toku zmìøit na~libovolném øezu:
76
77 \s{Lemma:} Pro ka¾dý øez $C$ platí, ¾e $\vert f\vert = -f^\Delta(C) \le \vert C \vert$.
78
79 \s{Dùkaz:} První èást indukcí: ka¾dý øez mù¾eme získat postupným pøidáváním vrcholù do~triviálního øezu $\{s\}$
80 [tedy pøesouváním vrcholù zprava doleva], a~to, jak uká¾e jednoduchý rozbor pøípadù, nezmìní $f^\Delta$.
81 Druhá èást: $-f^\Delta(C) = f^-(C) - f^+(C) \le f^-(C) \le \vert C \vert.$ \qed
82
83 Velikost ka¾dého toku mù¾eme tedy omezit kapacitou libovolného øezu. Kdybychom na¹li tok a øez stejné
84 velikosti, mù¾eme si tedy být jisti, ¾e tok je maximální a øez minimální. To není náhoda, platí toti¾
85 následující:
86
87 \s{Vìta (Ford, Fulkerson):} V~ka¾dé síti je velikost maximálního toku rovna velikosti minimálního øezu.
88
89 \s{Dùkaz:} Jednu nerovnost jsme dokázali v~pøedchozím lemmatu, druhá plyne z~duality lineárního
90 programování [max. tok a min. øez jsou navzájem duální úlohy], ale k~pìknému kombinatorickému
91 dùkazu pùjde opìt pou¾ít Ford-Fulkersonùv algoritmus.
92
93 \h{Ford-Fulkersonùv algoritmus}
94
95 Nejpøímoèaøej¹í zpùsob, jak bychom mohli hledat toky v~sítích, je zaèít s~nìjakým tokem (nulový je po~ruce v¾dy)
96 a postupnì ho zlep¹ovat tak, ¾e nalezneme nìjakou nenasycenou cestu a po¹leme po~ní \uv{co pùjde}.
97 To~bohu¾el nefunguje, ale mù¾eme tento postup trochu zobecnit a být ochotni pou¾ívat nejen hrany,
98 pro~které je $f(e) < c(e)$, ale také hrany, po~kterých nìco teèe v~protismìru a my mù¾eme tok
99 v~na¹em smìru simulovat odeètením od~toku v~protismìru. Trochu formálnìji:
100
101 \s{Definice:}
102
103 \itemize\ibull
104 \:{\I Rezerva} hrany $e=(v,w)$ pøi toku~$f$ se definuje jako $r(e) = (c(e) - f(e)) + f(e^\prime)$, kde $e^\prime=(w,v)$.
105   Pro úèely tohoto algoritmu budeme pøedpokládat, ¾e ke~ka¾dé hranì hrana opaèná existuje; pokud ne, dodefinujeme
106   si ji s~nulovou kapacitou.
107 \:{\I Zlep¹ující cesta} je orientovaná cesta taková, ¾e v¹echny její hrany mají nenulovou rezervu.
108 \endlist
109
110 \s{Algoritmus:}
111
112 \algo
113 \:$f \leftarrow \<nulový tok>$
114 \:while $\exists$ zlep¹ující cesta $P$ z~$s$ do~$t$
115 \::$m \leftarrow \min_{e\in P} r(e)$
116 \::zvìt¹i tok $f$ podél~$P$ o~$m$ (ka¾dé hranì $e\in P$ zvìt¹i $f(e)$, pøípadnì zmen¹i $f(e^\prime)$, podle toho, co jde).
117 \endalgo
118
119 \s{Analýza:} Nejdøíve si rozmysleme, ¾e pro celoèíselné kapacity algoritmus v¾dy dobìhne: v~ka¾dém kroku
120 stoupne velikost toku o~$m \ge 1$, co¾ mù¾e nastat pouze koneènìkrát. Podobnì pro racionální kapacity:
121 pøenásobíme-li v¹echny kapacity jejich spoleèným jmenovatelem, dostaneme sí» s~celoèíselnými kapacitami,
122 na~které se bude algoritmus chovat identicky a jak ji¾ víme, skonèí. Pro~iracionální kapacity obecnì
123 dobìhnout nemusí, zkuste vymyslet protipøíklad.
124
125 Uva¾me nyní situaci po~zastavení algoritmu. Funkce~$f$ je urèitì tok, proto¾e jím byla po~celou dobu
126 bìhu algoritmu. Prozkoumejme teï mno¾inu $C$ vrcholù, do~nich¾ po~zastavení algoritmu vede zlep¹ující cesta ze~zdroje.
127 Jistì $s\in C$, $t\not\in C$, tak¾e tato mno¾ina je øez. Navíc pro ka¾dou hranu $e\in C^-$ musí
128 být $f(e)=c(e)$ a pro ka¾dou $e\in C^+$ je $f(e)=0$, proto¾e jinak by rezerva hrany~$e$ nebyla
129 nulová. Tak¾e $f^-(C) = \vert C \vert$ a $f^+(C) = 0$, èili $\vert f\vert = \vert C \vert$.
130
131 Na¹li jsme tedy k~toku, který algoritmus vydal, øez stejné velikosti, tak¾e, jak u¾ víme,
132 tok je maximální a øez minimální. Tím jsme také dokázali Ford-Fulkersonovu vìtu\foot{Dokonce
133 jsme ji dokázali i pro reálné kapacity, proto¾e mù¾eme algoritmus spustit rovnou na maximální tok místo
134 nulového a on se ihned zastaví a vydá certifikující øez.} a existenci maximálního toku. Navíc algoritmus nikdy
135 nevytváøí z~celých èísel necelá, èim¾ získáme:
136
137 \s{Dùsledek:} Sí» s~celoèíselnými kapacitami má maximální tok, který je celoèíselný.
138
139 \s{Èasová slo¾itost} F-F algoritmu mù¾e být pro obecné sítì a ne¹ikovnou volbu zlep¹ujících
140 cest obludná, ale jak dokázali Edmonds s~Karpem, pokud budeme hledat cesty prohledáváním
141 do~¹íøky (co¾ je asi nejpøímoèaøej¹í implementace), pobì¾í v~èase $\O(m^2n)$. Pokud budou
142 v¹echny kapacity jednotkové, snadno nahlédneme, ¾e staèí $\O(nm)$. Edmondsùv a Karpùv
143 odhad nebudeme dokazovat, místo toho si v~pøí¹tí kapitole pøedvedeme efektivnìj¹í algoritmus.
144
145 \h{Maximální párování v bipartitním grafu}
146
147 Jedním z~problémù, které lze snadno pøevést na~hledání maximálního toku, je nalezení
148 {\I maximálního párování} v~bipartitním grafu\foot{Párování je mno¾ina hran taková, ¾e ¾ádné
149 dvì nemají spoleèný vrchol. Maximálním míníme vzhledem k~poètu hran, nikoliv vzhledem k~inkluzi.}.
150
151 Bipartitní graf $(A\cup B, E)$ pøevedeme na sí» obsahující v¹echny pùvodní vrcholy
152 a navíc dva nové vrcholy $s$ a~$t$, dále v¹echny pùvodní hrany orientované z~$A$ do~$B$,
153 nové hrany z~$s$ do~v¹ech vrcholù partity~$A$ a ze~v¹ech vrcholù partity~$B$ do~$t$.
154 Kapacity v¹ech hran nastavíme na jednièky:
155
156 \figure{bipartitni.eps}{Bipartitní graf a z~nìj odvozená sí» (v¹echny kapacity jsou jednièky).}{0.4\hsize}
157
158 Nyní si v¹imneme, ¾e ke~ka¾dému párování existuje celoèíselný tok stejné velikosti a naopak.
159 Tak¾e najdeme maximální celoèíselný tok (tøeba F-F algoritmem) a do~párování umístíme
160 právì hrany, po~kterých nìco teèe.
161
162 Podobnì mù¾eme najít souvislost mezi øezy v~této síti a {\I vrcholovými pokrytími}
163 zadaného grafu -- to jsou mno¾iny vrcholù takové, ¾e se dotýkají ka¾dé hrany.
164 Tak z~F-F vìty získáme:
165
166 \s{Vìta (König):} V~ka¾dém bipartitním grafu je velikost maximálního párování
167 rovna velikosti minimálního vrcholového pokrytí.
168
169 \h{Øezy, separátory a $k$-souvislost}
170
171 \s{Definice:} Pro ka¾dý neorientovaný graf $G$ a libovolné jeho vrcholy $s,t$ zavedeme:
172 \itemize\ibull
173 \:{\I $st$-øez} je mno¾ina hran $F$ taková, ¾e v~grafu $G-F$ jsou
174   vrcholy $s,t$ v~rùzných komponentách souvislosti.
175 \:{\I $st$-separátor} je mno¾ina vrcholù $W$ taková, ¾e $s,t\not\in W$ a v~grafu $G-W$
176   jsou vrcholy $s,t$ v~rùzných komponentách souvislosti.
177 \:{\I Øez} je mno¾ina hran, která je $xy$-øezem pro nìjakou dvojici vrcholù $x,y$.
178 \:{\I Separátor} je mno¾ina vrcholù, která je $xy$-separátorem pro nìjakou dvojici vrcholù $x,y$.
179 \:$G$ je {\I hranovì $k$-souvislý,} pokud $\vert V\vert > k$ a v¹echny øezy v~$G$
180   mají alespoò~$k$ hran.
181 \:$G$ je {\I vrcholovì $k$-souvislý,} pokud $\vert V\vert > k$ a v¹echny separátory v~$G$
182   mají alespoò~$k$ vrcholù.
183 \endlist
184
185 V¹imnìte si, ¾e nesouvislý graf má øez i separátor velikosti~0, tak¾e vrcholová i hranová 1-souvislost
186 splývají s~obyèejnou souvislostí pro v¹echny grafy o~alespoò dvou vrcholech. Hranovì 2-souvislé
187 jsou právì (netriviální) grafy bez {\I mostù,} vrcholovì 2-souvislé jsou ty bez {\I artikulací.}
188
189 Pro orientované grafy mù¾eme $st$-øezy a $st$-separátory definovat analogicky
190 (toti¾, ¾e po~odstranìní pøíslu¹né mno¾iny hran èi vrcholù neexistuje orientovaná
191 cesta z~$s$ do~$t$), globální øezy a separátory ani vícenásobná souvislost se obvykle
192 nedefinují.
193
194 \s{Poznámka:} Minimální orientované $st$-øezy podle této definice a minimální tokové øezy
195 podle definice ze~zaèátku kapitoly splývají: ka¾dý tokový øez~$C$ odpovídá $st$-øezu stejné
196 velikosti tvoøenému hranami v~$C^-$; naopak pro~minimální $st$-øez musí být mno¾ina
197 vrcholù dosa¾itelných z~$s$ po~odebrání øezu z~grafu tokovým øezem, opìt stejné velikosti.
198 [Velikost mìøíme souètem kapacit hran.] Dává tedy rozumný smysl øíkat obojímu stejnì.
199 Podobnì se chovají i neorientované grafy, pokud do~\uv{tokového} øezu poèítáme
200 hrany v~obou smìrech.
201
202 Analogií tokù je pak existence nìjakého poètu disjunktních cest (vrcholovì nebo hranovì)
203 mezi vrcholy~$s$ a~$t$. Analogií F-F~vìty pak budou známé Mengerovy vìty:
204
205 \s{Vìta (Mengerova, lokální hranová orientovaná):}
206 Buï $G$ orientovaný graf a $s,t$ nìjaké jeho vrcholy. Pak je velikost minimálního
207 $st$-øezu rovna maximálnímu poètu hranovì disjunktních $st$-cest.\foot{orientovaných
208 cest z~$s$ do~$t$}
209
210 \s{Dùkaz:} Z~grafu sestrojíme sí» tak, ¾e $s$~bude zdroj, $t$~spotøebiè a v¹em
211 hranám nastavíme kapacitu na~jednotku. Øezy v~této síti odpovídají øezùm v~pùvodním
212 grafu. Podobnì ka¾dý systém hranovì disjunktních $st$-cest odpovídá toku stejné
213 velikosti a naopak ke~ka¾dému celoèíselnému toku dovedeme najít systém disjunktních
214 cest (hladovì tok rozkládáme na~cesty a prùbì¾nì odstraòujeme cirkulace, které
215 objevíme). Pak pou¾ijeme F-F vìtu.
216 \qed
217
218 \s{Vìta (Mengerova, lokální vrcholová orientovaná):}
219 Buï $G$ orientovaný graf a $s,t$ nìjaké jeho vrcholy takové, ¾e $st\not\in E$.
220 Pak je velikost minimálního $st$-separátoru rovna maximálnímu poètu vrcholovì
221 disjunktních $st$-cest.\foot{Tím myslíme cesty disjunktní a¾ na~krajní vrcholy.}
222
223 \s{Dùkaz:} Podobnì jako v~dùkazu pøedchozí vìty zkonstruujeme vhodnou sí».
224 Tentokrát ov¹em rozdìlíme ka¾dý vrchol na~vrcholy $v^+$ a $v^-$, v¹echny hrany, které
225 pùvodnì vedly do~$v$, pøepojíme do~$v^+$, hrany vedoucí z~$v$ povedou z~$v^-$
226 a pøidáme novou hranu z~$v^+$ do~$v^-$. V¹echny hrany budou mít jednotkové kapacity.
227 Toky nyní odpovídají vrcholovì disjunktním cestám, øezy v~síti separátorùm.
228 \qed
229
230 %\figure{vrchol.eps}{Vrchol který chceme podrozdìlit.}{0.1\hsize}
231 %\figure{podrozdeleni.eps}{Výsledek podrozdìlení vrcholu.}{0.15\hsize}
232
233 Podobnì dostaneme neorientované lokální vìty (neorientovanou hranu nahradíme
234 orientovanými v~obou smìrech) a z~nich pak i globální varianty popisující
235 $k$-souvislost grafù:
236
237 \s{Vìta (Mengerova, globální hranová neorientovaná):}
238 Neorientovaný graf~$G$ je hranovì $k$-souvislý právì tehdy, kdy¾ mezi ka¾dými
239 dvìma vrcholy existuje alespoò~$k$ hranovì disjunktních cest.
240
241 \s{Vìta (Mengerova, globální vrcholová neorientovaná):}
242 Neorientovaný graf~$G$ je vrcholovì $k$-souvislý právì tehdy, kdy¾ mezi ka¾dými dvìma
243 vrcholy existuje alespoò~$k$ vrcholovì disjunktních cest.
244
245 \bye