Przepływy w sieciach

by Jerry Sky

2020-05-13



Wersje twierdzenie Mengera dla digrafów

oryginalne twierdzenie Mengera

Ustalamy graf skierowany G=(V,E)\vec{G} = (V, \vec{E}), zbiory A,BVA,B\subseteq V:

  1. (A,B)(A,B)–droga: ciąg x0,e1,x1,e2,,en,xnx_0,e_1,x_1,e_2,\dots,e_n,x_n takie, że x0A,xnBx_0 \in A, x_n\in B oraz eie_i jest krawędzią (skierowaną) od xi1x_{i-1} do xix_i czyli tak samo jak dla grafów, z krawędziami zastąpionymi krawędziami skierowanymi
  2. Podobnie definiujemy pojęcie (A,B)(A,B)–łącznika wierzchołkowo rozłącznego, krawędziowo rozłącznego, (A,B)(A,B)–separatora wierzchołkowego i separatora krawędziowego.
  3. Podstawowe twierdzenie: maksymalna moc (A,B)(A,B)–łącznika jest równa minimalnej mocy (A,B)(A,B)–separatora
    D-d: powtórzenie dowodu dla grafów (indukcja po E|\vec{E}|)

Oznaczenie #1

Dla digrafu G=(V,E,φ)G = (V,E,\varphi) i X,YVX,Y\subseteq V zbiór krawędzi z XX do YY oznaczamy przez E(X,Y)E(X,Y), czyli: E(X,Y)={eE:fst(e)Xsnd(e)Y}. E(X,Y) = \{e\in E: \mathrm{fst}(e) \in X\land \mathrm{snd}(e) \in Y\}.

Def Separator minimalny

Załóżmy, że G=(V,E,φ)G = (V,E,\varphi) jest digrafem, s,tVs,t\in V oraz, że zbiór krawędzi KK jest ({s},{t})(\{s\},\{t\})–separatorem. Wówczas istnieje zbiór XVX\subseteq V taki, że sX,tX=VXs\in X, t\in X^\complement = V\setminus X oraz E(X,X)KE(X,X^\complement)\subseteq K.

D-d separator minimalny

Niech X={xV:jest droga od s do x w grafie GK}X = \{x\in V: \text{jest droga od s do x w grafie } G\setminus K\}. Weźmy krawędź ee taką, że fst(e)X\mathrm{fst}(e) \in X oraz snd(e)X\mathrm{snd}(e) \in X^\complement:

d-d 1 1

Wówczas eKe \in K, gdyż inaczej mielibyśmy yXy\in X. Zatem E(X,X)KE(X,X^\complement)\subseteq K.

Oznaczenie #2

Niech (V,E)(V,E) będzie grafem skierowanym i f:ERf: E\to \mathbb{R}. Niech XVX\subseteq V. Kładziemy outf(X)={f(e):eE(X,X)}\mathrm{out}_f(X)=\sum\{f(e): e\in E(X,X^\complement)\} i inf(X)={f(e):eE(X,X)}\mathrm{in}_f(X) = \sum\{f(e): e\in E(X^\complement, X)\}.

Dla uproszczenia notacji definiujemy również outf(x)=outf({x})\mathrm{out}_f(x) = \mathrm{out}_f(\{x\}) i inf(x)=inf({x})\mathrm{in}_f(x) = \mathrm{in}_f(\{x\}).

Def Pseudo-potok

Niech G=(V,E)G=(V,E) będzie grafem skierowanym, s,tVs,t\in V i sts\neq t. Funkcję f:ERf:E\to \mathbb{R} nazywamy pseudo-potokiem w (V,E,s,t)(V,E,s,t) jeśli: (xV{s,t})(outf(x)=inf(x)). (\forall x\in V\setminus\{s,t\})(\mathrm{out}_f(x) = \mathrm{in}_f(x)).

Fakt #1

Niech f:ERf: E\to \mathbb{R} będzie pseudo-potokiem w (V,E,s,t)(V,E,s,t) oraz XV{s,t}X\subseteq V\setminus \{s,t\}. Wówczas: outf(X)=inf(X) \mathrm{out}_f(X) = \mathrm{in}_f(X)

D-d Faktu #1

Zakładamy najpierw, że nie ma żadnych krawędzi od ss do tt ani od tt do ss.

Zauważmy, że: 0=xX(outf(x)inf(x))=xX(ef(e)(fst(e)=xsnd(e)=x))=ef(e)xX(fst(e)=xsnd(e)=x) 0 = \sum_{x\in X}(\mathrm{out}_f(x) - \mathrm{in}_f(x)) \\= \sum_{x\in X}\left(\sum_{e}f(e)(\llbracket\mathrm{fst}(e) = x\rrbracket - \llbracket\mathrm{snd}(e)=x\rrbracket)\right) \\= \sum_{e}f(e)\sum_{x\in X}(\llbracket\mathrm{fst}(e)=x\rrbracket - \llbracket\mathrm{snd}(e)=x\rrbracket)

