]> mj.ucw.cz Git - ads2.git/blob - 2-toky/2-toky.tex
Voroneho diagramy: Oprava preklepu
[ads2.git] / 2-toky / 2-toky.tex
1 \input lecnotes.tex
2
3 \prednaska{2}{Toky v sítích}{}
4
5 Pøedstavme si, ¾e~by v~budovì fakulty na~Malé Stranì existoval èajovod, který
6 by rozvádìl èaj do~v¹ech uèeben. Znázornìme si to orientovaným grafem, v~nìm¾
7 jeden významný vrchol pøedstavuje èajovar a~druhý uèebnu, ve~které sedíme.
8 Hrany mezi vrcholy pak znázoròují vìtvící se trubky, které mají èaj rozvádìt.
9 Chceme dopravit co nejvíce èaje do~dané uèebny, ale není to tak snadné,
10 proto¾e ka¾dá trubka má omezenou kapacitu -- za jednotku èasu jí mù¾e
11 protéci jen urèité mno¾ství èaje, pro ka¾dou trubku obecnì jiné. Mù¾e se
12 tedy vyplatit za \uv{tlustou} trubkou tok èaje rozvìtvit a dál pokraèovat
13 více tenkými trubkami atd.
14
15 \figure{toky01.eps}{Èajovod}{2in}
16
17 K~podobnému problému dojdeme, budeme-li studovat pøenos dat v~poèítaèových sítích.
18 Roli trubek zde hrají pøenosové linky, kapacita øíká, kolik dat pøenesou za~sekundu.
19 Linky jsou spojené pomocí routerù a opìt chceme dopravit co nejvíce dat z~jednoho
20 místa v~síti na druhé. Data sice na rozdíl od èaje nejsou spojitá (pøená¹íme je po bytech
21 nebo rovnou po paketech), ale pøi dne¹ních rychlostech pøenosu je za taková mù¾eme
22 pova¾ovat.
23
24 \h{Toky v~sítích}
25
26 \s{Definice:} {\I Sí»} je uspoøádaná pìtice $(V,E,z,s,c)$, pøièem¾:
27 \itemize\ibull
28 \:$(V,E)$ je orientovaný graf.
29 \:$c:E\to{\bb R}_{0}^{+}$ je funkce pøiøazující hranám jejich {\I kapacity.}
30 \:$z,s \in V$ jsou dva vrcholy grafu, kterým øíkáme {\I zdroj} a~{\I stok} (neboli {\I spotøebiè}).
31 \:Graf je symetrický -- je-li $uv$ hranou grafu, je jí i~$vu$.\foot{%
32 Nebude-li hrozit nedorozumìní, budeme hranu z~vrcholu~$u$ do vrcholu~$v$
33 znaèit $uv$ namísto formálnìj¹ího, ale ménì pøehledného $(u,v)$. Podobnì u~neorientovaných
34 hran pí¹eme $uv$ namísto $\{u,v\}$.} Kdyby nìkterá z~opaèných hran chybìla,
35 mù¾eme ji pøidat s~nulovou kapacitou.
36 \endlist
37
38 \s{Definice:} {\I Tok} je funkce $f:E \to {\bb R}_{0}^{+}$, pro ní¾ platí:
39 \numlist{\ndotted}
40 \:Tok po~ka¾dé hranì je omezen její kapacitou: $\forall e \in E : f(e)\le c(e)$.
41 \:{\I Kirchhoffùv zákon:} Do ka¾dého vrcholu pøiteèe stejnì, jako z~nìj odteèe (\uv{sí» tìsní}).
42 Jedinou výjimku tvoøí zdroj a spotøebiè. Formálnì:
43 $$\forall v \in V \setminus \{z,s\}: \sum_{u: uv \in E}{f(uv)}=\sum_{u: vu \in E}{f(vu)}.$$
44 \endlist
45
46 \figure{sit.eps}{Pøíklad sítì. Èísla pøedstavují kapacity jednotlivých hran.}{2.5in}
47
48 %% \figure{tok.eps}{Pøíklad toku. Èísla pøedstavují toky po~hranách, v~závorkách jsou kapacity.}{4in}
49
50 Sumy podobné tìm v~Kirchhoffovì zákonì budeme psát èasto, zavedeme si pro nì tedy
51 ¹ikovné znaèení:
52
53 \s{Definice:} Pro libovolnou funkci $f:E \to {\bb R}$ definujeme:
54 \itemize\ibull
55 \:$f^+(v) :=  \sum_{u: uv \in E}{f(uv)}$ (celkový {\I pøítok} do vrcholu)
56 \:$f^-(v) :=  \sum_{u: vu \in E}{f(vu)}$ (celkový {\I odtok} z~vrcholu)
57 \:$f^\Delta(v) := f^+(v) - f^-(v)$ ({\I pøebytek} ve~vrcholu)
58 \endlist
59
60 \>(Kirchhoffùv zákon pak øíká prostì to, ¾e $f^\Delta(v)=0$ pro v¹echna $v\ne z,s$.)
61
62 \s{Pozorování:} V~ka¾dé síti nìjaký tok existuje: tøeba funkce, která je v¹ude
63 nulová (po~¾ádné hranì nic neteèe). To je korektní tok, ale sotva u¾iteèný. Budeme
64 chtít najít tok, který pøepraví co nejvíce tekutiny ze~zdroje do~spotøebièe.
65
66 \s{Definice:} {\I Velikost toku} $f$ budeme znaèit $\vert f\vert$ a polo¾íme ji
67 rovnu souètu velikostí toku na hranách vedoucích do spotøebièe minus souèet
68 velikostí tokù na~hranách ze~spotøebièe ven. V~na¹í terminologii je to tedy
69 pøebytek ve~spotøebièi: $\vert f\vert:=f^\Delta(s).$
70
71 \s{Pozorování:} Jeliko¾ sí» tìsní, mìlo by být jedno, zda velikost toku mìøíme
72 u~spotøebièe nebo u~zdroje. Vskutku, krátkým výpoètem ovìøíme, ¾e tomu tak je:
73 $$
74 f^\Delta(z) + f^\Delta(s) = \sum_v f^\Delta(v) = 0.
75 $$
76 První rovnost platí proto, ¾e podle Kirchhoffova zákona jsou zdroj a spotøebiè jediné
77 dva vrcholy, jejich¾ pøebytek mù¾e být nenulový. Druhou rovnost získáme tak, ¾e si
78 uvìdomíme, ¾e tok na ka¾dé hranì pøispìje do celkové sumy jednou s~kladným znaménkem
79 a jednou se záporným. Zjistili jsme tedy, ¾e pøebytek zdroje a spotøebièe se li¹í
80 pouze znaménkem.
81 \qed
82
83 \s{Poznámka:} Rádi bychom nalezli v~zadané síti tok, jeho¾ velikost je maximální.
84 Máme ale zaruèeno, ¾e maximum bude existovat? V¹ech mo¾ných tokù je nekoneènì mnoho
85 a v~nekoneèné mno¾inì se mù¾e snadno stát, ¾e aèkoliv existuje supremum, není maximem
86 (pøíklad: $\{1-1/n \mid n\in{\bb N}^+\}$).
87 Odpovìï nám poskytne matematická analýza: mno¾ina v¹ech tokù je kompaktní podmno¾inou
88 prostoru ${\bb R}^{\vert E\vert}$, velikost toku je spojitá (dokonce lineární) funkce
89 z~této mno¾iny do~$\bb R$, tak¾e musí nabývat minima i maxima.
90
91 Nám ale bude staèít studovat sítì s~racionálními kapacitami, kde existence maximálního
92 toku bude zjevná u¾ z~toho, ze sestrojíme algoritmus, který takový tok najde.
93
94 \h{Fordùv-Fulkersonùv algoritmus}
95
96 Nejjednodu¹¹í z~algoritmù na hledání maximálního toku pochází od Forda
97 a Fulkersona. Je zalo¾en na prosté my¹lence: zaèname s~nulovým tokem a postupnì
98 ho budeme vylep¹ovat, a¾ dostaneme maximální tok.
99
100 Uva¾ujme, jak by vylep¹ování mohlo probíhat.
101 Nech» existuje cesta $P$ ze~$z$ do~$s$ taková, ¾e po v¹ech jejích hranách
102 teèe ménì, ne¾ dovolují kapacity. Pak zjevnì mù¾eme tok upravit tak, aby se~jeho velikost
103 zvìt¹ila. Zvolme
104 $$\varepsilon := \min_{e \in P} \left(c(e) - f(e)\right).$$
105 Po ka¾dé hranì zvý¹íme prùtok o~$\varepsilon$, èili definujeme nový tok~$f'$ takto:
106 $$
107 f'(e) := \cases{
108         f(e) + \varepsilon      &\hbox{pro $e\in P$} \cr
109         f(e)                    &\hbox{pro $e\not\in P$} \cr
110         }
111 $$
112 To je opìt korektní tok: kapacity nepøekroèíme ($\varepsilon$~jsme zvolili
113 nejvy¹¹í mo¾né, aby se to je¹tì nestalo) a~Kirchhoffovy zákony zùstanou
114 neporu¹eny, nebo» zdroj a~stok neomezují a~ka¾dému jinému vrcholu na~cestì $P$
115 se~pøítok $f^+(v)$ i~odtok $f^-(v)$ zvìt¹í pøesnì o~$\varepsilon$.
116
117 Opakujme tento proces tak dlouho, dokud existují cesty, po nich¾ mù¾eme tok
118 zlep¹ovat. A¾ se algoritmus zastaví (co¾ by obecnì nemusel, ale to nás je¹tì chvíli
119 trápit nemusí), získáme maximální tok?
120 Pøekvapivì ne v¾dy. Uva¾ujme napøíklad sí» nakreslenou pod tímto odstavcem.
121 Najdeme-li nejdøíve cestu pøes svislou hranu (na obrázku tuènì, zlep¹ujeme o~1),
122 potom jednu cestu po horní dvojici hran (zlep¹ujeme o~9) a jednu po spodní
123 dvojici (zlep¹ujeme také o~9), dostaneme tok o~velikosti 19 a ¾ádná dal¹í cesta
124 ho u¾ nemù¾e zlep¹it. Ov¹em maximální tok v~této síti má evidentnì velikost~20.
125
126 \figure{toky02.eps}{Èísla pøedstavují kapacity jednotlivých hran.}{1.5in}
127
128 Zde by ov¹em situaci zachránilo, kdybychom poslali tok velikosti 1 proti smìru
129 prostøední hrany -- to mù¾eme udìlat tøeba odeètením jednièky od toku po smìru
130 hrany. Roz¹íøíme tedy ná¹ algoritmus tak, aby umìl posílat tok i proti smìru
131 hran. O~kolik mù¾eme tok hranou zlep¹it (a» u¾ pøiètením po~smìru nebo odeètením
132 proti smìru) nám bude øíkat její {\I rezerva:}
133
134 \s{Definice:} {\I Rezerva hrany} $uv$ je $r(uv):=c(uv) - f(uv) + f(vu).$
135
136 \s{Definice:} Hranì budeme øíkat {\I nasycená,} pokud má nulovou rezervu.
137 {\I Nenasycená cesta} je taková, její¾ v¹echny hrany mají nenulovou rezervu.
138
139 \smallskip
140 Budeme tedy opakovanì hledat nenasycené cesty a tok po~nich zlep¹ovat.
141 Postupnì doká¾eme, ¾e tento postup je koneèný a ¾e v~ka¾dé síti najde maximální tok.
142
143 \algo{FordFulkerson}
144 \algin Sí».
145 \:$f \leftarrow$ libovolný tok, napø. v¹ude nulový.
146 \:Dokud existuje nenasycená cesta~$P$ ze $z$ do $s$, opakujeme:
147 \::$\varepsilon \leftarrow \min \{r(e) \mid e \in P\}$.
148 \::Pro v¹echny hrany $uv \in P$:
149 \:::$\delta \leftarrow \min \{f(vu),\varepsilon\}$
150 \:::$f(vu) \leftarrow f(vu) - \delta$
151 \:::$f(uv) \leftarrow f(uv) + \varepsilon - \delta$
152 \algout Maximální tok~$f$.
153 \endalgo
154
155 \s{Koneènost:} Zastaví se~Fordùv-Fulkersonùv algoritmus?
156
157 \itemize\ibull
158
159 \:Pakli¾e jsou v¹echny kapacity celá èísla, velikost toku se~v~ka¾dém kroku zvìt¹í alespoò o~1.
160 Algoritmus se~tedy zastaví po~nejvíce tolika krocích, kolik je nìjaká horní
161 mez pro~velikost maximálního toku -- napø. souèet kapacit v¹ech hran
162 vedoucích do~stoku ($c^+(s)$).
163
164 \:Pro~racionální kapacity vyu¾ijeme jednoduchý trik. Nech» $M$ je nejmen¹í
165 spoleèný násobek jmenovatelù v¹ech kapacit. Spustíme-li algoritmus na sí»
166 s~kapacitami $c'(e) = c(e)\cdot M$, bude se rozhodovat stejnì jako v~pùvodní
167 síti, proto¾e bude stále platit $f'(e) = f(e)\cdot M$. Nová sí» je pøitom
168 celoèíselná, tak¾e se algoritmus jistì zastaví.
169
170 \:Na~síti s~iracionálními kapacitami se~algoritmus chová mnohdy divoce, nemusí
171 se~zastavit, ba ani konvergovat ke~správnému výsledku (viz cvièení \exref{ffirac}).
172
173 \endlist
174
175 \s{Maximalita:} U¾ víme, ¾e algoritmus se zastaví a vydá jako výsledek nìjaký tok~$f$.
176 Je tento tok maximální? Doká¾eme to pomocí øezù.
177
178 \s{Definice:} Pro libovolné dvì mno¾iny vrcholù $A$ a~$B$ budeme znaèit $E(A,B)$
179 mno¾inu hran vedoucích z~$A$ do~$B$, tedy $E(A,B) = E\cap (A\times B)$.
180 Je-li dále $f$ nìjaká funkce pøiøazující hranám èísla, oznaèíme:
181
182 \itemize\ibull
183 \:$f(A,B) := \sum_{e\in E(A,B)} f(e)$ (prùtok z~$A$ do~$B$)
184 \:$f^\Delta(A,B) := f(A,B) - f(B,A)$ (èistý prùtok z~$A$ do~$B$)
185 \endlist
186
187 \s{Definice:} {\I Øez} je uspoøádaná dvojice mno¾in vrcholù ($A,B$) taková, ¾e
188 $A$ a $B$ jsou disjunktní, dohromady obsahují v¹echny vrcholy a navíc $A$ obsahuje zdroj a $B$
189 obsahuje stok.
190 Mno¾inì~$A$ budeme øíkat {\I levá mno¾ina øezu,} mno¾inì~$B$ {\I pravá.}
191 {\I Kapacitu øezu} definujeme jako souèet kapacit hran zleva doprava, tedy $c(A,B)$.
192
193 \s{Lemma:} Pro ka¾dý øez $(A,B)$ a ka¾dý tok~$f$ platí $f^\Delta(A,B)
194 = \vert f\vert$.
195
196 \proof
197 Opìt ¹ikovným seètením pøebytkù vrcholù:
198 $$
199 f^\Delta(A,B) = \sum_{v\in B} f^\Delta(v) = f^\Delta(s).
200 $$
201 První rovnost získáme poèítáním pøes hrany: ka¾dá hrana vedoucí z~vrcholu v~$B$
202 do~jiného vrcholu v~$B$ pøispìje jednou kladnì a jednou zápornì; hrany le¾ící
203 celé mimo~$B$ nepøispìjí vùbec; hrany s~jedním koncem v~$B$ a druhým mimo pøispìjí
204 jednou, pøièem¾ znaménko se bude li¹it podle toho, který konec je v~$B$. Druhá
205 rovnost je snadná: v¹echny vrcholy v~$B$ kromì spotøebièe mají podle Kirchhoffova
206 zákona nulový pøebytek (zdroj toti¾ v~$B$ nele¾í).
207 \qed
208
209 \s{Poznámka:} Pùvodní definice velikosti toku coby pøebytku spotøebièe je speciálním
210 pøípadem pøedchozího lemmatu -- mìøí toti¾ prùtok pøes øez $(V\setminus\{s\},\{s\})$.
211
212 \s{Dùsledek:} Pro ka¾dý tok~$f$ a ka¾dý øez $(A,B)$ platí $\vert f \vert \le c(A,B)$.
213 (Velikost ka¾dého toku je shora omezena kapacitou ka¾dého øezu.)
214
215 \proof
216 $\vert f\vert = f^\Delta(A,B) = f(A,B) - f(B,A) \le f(A,B) \le c(A,B)$.
217 \qed
218
219 \s{Dùsledek:} Pokud $\vert f\vert = c(A,B)$, pak je tok~$f$ maximální a øez~$(A,B)$
220 minimální. Jinými slovy pokud najdeme k~nìjakému toku stejnì velký øez, mù¾eme øez pou¾ít
221 jako certifikát maximality toku a tok jako certifikát minimality øezu. Následující vìta
222 nám zaruèí, ¾e je to v¾dy mo¾né:
223
224 \s{Vìta:} Pokud se~Fordùv-Fulkersonùv algoritmus zastaví, vydá maximální tok.
225
226 \proof
227 Nech» se algoritmus zastaví. Uva¾me mno¾iny vrcholù $A
228 := \{v \in V \mid \hbox{existuje nenasycená cesta ze~$z$ do~$v$}\}$ a~$B := V \setminus A$.
229
230 Dvojice $(A,B)$ je øez, nebo» $z \in A$ (ze~$z$ do~$z$ existuje cesta délky 0)
231 a~$s \in B$ (kdyby $s$ nele¾elo v~$B$, musela by existovat nenasycená cesta ze~$z$ do~$s$,
232 tudí¾ by algoritmus neskonèil, nýbr¾ by po této cestì stávající tok vylep¹il).
233
234 Dále víme, ¾e~v¹echny hrany øezu mají nulovou rezervu: kdyby toti¾ pro nìjaké $u\in A$
235 a $v\in B$ mìla hrana $uv$ rezervu nenulovou (nebyla nasycená), spojením nenasycené
236 cesty ze zdroje do~$u$ s~touto hranou by vznikla nenasycená cesta ze~zdroje do~$v$, tak¾e
237 vrchol~$v$ by také musel le¾et v~$A$, co¾ není mo¾né.
238
239 Proto po~v¹ech hranách øezu vedoucích z~$A$ do~$B$ teèe tolik, kolik jsou
240 kapacity tìchto hran, a~po~hranách vedoucích z~$B$ do~$A$ neteèe nic. Nalezli
241 jsme tedy øez $(A,B)$ pro nìj¾ $f^\Delta(A,B) = c(A,B)$. To znamená, ¾e~tento
242 øez je minimální a tok~$f$ maximální.
243 \qed
244
245 Tím jsme dokázali vìtu o~správnosti Fordova-Fulkersonova algoritmu:
246
247 \s{Vìta:} Pro ka¾dou sí» s~racionálními kapacitami se~Fordùv-Fulkersonùv algoritmus
248 zastaví a~vydá maximální tok a~minimální øez.
249
250 \s{Dùsledek:} Sí» s~celoèíselnými kapacitami má aspoò jeden z~maximálních tokù
251 celoèíselný a~Fordùv-Fulkersonùv algoritmus takový tok najde.
252
253 \proof
254 Kdy¾ dostane Fordùv-Fulkersonùv algoritmus celoèíselnou sí», najde v~ní maximální tok
255 a~ten bude zase celoèíselný (algoritmus nikde nevytváøí z~celých èísel necelá).
256 \qed
257
258 To, ¾e~umíme najít celoèíselné øe¹ení, není vùbec samozøejmé. (V~kapitole
259 o~\NP-úplnosti se setkáme s~problémy, které jsou pro racionální èísla snadné
260 a pro celá obtí¾né.) Uka¾me rovnou jednu aplikaci, která celoèíselnosti vyu¾ije.
261
262 \h{Hledání nejvìt¹ího párování v~bipartitních grafech}
263
264 \s{Definice:} Mno¾ina hran $F \subseteq E$ se~nazývá {\I párování}, jestli¾e
265 ¾ádné dvì hrany této mno¾iny nemají spoleèný vrchol.
266 {\I Velikostí} párování myslíme poèet jeho hran.
267
268 Chceme-li v~daném bipartitním grafu $(V,E)$ nalézt nejvìt¹í párování,
269 pøetvoøíme graf nejprve na sí» $(V',E',c,z,s)$ takto:
270
271 \itemize\ibull
272 \:Nalezneme partity grafu, budeme jim øíkat {\I levá} a {\I pravá.}
273 \:V¹echny hrany zorientujeme zleva doprava.
274 \:Pøidáme zdroj~$z$ a vedeme z~nìj hrany do v¹ech vrcholù levé partity.
275 \:Pøidáme spotøebiè~$s$ a vedeme do nìj hrany ze~v¹ech vrcholù pravé partity.
276 \:V¹em hranám nastavíme jednotkovou kapacitu.
277 \endlist
278
279 \figure{toky04.eps}{Hledání nejvìt¹ího párování v~bipartitním grafu.}{2in}
280
281 \>Nyní v~této síti najdeme maximální celoèíselný tok. Jeliko¾ v¹echny hrany
282 mají kapacitu~1, musí po ka¾dé hranì téci buï~0 nebo~1. Do~výsledného párování
283 vlo¾íme právì ty hrany pùvodního grafu, po~kterých teèe~1.
284
285 Dostaneme opravdu párování? Kdybychom nedostali, znamenalo by to, ¾e nìjaké
286 dvì hrany mají spoleèný vrchol. Ov¹em kdyby se setkaly ve~vrcholu z~pravé
287 partity, pøitekly by do tohoto vrcholu alespoò 2 jednotky toku a ty by nemìly
288 kam odtéci. Analogicky pokud by se setkaly nalevo, musely by z~vrcholu odtéci
289 alespoò 2 jednotky, ale ty se tam nemají kudy dostat.
290
291 Zbývá nahlédnout, ¾e nalezené párování je nejvìt¹í mo¾né. K~tomu si staèí v¹imnout,
292 ¾e z~toku vytvoøíme párování o~tolika hranách, kolik je velikost toku, a naopak
293 z~ka¾dého párování umíme vytvoøit celoèíselný tok odpovídající velikosti.
294 Nalezli jsme bijekci mezi mno¾inou v¹ech celoèíselných tokù
295 a mno¾inou v¹ech párování a tato bijekce zachovává velikost. Nejvìt¹í
296 tok tedy musí odpovídat nejvìt¹ímu párování.
297
298 Navíc doká¾eme, ¾e Fordùv-Fulkersonùv algoritmus na sítích tohoto druhu
299 pracuje pøekvapivì rychle:
300
301 \s{Vìta:} Pro sí», její¾ v¹echny kapacity jsou jednotkové, nalezne Fordùv-Fulkersonùv
302 algoritmus maximální tok v~èase $\O(mn)$.
303
304 \proof
305 Jedna iterace algoritmu bì¾í v~èase $\O(m)$: nenasycenou cestu najdeme prohledáním
306 grafu do ¹íøky, samotné zlep¹ení toku zvládneme v~èase lineárním s~délkou cesty.
307 Jeliko¾ ka¾dá iterace zlep¹í tok alespoò o~1,\foot{Mimochodem, mù¾e i o~2, proto¾e
308 pøi jednotkových kapacitách mohou rezervy být a¾ dvojky.}
309 poèet iterací je omezen velikostí maximálního toku, co¾ je nejvý¹e~$n$
310 (uva¾ujte øez tvoøený hranami okolo zdroje).
311 \qed
312
313 \s{Dùsledek:} Nejvìt¹í párování v~bipartitním grafu lze nalézt v~èase $\O(mn)$.
314
315 \proof
316 Pøedvedená konstrukce vytvoøí z~grafu sí» o~$n'=n+2$ vrcholech a~$m'=m+2n$
317 hranách a spotøebuje na to èas $\O(m'+n')$. Pak nalezneme maximální celoèíselný
318 tok Fordovým-Fulkersonovým algoritmem, co¾ trvá $\O(m'n')$. Nakonec tok v~lineárním
319 èase pøelo¾íme na~párování. V¹e dohromady trvá $\O(m'n') = \O(mn)$.
320 \qed
321
322 \exercises
323
324 \ex{Najdìte pøíklad sítì s~nejvý¹e 10 vrcholy a 10 hranami, na ní¾ Fordùv-Fulkersonùv
325 algoritmus provede více ne¾ milion iterací.}
326
327 \exxx{Najdìte sí» s~reálnými kapacitami, na ní¾ Fordùv-Fulkersonùv algoritmus nedobìhne.}
328 \exid{ffirac}
329
330 \ex{Navrhnìte algoritmus, který pro zadaný orientovaný graf a jeho vrcholy $u$ a~$v$
331 nalezne nejvìt¹í mo¾ný systém hranovì disjunktních cest z~$u$ do~$v$.}
332
333 \ex{Upravte algoritmus z~pøedchozího cvièení, aby nalezené cesty byly vrcholovì
334 disjunktní (a¾ na krajní vrcholy).}
335
336 \ex{Mìjme ¹achovnici $R\times S$, z~ní¾ políèko¾rout se¾ral nìkterá políèka. Chceme na ni
337 rozestavìt co nejvíce ¹achových vì¾í tak, aby se navzájem neohro¾ovaly. Vì¾ mù¾eme postavit
338 na libovolné nese¾rané políèko a ohro¾uje v¹echny vì¾e v~tém¾e øádku i sloupci. Navrhnìte
339 efektivní algoritmus, který takové rozestavìní najde.}
340
341 \exx{Situace stejná jako v~minulém cvièení, ale dvì vì¾e se neohro¾ují pøes se¾raná políèka.}
342
343 \ex{Opìt ¹achovnice po zásahu políèko¾routa. Chceme na nese¾raná políèka rozmístit kostky
344 velikosti $1\times 2$ políèka tak, aby ka¾dé nese¾rané políèko bylo pokryto právì jednou kostkou.}
345
346 \ex{Dopravní problém: Uva¾ujme továrny $T_1, \ldots, T_p$ a obchody $O_1, \ldots, O_q$. V¹ichni
347 vyrábìjí a prodavají tentý¾ druh zbo¾í. Továrna $T_i$ ho dennì vyprodukuje $t_i$ kusù, obchod
348 $O_j$ dennì spotøebuje $o_j$ kusù. Navíc známe bipartitní graf urèující, která továrna mù¾e
349 dodávat zbo¾í kterému obchodu. Najdìte efektivní algoritmus, který zjistí, zda je po¾adavky
350 obchodù mo¾né splnit, ani¾ by se pøekroèily výrobní kapacity továren, a~pokud je to mo¾né,
351 vypí¹e, ze~které továrny se má pøepravit kolik zbo¾í do kterého obchodu.}
352
353 \exxx{Uva¾ujeme o~vybudování dolù $D_1,\ldots,D_p$ a továren $T_1,\ldots,T_q$. Vybudování
354 dolu~$D_i$ stojí cenu~$d_i$ a od té doby dùl zadarmo produkuje neomezené mno¾ství $i$-té
355 suroviny. Továrna~$T_j$ potøebuje ke~své èinnosti zadanou mno¾inu surovin (pøiøazení
356 surovin továrnám je dáno jako bipartitní graf na vstupu) a pokud jsou v~provozu v¹echny
357 doly produkující tyto suroviny, vydìláme na továrnì zisk~$t_j$. Vymyslete algoritmus,
358 který spoèítá, které doly postavit, abychom po odeètení nákladù na doly vydìlali co nejvíce.}
359
360 \ex{Jiná obvyklá definice øezu øíká, ¾e øez je mno¾ina hran grafu, po~jejím¾ odebrání
361 se~graf rozpadne na~více komponent (respektive máme-li urèený zdroj a stok, skonèí tyto
362 v~rùzných komponentách). Srovnejme tuto definici s~na¹í. Mno¾iny hran urèené na¹imi øezy
363 splòují i tuto definici a øíká se jim {\I elementární øezy.}
364 Uka¾te, ¾e existují i jiné ne¾ elementární øezy.
365 Také uka¾te, ¾e v¹echny minimální øezy jsou elementární.}
366
367 %% FIXME: Zmínit permanent
368
369
370 \endexercises
371
372 \bye