\input ../sgr.tex

\prednaska{1}{Toky, øezy a Ford-Fulkersonùv algoritmus}{}

V~této kapitole nadefinujeme toky v~sítích, odvodíme základní vìty o~nich
a také Ford-Fulkersonùv algoritmus pro hledání maximálního toku. Také uká¾eme,
jak na~hledání maximálního toku pøevést problémy týkající se øezù, separátorù
a párování v~bipartitních grafech. Dal¹í tokové algoritmy budou následovat v~pøí¹tích kapitolách.

\h{Toky v sítích}

Intuitivní pohled: sí» je systém propojených potrubí, který pøepravuje tekutinu
ze~zdroje~$s$ (source) do~spotøebièe~$t$ (target), pøièem¾ tekutina
se nikde mimo tato dvì místa neztrácí ani nevzniká.

\ss{Definice:}

\itemize\ibull
\:{\I Sí»} je uspoøádaná pìtice $(V,E,s,t,c)$, kde:
  \itemize\ibull
  \:$(V,E)$ je orientovaný graf,
  \:$s\in V$ {\I zdroj,}
  \:$t\in V$ {\I spotøebiè} neboli {\I stok} a
  \:$c: E\rightarrow {\bb R}^+$ funkce udávající {\I kapacity} jednotlivých hran.
  \endlist
\:{\I Ohodnocení} hran je libovolná funkce $f:\, E\rightarrow {\bb R}$. Pro ka¾dé ohodnocení $f$
  mù¾eme definovat:
  $$ f^+(v) = \sum_{e=(\cdot,v)} f(e), \quad
     f^-(v) = \sum_{e=(v,\cdot)} f(e), \quad
     f^\Delta(v) = f^+(v) - f^-(v)
  $$
  [co do~vrcholu pøiteèe, co odteèe a jaký je v~nìm pøebytek].
\:{\I Tok} je ohodnocení $f:\, E\rightarrow {\bb R}$, pro které platí:
  \itemize\ibull
  \:$\forall e: 0 \le f(e) \le c(e)$, \quad {\I (dodr¾uje kapacity)}
  \:$\forall v\ne s,t: f^\Delta(v)=0$. \quad {\I (Kirchhoffùv zákon)}
  \endlist
\:{\I Velikost toku:} $\vert f \vert = -f^\Delta(s)$.
\:{\I Øez (tokový):} mno¾ina vrcholù $C\subset V$ taková, ¾e $s\in C$, $t\not\in C$. Øez mù¾eme také
  ztoto¾nit s~mno¾inami hran $C^- = E \cap (C \times \overline C)$ [tìm budeme øíkat hrany zleva doprava]
  a $C^+ = E \cap (\overline C \times C)$ [hrany zprava doleva].
\:{\I Kapacita øezu:} $\vert C \vert = \sum_{e \in C^-} c(e)$ (bereme v~úvahu jen hrany zleva doprava).
\:{\I Tok pøes øez:}
  $f^+(C)=\sum_{e\in C^+} f(e)$,
  $f^-(C)=\sum_{e \in C^-} f(e)$,
  $f^\Delta(C)=f^+(C)-f^-(C)$.
\:{\I Cirkulace} je tok nulové velikosti, èili $f$ takové, ¾e $f^\Delta(v)=0$ pro v¹echna~$v$.
\endlist

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é
velikosti) a {\I minimálního øezu} (øezu nejmen¹í mo¾né kapacity).

\goodbreak

\s{Vìtièka:} V~ka¾dé síti existuje maximální tok a minimální øez.

\proof Existence minimálního øezu je triviální, proto¾e øezù v~ka¾dé síti je koneènì mnoho;
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é
analýzy (v~prostoru v¹ech ohodnocení hran tvoøí toky kompaktní mno¾inu, velikost toku je lineární funkce,
a~tedy i spojitá, proèe¾ nabývá maxima). Pro racionální kapacity dostaneme tuto vìtièku jako dùsledek
analýzy Ford-Fulkersonova algoritmu.
\qed

\s{Pozorování:} Kdybychom velikost toku definovali podle spotøebièe, vy¹lo by toté¾. Platí toti¾:
$$f^\Delta(s) + f^\Delta(t) = \sum_v f^\Delta(v) = \sum_e f(e) - f(e) = 0$$
(první rovnost plyne z~Kirchoffova zákona -- v¹echna ostatní $f^\Delta(v)$ jsou nulová; druhá pak z~toho,
¾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).$

Stejnì tak mù¾eme velikost toku zmìøit na~libovolném øezu:

