Fordova–Fulkersonova věta

Fordova-Fulkersonova věta uvádí do vztahu maximální tok a minimální řez v síti oddělující zdroj od stoku. Vychází z ní i myšlenka základního způsobu hledání maximálního toku - Fordova-Fulkersonova algoritmu, která řeší úlohu toku v síti.

Definice

Síť definujeme jako ohodnocený orientovaný graf G = ( V , E ) {\displaystyle G=(V,E)} s vyznačenými dvěma různými vrcholy z {\displaystyle z} a s {\displaystyle s} (označujeme je jako zdroj a stok). Kapacita c : E R 0 + {\displaystyle c\colon E\to R_{0}^{+}} je funkce ohodnocující hrany grafu nezápornými reálnými čísly.

Tok v síti je každá funkce f : E R 0 + {\displaystyle f\colon E\to R_{0}^{+}} která splňuje následující podmínky

  1. Pro každou hranu e E {\displaystyle e\in E} platí 0 f ( e ) c ( e ) {\displaystyle 0\leq f(e)\leq c(e)} .
  2. Pro každý vrchol v V {\displaystyle v\in V} kromě zdroje a stoku je vstupní tok roven výstupnímu toku: ( x , u ) E f ( x , u ) = ( u , y ) E f ( u , y ) {\displaystyle \sum _{(x,u)\in E}f(x,u)=\sum _{(u,y)\in E}f(u,y)}

Velikost toku lze definovat jako součet toků na hranách vedoucích od zdroje z {\displaystyle z} : | f | = ( z , v ) E f ( z , v ) {\displaystyle \textstyle |f|=\sum _{(z,v)\in E}f(z,v)} .

Problém maximálního toku v síti spočívá v nalezení toku f {\displaystyle f} mezi zdrojem a stokem, který maximálně využívá kapacit hran.

Je-li dána síť G {\displaystyle G} a tok f {\displaystyle f} pak reziduální síť G f {\displaystyle G_{f}} k danému toku f {\displaystyle f} je orientovaný graf definovaný na vrcholech V {\displaystyle V} původního grafu. Jeho množina hran E f {\displaystyle E_{f}} vychází z množiny hran grafu G {\displaystyle G} . Hrana e = ( u , v ) E {\displaystyle e=(u,v)\in E} se stane hranou reziduální sítě, pokud má vzhledem k f {\displaystyle f} ještě volnou kapacitu, tj. f ( e ) c ( e ) {\displaystyle f(e)\leq c(e)} . Reziduální sítě hrají významnou roli při algoritmickém hledání maximálních toků. Základní myšlenkou je, že pokud reziduální síť k toku f {\displaystyle f} obsahuje cestu mezi zdrojem a stokem, pak lze podél této cesty velikost toku f {\displaystyle f} zvětšit.


Řezem mezi zdrojem a stokem rozumíme množinu hran R E {\displaystyle R\subseteq E} . Tuto množinu získáme rozdělením množiny vrcholů na dvě disjunktní části Z {\displaystyle Z} a S {\displaystyle S} , které od sebe 'oddělují' zdroj a stok, tj. z Z {\displaystyle \textstyle z\in Z} a s S {\displaystyle \textstyle s\in S} . Řezem R {\displaystyle R} pak rozumíme množinu hran mezi množinami Z {\displaystyle Z} a S {\displaystyle S} . Kapacitu řezu pak definujeme jako c ( R ) = c ( Z , S ) = ( u , v ) Z × S c u v {\displaystyle c(R)=c(Z,S)=\sum _{(u,v)\in Z\times S}c_{uv}}

Problém minimálního řezu spočívá v nalezení rozdělení vrcholů na Z {\displaystyle Z} a S {\displaystyle S} takové, že kapacita souvisejícího řezu c ( R ) {\displaystyle c(R)} je minimální.

Znění

Obecné lze větu zformulovat následovně

Pro každou síť se velikost maximálního toku rovná kapacitě minimálního řezu.

Poněkud precizněji pak lze větu zformulovat takto:

Jestliže f {\displaystyle f} je tok v síti G = ( V , E ) {\displaystyle G=(V,E)} , pak následující tvrzení jsou ekvivalentní

  1. f {\displaystyle f} je maximální tok v síti G {\displaystyle G}
  2. Reziduální síť G f {\displaystyle G_{f}} neobsahuje žádnou zlepšující cestu (tj. neexistuje cesta ze zdroje do cíle v reziduální síti)
  3. V síti G {\displaystyle G} existuje řez R E {\displaystyle R\subseteq E} pro který platí | f | = c ( R ) {\displaystyle |f|=c(R)} .

Vysvětlení

Pro každý řez v síti G {\displaystyle G} platí, že jeho kapacita je větší nebo rovno velikosti libovolného toku, který přes řez přetéká. Toto plyne přímo z bodu 1. definice toku v síti.

Uvažujeme-li nyní maximální tok v síti f {\displaystyle f} , pak musíme najít i jeden řez, pro který platí | f | = c ( R ) {\displaystyle |f|=c(R)} . Pokud by se velikost toku f {\displaystyle f} nerovnala kapacitě řezu R {\displaystyle R} , bylo by možné tok f {\displaystyle f} rozšířit o tento rozdíl na nový (větší) tok f {\displaystyle f'} což je v rozporu z maximalitou toku f {\displaystyle f} kterou jsme předpokládali.

Související články