Processing math: 100%

Przepływy i przekroje

Wyobraźmy sobie sieć wodociągową, składającą się z rur o zadanej przepustowości, przystosowanych do przesyłania wody w określonym z góry kierunku oraz ze zbiorników połączonych tymi rurami. W przedstawionej sieci dwa zbiorniki są wyróżnione. Jeden z nich to źródło, w którym jest umieszczona pompa wpompowująca wodę, oraz ujście, czyli klient firmy wodociągowej lubiący nad wyraz zużywać wodę. Zadaniem firmy wodociągowej jest dostarczanie jak największej ilości wody klientowi. Ilość przesyłanej wody konkretną rurą nie może oczywiście przekraczać jej przepustowości. Pytanie, na które chciałby sobie odpowiedzieć właściciel firmy doprowadzającej wodę, to ile maksymalnie wody jest w stanie przesyłać w każdej chwili do klienta. Formalnym modelem dla tego typu zagadnień są sieci.

Sieć to trójka N=(V,A,c), w której:

  • (V,A) jest pełnym digrafem (czyli A=V×V),
  • funkcja c:E[0,+), zwana przepustowością sieci, każdej krawędzi vw przypisuje nieujemną liczbę rzeczywistą c(vw).
  • Ponadto wyróżnia się dwa wierzchołki s,tV, które są odpowiednio źródłem oraz ujściem sieci.

Przepustowość c(vw) krawędzi vw może być interpretowana jako wartość potencjalnie maksymalnego przepływu z wierzchołka v do w. Jeśli przepustowość jakiejś krawędzi e wynosi 0, to krawędź e jest pomijana w graficznym przedstawieniu sieci.

Przepływ w sieci N=(V,A,c) to funkcja f:E[0,+) spełniająca warunki:

  • 0f(vw)c(vw) dla każdej krawędzi vw. Wartość przepływu daną krawędzią nie może przekroczyć przepustowości tej krawędzi.
  • xVf(xv)=xVf(vx) dla każdego wierzchołka v poza źródłem s i ujściem t. Równość ta oznacza, że sumaryczna wartość tego, co wpływa do wierzchołka jest równa sumarycznej wartości tego, co zeń wypływa.
  • xV(f(sx)f(xs))=xV(f(xt)f(tx)), tzn. sumaryczna wartość tego, co wypływa ze źródła musi być równa sumarycznej wartości tego, co wpływa do ujścia. Wartość ta będzie określana wartością przepływu f.

Do analizy przepływów przydatne okazuje się pojęcie przekroju sieci. Można go sobie wyobrażać jako zbiór krawędzi XA, usunięcie których z sieci N=(V,A,c) rozspaja sieć na dwie części S oraz T, przy czym S zawiera źródło, a T ujście. Warto zauważyć, że X tworzy zbiór rozspajający w grafie szkieletowym digrafu (V,A). Formalnie przekrój zdefiniujemy jako parę powstałych zbiorów wierzchołków. Taka definicja okaże się bardziej użyteczna w praktyce.

Przekrój sieci to para podzbiorów (S,T) zbioru wierzchołków V, taka że:

  • S,T tworzą podział V, tzn. są rozłączne i w sumie dają cały zbiór V,
  • źródło s należy do S, a ujście t należy do zbioru T.

Przepustowość przekroju (S,T) to suma

c(S,T)=vS, wTc(vw).

Zależność między przepływem a przekrojem została podana w następującym Twierdzeniu o maksymalnym przepływie i minimalnym przekroju.

Twierdzenie 13.12 [Ford i Fulkerson 1956]

W dowolnej sieci wartość maksymalnego przepływu jest równa przepustowości minimalnego przekroju.

Dowód

Niech N=(V,A,c) będzie siecią o źródle s i ujściu t. Oczywiście wartość maksymalnego przepływu nie może przekraczać przepustowości minimalnego przekroju. Wystarczy więc wskazać przekrój, którego przepustowość równa się wartości maksymalnego przepływu f w sieci N.

Niech SV będzie zbiorem zawierającym źródło s oraz te wierzchołki w, które w grafie szkieletowym digrafu (V,A) połączone są ze źródłem pewną ścieżką s=v1vk=w, w której łuk vivi+1 ma niepełny przepływ (tzn. f(vivi+1)<c(vivi+1)) lub też łuk vi+1vi ma niezerowy przepływ f(vi+1vi)>0. W języku firmy wodociągowej S jest zbiorem wierzchołków, do których można jeszcze przepchnąć choć trochę wody.

Załóżmy przez chwilę, że tS. Istnieje wtedy ścieżka s=v0vk=t, w której dla każdej pary kolejnych wierzchołków vi,vi+1 można byłoby zwiększyć przepływ na łuku vivi+1 lub zmniejszyć na łuku vi+1vi. Niech ε>0 będzie jakąś wartością zmian przepływu możliwych do wykonania na każdej parze vi,vi+1 kolejnych wierzchołków ścieżki. Wtedy, modyfikując odpowiednio łuki pomiędzy wierzchołkami vi,vi+1 uzyskalibyśmy przepływ o wartości f+ϵ, co przeczy maksymalności przepływu f.

Udowodniliśmy właśnie, że S,T tworzy przekrój sieci N, gdzie T=VS. Pokażmy, że przepustowość tego przekroju równa się wartości przepływu f. Z definicji S wynika, że jeżeli rozważymy dwa elementy vS oraz wT, to przepływ f(vw)=c(vw) oraz f(wv)=0.Tak więc przepustowość przekroju równa jest

vS, wTc(vw)=vS, wT(f(vw)f(wv)).(1)

Z faktu, że dla uS{s} wartość tego co wpływa jest równa temu co wypływa, czyli innymi słowy

xV(f(ux)f(xu))=0,

otrzymujemy następującą równość:

xT(f(ux)f(xu))=xS{u}(f(xu)f(ux)).

Prawą stronę równości (1) można więc przekształcić w następujący sposób:

vSwT(f(vw)f(wv))=vS{u}wT(f(vw)f(wv))+xT(f(ux)f(xu))=vS{u}wT(f(vw)f(wv))+xS{u}(f(xu)f(ux))=vS{u}wT{u}(f(vw)f(wv))

Powtarzając wielokrotnie przekładanie kolejnych punktów u z S do T otrzymamy w konsekwencji

vSwT(f(vw)f(wv))=wV{v}(f(sw)f(ws)),

co na mocy (1) oznacza, że wartość przepływu z wierzchołka s do wierzchołka t jest równa przepustowości przekroju wyznaczonego przez zbiory S,T.