\s{Lemma:} Pro ka¾dý øez $C$ platí, ¾e $\vert f\vert = -f^\Delta(C) \le \vert C \vert$.

\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\}$
[èili pøesouváním vrcholù zprava doleva], a~to, jak uká¾e jednoduchý rozbor pøípadù, nezmìní $f^\Delta$.
Druhá èást: $-f^\Delta(C) = f^-(C) - f^+(C) \le f^-(C) \le \vert C \vert.$ \qed

Víme tedy, ¾e velikost ka¾dého toku lze omezit kapacitou libovolného øezu. Kdybychom na¹li tok a øez stejné
velikosti, mù¾eme si proto být jisti, ¾e tok je maximální a øez minimální. To není náhoda, platí toti¾
následující vìta:

\s{Vìta (Ford, Fulkerson):} V~ka¾dé síti je velikost maximálního toku rovna velikosti minimálního øezu.

\proof Jednu nerovnost jsme dokázali v~pøedchozím lemmatu, druhá plyne z~duality lineárního
programování [max. tok a min. øez jsou navzájem duální úlohy], ale k~pìknému kombinatorickému
dùkazu pùjde opìt pou¾ít Ford-Fulkersonùv algoritmus.
\qed

\h{Ford-Fulkersonùv algoritmus}

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)
a postupnì ho zlep¹ovat tak, ¾e nalezneme nìjakou nenasycenou cestu a po¹leme po~ní \uv{co pùjde}.
To~bohu¾el nefunguje, ale mù¾eme tento postup trochu zobecnit a být ochotni pou¾ívat nejen hrany,
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
v~na¹em smìru simulovat odeètením od~toku v~protismìru. Trochu formálnìji:

\ss{Definice:}

\itemize\ibull
\:{\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)$.
  Pro úèely tohoto algoritmu budeme pøedpokládat, ¾e ke~ka¾dé hranì existuje hrana opaèná; pokud ne, dodefinujeme
  si ji a dáme jí nulovou kapacitu.
\:{\I Zlep¹ující cesta} je orientovaná cesta, její¾ v¹echny hrany mají nenulovou rezervu.
\endlist

\ss{Algoritmus:}

\algo
\:$f \leftarrow \<nulový tok>$.
\:Dokud existuje zlep¹ující cesta $P$ z~$s$ do~$t$:
\::$m \leftarrow \min_{e\in P} r(e)$.
\::Zvìt¹íme tok $f$ podél~$P$ o~$m$ (ka¾dé hranì $e\in P$ zvìt¹íme $f(e)$, pøípadnì zmen¹íme $f(e^\prime)$, podle toho, co jde).
\endalgo

\s{Analýza:} Nejdøíve si rozmysleme, ¾e pro celoèíselné kapacity algoritmus v¾dy dobìhne: v~ka¾dém kroku
stoupne velikost toku o~$m \ge 1$, co¾ mù¾e nastat pouze koneènì-krát. Podobnì pro racionální kapacity:
pøenásobíme-li v¹echny kapacity jejich spoleèným jmenovatelem, dostaneme sí» s~celoèíselnými kapacitami,
na~které se bude algoritmus chovat identicky a jak ji¾ víme, skonèí. Pro~iracionální kapacity obecnì
dobìhnout nemusí, zkuste vymyslet protipøíklad.

Uva¾me nyní situaci po~zastavení algoritmu. Funkce~$f$ je urèitì tok, proto¾e jím byla po~celou dobu
bìhu algoritmu. Prozkoumejme teï mno¾inu $C$ vrcholù, do~nich¾ po~zastavení algoritmu vede zlep¹ující cesta ze~zdroje.
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í
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
nulová. Tak¾e $f^-(C) = \vert C \vert$ a $f^+(C) = 0$, èili $\vert f\vert = \vert C \vert$.

Na¹li jsme tedy k~toku, který algoritmus vydal, øez stejné velikosti, a~proto, jak u¾ víme,
je tok maximální a øez minimální. Tím jsme také dokázali Ford-Fulkersonovu vìtu\foot{Dokonce
jsme ji dokázali i pro reálné kapacity, proto¾e mù¾eme algoritmus spustit rovnou na maximální tok místo
nulového a on se ihned zastaví a vydá certifikující øez.} a existenci maximálního toku. Navíc algoritmus nikdy
nevytváøí z~celých èísel necelá, èím¾ získáme:

\s{Dùsledek:} Sí» s~celoèíselnými kapacitami má maximální tok, který je celoèíselný.