Niech α(e)=xX(fst(e)=xsnd(e)=x)\alpha(e) = \sum_{x\in X}(\llbracket\mathrm{fst}(e)=x\rrbracket - \llbracket\mathrm{snd}(e)=x\rrbracket). Rozważmy dowolną krawędź ee.
Jeśli fst(e)X\mathrm{fst}(e) \notin X i snd(e)X\mathrm{snd}(e)\notin X to α(e)=0\alpha(e) = 0.
Jeśli fst(e)X\mathrm{fst}(e) \in X i snd(e)X\mathrm{snd}(e)\in X to α(e)=0\alpha(e) = 0.
Jeśli fst(e)X\mathrm{fst}(e)\in X i snd(e)X\mathrm{snd}(e)\notin X to α(e)=1\alpha(e)=1
Jeśli fst(e)X\mathrm{fst}(e)\notin X i snd(e)X\mathrm{snd}(e)\in X to α(e)=1\alpha(e) = -1.

Zatem 0=outf(X)inf(X)0 = \mathrm{out}_f(X)-\mathrm{in}_f(X).

Załóżmy teraz, że są jakieś krawędzie od ss do tt lub od tt do ss. Stosujemy następujący trick:

Twierdzenie #1

Niech f:ERf: E\to \mathbb{R} będzie pseudo-potokiem w (V,E,s,t)(V,E,s,t). Wówczas: outf(s)inf(s)=(outf(t)inf(t)). \mathrm{out}_f(s) - \mathrm{in}_f(s) = -(\mathrm{out}_f(t) - \mathrm{in}_f(t)).

D-d Twierdzenia #1

Stosujemy poprzedni fakt do zbioru X=V{s,t}X=V\setminus \{s,t\}. Zauważamy, że outf(X)=inf(s)+inf(t)\mathrm{out}_f(X) = \mathrm{in}_f(s) + \mathrm{in}_f(t) oraz inf(X)=outf(s)+outf(t)\mathrm{in}_f(X)=\mathrm{out}_f(s)+\mathrm{out}_f(t).

Def Wartość ff

Jeśli ff jest pseudo-potokiem w (V,E,s,t)(V,E,s,t) to liczbę outf(s)inf(s)\mathrm{out}_f(s) - \mathrm{in}_f(s) nazywamy wartością ff i oznaczamy ją przez f\lVert f\rVert

Liczbę tę możemy interpretować jako produktywność źródła bądź jako konsumpcję ujścia. Równość z poprzedniego twierdzenia możemy interpretować tak: „ilość tego co wyprodukuje źródło jest równa ilości tego co pochłania ujście.

Def Sieć

Siecią nazywamy N=(V,E,s,t,c)\mathcal{N} = (V,E,s,t,c) taką, że (V,E)(V,E) jest digrafem, s,tVs,t \in V, sts\neq t oraz c:E[0,){}c: E \to [0,\infty) \cup \{\infty\}

Def Potok

Jeśli N=(V,E,s,t,c)\mathcal{N} = (V,E,s,t,c) jest siecią, to funkcję f:E[0,]f: E\to [0,\infty] nazywamy potokiem w N\mathcal{N} jeśli ff jest pseudo-potokiem w (V,E,s,t)(V,E,s,t) oraz (eE)(0f(e)c(e))(\forall e \in E)(0\le f(e) \le c(e)).

Zadanie optymalizacyjne, które będzie rozważane na dalszych wykładach: mamy daną sieć N\mathcal{N}. Chcemy znaleźć przepływ przez N\mathcal{N} o największej wartości.

Twierdzenie #2

Niech N\mathcal{N} będzie siecią (skończoną). Istnieje wtedy przepływ fwNf^* w \mathcal{N} taki, że: f=sup{f:f jest potokiem w N} \lVert f^* \rVert = \sup\{ \lVert f \rVert: f \text{ jest potokiem w } \mathcal{N} \}

szukanie potoku

Def Ścieżka powiększająca

Ścieżką powiększającą potoku ff nazywamy ciąg x0e1x1e2enxnx_0 e_1 x_1 e_2\dots e_n x_n taki, że x0=s,xn=tx_0 = s, x_n = t oraz dla każdego i=1,,ni = 1,\dots,n mamy: (φ(ei)=(xi1,xi)f(ei)<c(ei))(φ(ei)=(xi,xi1)f(ei)>0). ( \varphi(e_i) = (x_{i-1}, x_i) \land f(e_i) < c(e_i) ) \lor ( \varphi(e_i) = (x_i, x_{i-1}) \land f(e_i) > 0 ). Zapasem takiego potoku nazywamy liczbę δ=min{δ1,,δn}\delta = \min\{ \delta_1,\dots, \delta_n \} gdzie δi={c(ei)f(ei):φ(ei)=(xi1,xi)f(ei):φ(ei)=(xi,xi1) \delta_i = \begin{cases} c(e_i) - f(e_i) &: \varphi(e_i) = (x_{i-1}, x_i)\\ f(e_i) &: \varphi(e_i) = (x_i, x_{i-1}) \end{cases}

Fakt #2

Jeśli istnieje ścieżka powiększająca dla potoku ff o zapasie δ>0\delta > 0, to istnieje potok ff^* taki, że f=f+δ\lVert f^* \rVert = \lVert f \rVert + \delta.

Obserwacja ta jest podstawą metody Forda-Fulkersona szukania potoków maksymalnych.