]> mj.ucw.cz Git - ga.git/blob - 1-toky/1-toky.tex
03f3ae18d9ec57f219c19b2f4002c8d444d58723
[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í nezáporné {\I kapacity} 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