\s{Èasová slo¾itost} F-F algoritmu mù¾e být pro obecné sítì a ne¹ikovnou volbu zlep¹ujících
cest obludná, ale jak dokázali Edmonds s~Karpem, pokud budeme hledat cesty prohledáváním
do~¹íøky (co¾ je asi nejpøímoèaøej¹í implementace), pobì¾í v~èase $\O(m^2n)$. Pokud budou
v¹echny kapacity jednotkové, snadno nahlédneme, ¾e staèí $\O(nm)$. Edmondsùv a Karpùv
odhad nebudeme dokazovat, místo toho si v~pøí¹tí kapitole pøedvedeme efektivnìj¹í algoritmus.

\h{Øezy, separátory a $k$-souvislost}

Teorie tokù nám rovnì¾ poslou¾í ke~zkoumání násobné souvislosti grafù.

\s{Definice:} Pro ka¾dý neorientovaný graf $G$ a libovolné jeho vrcholy $s,t$ zavedeme:
\itemize\ibull
\:{\I $st$-øez} je mno¾ina hran $F$ taková, ¾e v~grafu $G-F$ jsou
  vrcholy $s,t$ v~rùzných komponentách souvislosti.
\:{\I $st$-separátor} je mno¾ina vrcholù $W$ taková, ¾e $s,t\not\in W$ a v~grafu $G-W$
  jsou vrcholy $s,t$ v~rùzných komponentách souvislosti.
\:{\I Øez} je mno¾ina hran, která je $xy$-øezem pro nìjakou dvojici vrcholù $x,y$.
\:{\I Separátor} je mno¾ina vrcholù, která je $xy$-separátorem pro nìjakou dvojici vrcholù $x,y$.
\:$G$ je {\I hranovì $k$-souvislý,} pokud $\vert V\vert > k$ a v¹echny øezy v~$G$
  mají alespoò~$k$ hran.
\:$G$ je {\I vrcholovì $k$-souvislý,} pokud $\vert V\vert > k$ a v¹echny separátory v~$G$
  mají alespoò~$k$ vrcholù.
\endlist

V¹imnìte si, ¾e nesouvislý graf má øez i separátor nulové velikosti, tak¾e vrcholová i hranová 1-souvislost
splývají s~obyèejnou souvislostí pro v¹echny grafy o~alespoò dvou vrcholech. Hranovì 2-souvislé
jsou právì (netriviální) grafy bez {\I mostù,} vrcholovì 2-souvislé jsou ty bez {\I artikulací.}

Pro orientované grafy mù¾eme $st$-øezy a $st$-separátory definovat analogicky
(toti¾, ¾e po~odstranìní pøíslu¹né mno¾iny hran èi vrcholù neexistuje orientovaná
cesta z~$s$ do~$t$), globální øezy a separátory ani vícenásobná souvislost se obvykle
nedefinují.

\s{Poznámka:} Minimální orientované $st$-øezy podle této definice a minimální tokové øezy
podle definice ze~zaèátku kapitoly splývají: ka¾dý tokový øez~$C$ odpovídá $st$-øezu stejné
velikosti tvoøenému hranami v~$C^-$; naopak pro~minimální $st$-øez musí být mno¾ina
vrcholù dosa¾itelných z~$s$ po~odebrání øezu z~grafu tokovým øezem, opìt stejné velikosti.
[Velikost mìøíme souètem kapacit hran.] Dává tedy rozumný smysl øíkat obojímu stejnì.
Podobnì se chovají i neorientované grafy, pokud do~\uv{tokového} øezu poèítáme
hrany v~obou smìrech.

Analogií tokù je pak existence nìjakého poètu disjunktních cest (vrcholovì nebo hranovì)
mezi vrcholy~$s$ a~$t$. Analogií F-F~vìty pak budou známé Mengerovy vìty:

\s{Vìta (Mengerova, lokální hranová orientovaná):}
Buï $G$ orientovaný graf a $s,t$ nìjaké jeho vrcholy. Pak je velikost minimálního
$st$-øezu rovna maximálnímu poètu hranovì disjunktních $st$-cest.\foot{orientovaných
cest z~$s$ do~$t$}

\proof Z~grafu sestrojíme sí» tak, ¾e $s$~bude zdroj, $t$~spotøebiè a v¹em
hranám nastavíme kapacitu na~jednotku. Øezy v~této síti odpovídají øezùm v~pùvodním
grafu. Podobnì ka¾dý systém hranovì disjunktních $st$-cest odpovídá toku stejné
velikosti a naopak ke~ka¾dému celoèíselnému toku dovedeme najít systém disjunktních
cest (hladovì tok rozkládáme na~cesty a prùbì¾nì odstraòujeme cirkulace, které
objevíme). Pak pou¾ijeme F-F vìtu.
\qed

