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