\s{Vìta (Mengerova, lokální vrcholová orientovaná):}
Buï $G$ orientovaný graf a $s,t$ nìjaké jeho vrcholy takové, ¾e $st\not\in E$.
Pak je velikost minimálního $st$-separátoru rovna maximálnímu poètu vrcholovì
disjunktních $st$-cest.\foot{Tím myslíme cesty disjunktní a¾ na~krajní vrcholy.}

\proof Podobnì jako v~dùkazu pøedchozí vìty zkonstruujeme vhodnou sí».
Tentokrát ov¹em rozdìlíme ka¾dý vrchol na~vrcholy $v^+$ a $v^-$, v¹echny hrany, které
pùvodnì vedly do~$v$, pøepojíme do~$v^+$, hrany vedoucí z~$v$ povedou z~$v^-$
a pøidáme novou hranu z~$v^+$ do~$v^-$. V¹echny hrany budou mít jednotkové kapacity.
Toky nyní odpovídají vrcholovì disjunktním cestám, øezy v~síti separátorùm.
\qed

\figure{vertex-split.eps}{Rozdìlení vrcholu}{\epsfxsize}

Podobnì dostaneme neorientované lokální vìty (neorientovanou hranu nahradíme
orientovanými v~obou smìrech) a z~nich pak i globální varianty popisující
$k$-souvislost grafù:

\s{Vìta (Mengerova, globální hranová neorientovaná):}
Neorientovaný graf~$G$ je hranovì $k$-souvislý právì tehdy, kdy¾ mezi ka¾dými
dvìma vrcholy existuje alespoò~$k$ hranovì disjunktních cest.

\s{Vìta (Mengerova, globální vrcholová neorientovaná):}
Neorientovaný graf~$G$ je vrcholovì $k$-souvislý právì tehdy, kdy¾ mezi ka¾dými dvìma
vrcholy existuje alespoò~$k$ vrcholovì disjunktních cest.

\h{Maximální párování v bipartitním grafu}

Jiným problémem, který lze snadno pøevést na~hledání maximálního toku, je nalezení
{\I maximálního párování} v~bipartitním grafu, tedy mno¾iny hran takové, ¾e ¾ádné
dvì hrany nemají spoleèný vrchol. Maximálním míníme vzhledem k~poètu hran,
nikoliv vzhledem k~inkluzi.

Z~bipartitního grafu $(A\cup B, E)$ sestrojíme sí» obsahující v¹echny pùvodní vrcholy
a navíc dva nové vrcholy $s$ a~$t$, dále pak v¹echny pùvodní hrany orientované z~$A$ do~$B$,
nové hrany z~$s$ do~v¹ech vrcholù partity~$A$ a ze~v¹ech vrcholù partity~$B$ do~$t$.
Kapacity v¹ech hran nastavíme na jednièky:

\fig{bipartitni.eps}{0.4\hsize}

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
a ¾e velikost toku je rovna velikosti párování. Staèí tedy nalézt maximální celoèíselný
tok (tøeba F-F algoritmem) a do~párování umístit ty hrany, po~kterých nìco teèe.

Podobnì mù¾eme najít souvislost mezi øezy v~této síti a {\I vrcholovými pokrytími}
zadaného grafu -- to jsou mno¾iny vrcholù takové, ¾e se dotýkají ka¾dé hrany.
Tak z~F-F vìty získáme jinou standardní vìtu:

\s{Vìta (Königova):} V~ka¾dém bipartitním grafu je velikost maximálního párování
rovna velikosti minimálního vrcholového pokrytí.

\proof
Pokud je $W$ vrcholové pokrytí, musí hrany vedoucí mezi vrcholy této mno¾iny a zdrojem
a spotøebièem tvoøit stejnì velký øez, proto¾e ka¾dá $st$-cesta obsahuje alespoò
jednu hranu bipartitního grafu a ta je pokryta. Analogicky vezmeme-li libovolný
$st$-øez (ne~nutnì tokový, staèí hranový), mù¾eme ho bez zvìt¹ení upravit na~$st$-øez
pou¾ívající pouze hrany ze~$s$ a do~$t$, kterému pøímoèaøe odpovídá vrcholové pokrytí
stejné velikosti.
\qed

\bye
