Sunteți pe pagina 1din 17

Fluxuri












Reele de transport
Fluxuri maxime
Algoritmul Ford-Fulkerson
Algoritmul Edmonds-Karp
Tietura minim
Reele de transport particulare
Rezumat
Implementri sugerate
Probleme propuse
Soluiile problemelor

Capitolul

n cadrul acestui capitol vom prezenta noiunea de reea de transport, vom defini fluxul maxim ntr-o astfel de reea i vom arta modul n care poate fi determinat un astfel de flux.
De asemenea, va fi introdus noiunea de tietur minim i vor fi prezentate cteva reele de transport particulare.

9.1. Reele de transport


Prin reea de transport nelegem un graf orientat care conine dou noduri speciale: o
surs i o destinaie.
Un nod surs este un nod al grafului n care nu intr nici un arc; aadar, gradul interior al unei surse este ntotdeauna zero.
Un nod destinaie este un nod al grafului din care nu iese nici un arc; aadar, gradul
exterior al unei destinaii este ntotdeauna zero.
De obicei, nodul surs este notat prin s, n timp ce pentru nodul destinaie este folosit notaia t.
O reea de transport este asemuit frecvent cu mai multe conducte dispuse ntre un
robinet surs s i un canal de scurgere t. Conductele reprezint arcele reelei de transport, iar punctele de intersecie ale conductelor reprezint nodurile reelei.
Fiecare conduct este caracterizat printr-o capacitate. Pentru exemplul considerat,
capacitatea reprezint cantitatea maxim de ap care poate s treac prin conduct la
un moment dat.

9. Fluxuri

137

n figura 9.1 este prezentat o reea de transport cu apte noduri. Sursa i destinaia au fost notate prin s,
respectiv t, iar celelalte noduri ale reelei au fost numerotate de la 1 la 5.
Se observ c nu exist nici un
arc care ajunge la nodul surs i nu
exist nici un arc care pleac de la
nodul destinaie.

Figura 9.1: O reea de transport

9.2. Fluxuri maxime


Pstrnd exemplul sistemului de conducte, fluxul maxim este dat de cantitatea maxim de ap care poate fi pompat prin robinetul s astfel nct s nu se depeasc pentru nici una dintre conducte capacitatea maxim.
Din punct de vedere matematic, fluxul maxim este dat de o funcie f definit pe
mulimea arcelor grafului cu valori n mulimea numerelor naturale (sau reale n anumite cazuri) care trebuie s satisfac urmtoarele trei proprieti:
pentru fiecare arc, valoarea funciei f trebuie s fie mai mic sau egal cu capacitatea arcului respectiv;
pentru fiecare nod (cu excepia sursei i a destinaiei) suma valorilor funciei f
pentru arcele care ajung la nodul respectiv trebuie s fie egal cu suma valorilor funciei f pentru arcele care pleac de la nodul respectiv;
suma valorilor funciei f pentru arcele care ajung la destinaie trebuie s fie
egal cu suma valorilor funciei f pentru arcele care pleac de la surs; aceast
sum este notat cu F i trebuie s fie ct mai mare posibil; valoarea F reprezint fluxul maxim al reelei de transport.
De exemplu, pentru reeaua de transport din figura 1, fluxul maxim este 10. Acesta
poate fi obinut folosind funcia f definit astfel:
f(s, 1) = 2
f(s, 4) = 8
f(1, 2) = 2

f(1, 3) = 0
f(2, t) = 5
f(3, 5) = 8

f(4, 3) = 8
f(5, 2) = 3
f(5, t) = 5

Se observ imediat c avem:


F = f(s, 1) + f(s, 4) = f(2, t) + f(5, t) = 2 + 8 = 5 + 5 = 10.
Prin studierea valorilor funciei f i a capacitilor arcelor, se observ imediat c i
prima condiie pe care trebuie s o satisfac funcia f este ndeplinit (valorile alese
pentru un arc sunt cel mult egale cu capacitatea arcului respectiv).

138

I. Teoria grafurilor

De asemenea, se observ c cea de-a doua condiie este ndeplinit pentru toate cele cinci noduri intermediare, deoarece avem:
f(s, 1) = f(1, 2) + f(1, 3) = 2
f(1, 2) + f(5, 2) = f(2, t) = 5
f(1, 3) + f(4, 3) = f(3, 5) = 8
f(s, 4) = f(4, 3) = 8
f(3, 5) = f(5, 2) + f(5, t) = 5

9.3. Algoritmul Ford-Fulkerson


n cadrul acestei seciuni vom descrie un prim algoritm care poate fi utilizat pentru a
determina valoarea fluxului maxim ntr-o reea de transport. Pentru nceput vom introduce noiunile de arc special i drum de cretere, iar apoi vom descrie algoritmul i i
vom analiza complexitatea.

9.3.1. Arce speciale


n vederea aplicrii algoritmului pe care l vom prezenta ulterior, pentru fiecare arc (i,
j) de capacitate k, vom introduce un arc (j, i) a crui capacitate va fi 0. Un astfel de arc
va fi numit arc special.
Dac unui arc i este asociat capacitatea c atunci, iniial, costul arcului va fi c, iar
costul arcului special corespunztor va fi 0. Dup cum vom vedea, suma capacitilor
celor dou arce va fi ntotdeauna c.

9.3.2. Drumuri de cretere


Un drum de cretere ntr-o reea de transport este dat de un drum de la surs la destinaie, care conine numai arce de cost strict pozitiv (printre acestea se pot numra i
arce speciale).
De exemplu, pentru graful din figura 9.1, un posibil drum de cretere este s 4 3
5 t. Un alt drum de cretere ar putea fi s 1 3 5 2 t.
Valoarea unui drum de cretere va fi dat de cel mai mic cost al unui arc care face
parte din drumul respectiv.

9.3.3. Prezentarea algoritmului


Practic, algoritmul Ford-Fulkerson const n identificarea succesiv a unor drumuri de
cretere pn n momentul n care nu mai exist nici un astfel de drum.
Dup identificarea unui drum de cretere se determin valoarea acestuia, iar aceasta
se scade din costurile fiecrui arc (i, j) de pe drumul respectiv i se adun la costurile
arcelor corespunztoare de forma (j, i). De asemenea, valoarea respectiv se adun la
fluxul maxim determinat pn n momentul respectiv.

9. Fluxuri

139

De exemplu, pentru drumul de cretere s 4 3 5 t, avem valoarea 5. Vom


scdea cu 5 costurile arcelor (s, 4), (4, 3), (3, 5) i (5, t) i vom crete cu 5 costurile arcelor (4, s), (3, 4), (5, 3) i (t, 5).
Datorit faptului c un drum de cretere conine arce care au costuri pozitive, valoarea sa va fi ntotdeauna un numr pozitiv. Ca urmare, pentru fiecare drum de cretere determinat, valoarea fluxului va crete cu cel puin o unitate.
Datorit faptului c avem capaciti finite, fluxul maxim este un numr finit. Din
aceste motive suntem siguri c, mai devreme sau mai trziu, algoritmul se va ncheia.
Determinarea unui drum de cretere se poate realiza prin orice metod dar, din motive de eficien, trebuie utilizat una al crei ordin de complexitate este O(M + N).
Vom prezenta n continuare versiunea n pseudocod a algoritmului.
Subalgoritm Ford_Fulkerson(G)

creeaz matricea a

{ G reeaua de transport }
{ aij reprezint capacitatea unui arc }
{ de la nodul i la nodul j }

flux_maxim 0
ct timp exist drumuri de cretere execut
determin un drum de cretere D
min
pentru fiecare muchie (i,j) din D execut
dac aij < min atunci
min aij
sfrit dac
flux_maxim flux_maxim + min
sfrit pentru
pentru fiecare muchie (i,j) din D execut
aij aij - min
aji aji + min
sfrit pentru
sfrit ct timp
sfrit subalgoritm

Practic se va ncerca la fiecare pas determinarea unui drum de cretere i algoritmul


se va opri n momentul n care nu mai poate fi gsit nici un astfel de drum.

140

De obicei, este necesar i determinarea valorilor funciei f (cantitatea de


ap care se afl pe o anumit conduct
sau fluxul pe un anumit arc). Pentru
aceasta este suficient s se afieze costurile arcelor speciale. n figura 9.2
sunt prezentate costurile tuturor arcelor dup ncheierea execuiei algoritmului Ford-Fulkerson. Se observ c
nu mai exist nici un drum de cretere
i c valoarea fluxului este 10.

I. Teoria grafurilor

Figura 9.2: Costurile arcelor dup executarea algoritmului Ford-Fulkerson

9.3.4. Corectitudinea algoritmului


Dei exist o demonstraie matematic a corectitudinii algoritmului prezentat, aceasta
nu va fi descris aici, deoarece ea nu este absolut necesar pentru a nelege mecanismul de funcionare al acestuia.
S presupunem c, pentru graful
din figura 9.1 determinm urmtoarele trei drumuri de cretere: la primul
pas este gsit drumul s 1 3 5 t,
la al doilea pas drumul s 4 3 5
t, iar la al treilea pas s 4 3 5 2
t. n acest moment arcele grafului au
costurile prezentate n figura 9.3. Se Figura 9.3: Costurile arcelor dup determinarea
observ c nici unul dintre aceste
primelor trei drumuri
de cretere
drumuri nu conine arce speciale, iar
fluxul obinut este doar 8.
De asemenea, observm faptul c nu mai exist nici un drum de cretere care nu
conine arce speciale. Totui, dup cum am artat, fluxul maxim este 10.
n acest moment vom arta semnificaia drumurilor de cretere care conin i arce
speciale. Pentru graful din figura 9.3. exist un singur drum de cretere i anume s 4
3 1 2 t; acest drum conine arcul special (3, 1). Revenind la similitudinea cu reeaua de conducte, putem spune c "scoatem apa de pe conducta respectiv".
Studiind fenomenele care au loc la trecerea apei prin conducte remarcm urmtoarele:
de pe conducta (1, 3) a fost scoas toat apa, deci prin ea nu mai trece ap;
n nodul 1 am redirecionat fluxul de valoare 2, care ajungea prin conducta (s,1);
astfel, el nu mai iese prin conducta (1, 3), ci prin conducta (1, 2);
fluxul care ajunge n nodul 3 va avea n continuare valoarea 8, dar acum va ajunge
n ntregime pe conducta (4, 3), deoarece pe conducta (1, 3) nu mai exist ap.

9. Fluxuri

141

Aceasta este doar o demonstraie intuitiv, neriguroas, avnd scopul de a arta


faptul c folosirea arcelor speciale nu duce la obinerea unor rezultate incorecte.

9.3.5. Analiza complexitii


La fiecare pas se determin un drum de cretere; aa cum am artat anterior, ordinul de
complexitate al unei astfel de operaii trebuie s fie O(M + N). n continuare se execut cteva operaii pe baza arcelor de pe drumul de cretere. Deoarece drumul de cretere poate conine cel mult N noduri, ordinul de complexitate al acestor operaii este
O(N). Ca urmare, ordinul de complexitate al operaiilor efectuate la un anumit pas este
O(M + N).
Din nefericire, algoritmul ne asigur doar faptul c la fiecare pas valoarea fluxului
va crete cu cel puin o unitate. Aadar, dac fluxul maxim este F, exist posibilitatea
de a efectua F pai.
Ca urmare, ordinul de complexitate al algoritmului Ford-Fulkerson este O(F (M +
N)). Se observ c, n cazul n care valoarea fluxului este foarte mare, acest ordin de
complexitate este inacceptabil.
Din nefericire, chiar exist reele de transport n
care fluxul maxim crete cu o unitate la fiecare pas,
iar valoarea sa este foarte mare. n aceste cazuri,
algoritmul este practic inutilizabil. Exemplul clasic
care ilustreaz aceast situaie este prezentat n figura 9.4.
Figura 9.4: Caz n care nu poate fi
Evident, dac algoritmul gsete drumurile de utilizat algoritmul Ford-Fulkerson
cretere s-1-t i s-2-t, se vor executa doar doi pai.
Totui, algoritmul nu impune nici o restricie asupra drumurilor identificate, deci
poate fi ales la primul pas drumul s 1 2 t. La al doilea pas se poate alege drumul
s 2 1 t, la al treilea din nou s 1 2 t i aa mai departe. Execuia algoritmului
se va ncheia dup dou milioane de iteraii n loc de dou.

9.4. Algoritmul Edmonds-Karp


Pentru a evita situaiile care pot aprea n cazul reelelor de transport de tipul celor din
figura 9.4, trebuie gsit o modalitate eficient de determinare a drumurilor de cretere
n reeaua de transport.
Practic, algoritmul Edmonds-Karp reprezint doar o implementare eficient a algoritmului Ford-Fulkerson.
Ideea care st la baza algoritmului este de a identifica la fiecare pas un drum de
cretere care conine un numr minim de arce. Dup cum vom arta n continuare, o
astfel de alegere ne asigur c se vor efectua cel mult O(M N) iteraii.
Fiecare drum de cretere conine, aa cum rezult din definiie, cel puin un arc critic (arcul care d valoarea drumului). S presupunem c arcul (i, j) apare pentru prima

142

I. Teoria grafurilor

dat ca arc critic ntr-un drum de cretere n momentul n care acesta se afl la distana
d de surs (este al d-lea arc de pe drumul de cretere). Se poate arta faptul c, alegnd
de fiecare dat un drum de cretere cu numr minim de muchii, n momentul n care
arcul (i, j) va aprea pentru a doua oar ca arc critic, el se va afla la o distan de cel
puin d + 2 de surs. Din nou nu vom prezenta demonstraia matematic a acestui fapt,
ea fiind irelevant n acest context (ne intereseaz doar faptul c afirmaia anterioar
este adevrat). Ca urmare, fiecare arc (i, j) va putea fi arc critic de cel mult [N / 2] ori
pe parcursul executrii algoritmului, aadar vom avea cel mult O(N) drumuri de cretere caracterizate prin arcul critic (i, j). Deoarece avem 2 M arce (incluzndu-le pe
cele speciale), n total vor exista cel mult O(M N) drumuri de cretere, deci ordinul
de complexitate al algoritmului Edmonds-Karp va fi O((M + N) M N), deoarece
parcurgerea n lime necesar identificrii unui drum de cretere are ordinul de complexitate O(M + N).

9.5. Tietura minim


n cadrul acestei seciuni vom introduce noiunea de tietur minim a unei reele de
transport, vom prezenta teorema flux maxim tietur minim i vom arta modul n
care poate fi determinat o astfel de tietur.

9.5.1. Noiuni teoretice


S considerm o reea de transport G. Vom partiiona mulimea nodurilor n dou mulimi disjuncte astfel nct sursa i destinaia s nu fac parte din aceeai mulime. Fiecare nod al grafului (reelei) trebuie s fac parte din una dintre cele dou mulimi.
Mulimea arcelor care pornesc dintr-un nod care face parte din mulimea corespunztoare sursei i ajung ntr-un nod care face parte din mulimea corespunztoare destinaie formeaz o tietur a reelei de transport.
Revenind la similitudinea cu sistemul de conducte, o tietur reprezint o mulime
de conducte a cror astupare face ca apa s nu poat ajunge de la surs la destinaie.
Evident, tietura minim va fi cea pentru care suma capacitilor arcelor care o
formeaz este cea mai mic.

9.5.2. Flux maxim tietur minim


n cele ce urmeaz vom prezenta una dintre cele mai interesante teoreme ale teoriei
grafurilor i anume cea care prezint relaia dintre valoarea fluxului maxim i cea a tieturii minime.
Vom considera o reea de transport G al crei flux maxim este F. n aceast situaie
urmtoarele trei afirmaii sunt echivalente:
1. F este fluxul maxim al reelei de transport G.

9. Fluxuri

143

2. Reeaua de transport G nu conine nici un alt drum de cretere, cu excepia celor


identificate pentru determinarea fluxului F.
3. Exist o tietur a crei capacitate este F.
Pentru a demonstra echivalena, vom arta c prima afirmaie o implic pe a doua,
a doua pe a treia, iar a treia pe prima. Este evident c, n aceast situaie, a doua afirmaie o implic pe prima (prin "intermediul" celei de-a treia), a treia o implic pe a
doua (prin intermediul primeia) i prima o implic pe a treia (prin intermediul celei dea doua).
Prima implicaie este uor de demonstrat prin metoda reducerii la absurd. Dac ar
exista nc un drum de cretere, acesta ar avea o valoare pozitiv x, deci fluxul maxim
ar crete cu x, ceea ce contravine afirmaiei iniiale potrivit creia F este fluxul maxim
n reeaua respectiv.
Pentru a demonstra cea de-a doua implicaie, vom considera mulimea S ca fiind
format din toate vrfurile la care se mai poate ajunge pornind de la surs. Evident,
destinaia nu va face parte din aceast mulime deoarece, n caz contrar, ar mai exista
un drum de cretere, ceea ce contravine ipotezei. Ca urmare, am obinut o tietur valid a grafului. Remarcm faptul c pentru fiecare arc (i, j) al tieturii, fluxul pe acel
arc este egal cu capacitatea sa deoarece, n caz contrar, s-ar fi putut ajunge de la surs
la nodul j, deci i acesta ar fi fcut parte din S. Pentru ca apa s poat ajunge la destinaie, fluxul total al conductelor care ies din mulimea S trebuie s fie egal cu fluxul
maxim al reelei, deci capacitatea tieturii minime este egal cu fluxul maxim. (Am
recurs din nou la exemplul utilizat n cadrul acestui capitol pentru a evita folosirea
unor formule matematice relativ complicate i practic inutile.)
Pentru a demonstra cea de-a treia implicaie trebuie s observm un fapt evident, i
anume c fluxul maxim va fi ntotdeauna mai mic dect capacitatea unei tieturi (n
caz contrar acesta nu ar mai fi tietur sau, pentru exemplul nostru, nu ar mai putea
mpiedica toat apa s ajung la destinaie). Folosind aceast observaie rezult imediat c F este fluxul maxim, deoarece aceast valoare este egal cu capacitatea tieturii
minime.

9.5.3. Determinarea tieturii minime


Teorema prezentat anterior ilustreaz i modul n care poate fi determinat tietura
minim a unei reele de transport. Se aplic un algoritm de determinare a fluxului maxim i apoi, n momentul n care nu mai exist nici un drum de cretere, se identific
nodurile la care se poate ajunge pornind de la surs. Arcele care pleac de la un astfel
de nod, dar nu ajung tot la un astfel de nod, vor forma tietura minim.
Aa cum am demonstrat prin teorema precedent, capacitatea total a tieturii minime este egal cu valoarea fluxului maxim prin reeaua respectiv.

144

I. Teoria grafurilor

9.6. Reele de transport particulare


n aceast seciune vom prezenta cteva reele de transport particulare (unele dintre ele
nu respect definiia de la nceputul acestui capitol, dar cunoaterea lor este util n rezolvarea unor probleme).

9.6.1. Fluxuri de cost minim


n unele situaii, exist posibilitatea asocierii unor costuri pentru arcele grafului (pe
lng capacitate). n aceast situaie va trebui s determinm un flux maxim de cost
minim. Cu alte cuvinte, costul total al muchiilor care fac parte din flux (valoarea funciei f pentru aceste muchii nu este 0) trebuie s fie minim.
Pentru a determina un astfel de flux de cost minim este suficient s folosim o variant a algoritmului Ford-Fulkerson n cadrul creia s determinm la fiecare pas drumuri de cretere de cost minim.

9.6.2. Surse i/sau destinaii multiple


Exist situaii n care reelele de transport au mai multe surse i/sau destinaii. Pentru a
determina fluxul maxim ntr-o astfel de reea vom introduce o supersurs i/sau o
superdestinaie.
O supersurs este un nod din care pleac arce de capacitate infinit spre toate sursele. Similar, superdestinaia este un nod la care sosesc arce de capacitate infinit de la
toate destinaiile.
n acest moment avem o reea de transport clasic ce conine o singur surs i o
singur destinaie. Fluxul maxim nu va fi influenat de capacitile infinite (n practic
se vor utiliza, de fapt, valori foarte mari), deoarece el va fi limitat de capacitile arcelor din reeaua propriu-zis.

9.6.3. Capaciti n noduri


n unele situaii exist posibilitatea de a se impune restricii referitoare la capacitatea
unui nod (ntr-un nod poate intra o cantitate de ap cel mult egal cu capacitatea sa). n
acest caz, fiecare nod x va fi nlocuit prin dou noduri x1 i x2, ntre care va exista un
singur arc de capacitate egal cu capacitatea nodului x. Toate arcele care ajungeau la
nodul x vor ajunge acum la nodul x1, iar toate arcele care plecau de la nodul x vor pleca acum de la nodul x2. Astfel, am redus problema la determinarea fluxului maxim
ntr-o reea de transport cu capaciti doar pe arce, dar care conine un numr dublu de
noduri.

9.7. Rezumat
Acest capitol a fost dedicat prezentrii noiunii de flux maxim. Pentru nceput am definit reelele de transport, iar apoi fluxurile. n continuare am artat modul n care pot

9. Fluxuri

145

fi determinate fluxurile maxime n reelele de transport folosind algoritmul FordFulkerson. De asemenea, am artat faptul c acest algoritm devine ineficient n anumite situaii.
n continuare am artat modul n care pot fi evitate problemele aprute n cazul algoritmului Ford-Fulkerson i am descris algoritmul Edmonds-Karp. Am efectuat o
analiz a complexitii celor doi algoritmi care pot fi utilizai pentru determinarea fluxului maxim.
De asemenea, n acest capitol am introdus noiunea de tietur minim, am prezentat teorema flux maxim tietur minim i am descris modalitatea prin care poate
fi determinat o tietur minim folosind algoritmul Ford-Fulkerson.
n final am prezentat cteva reele de transport particulare, i anume cele n cadrul
crora arcelor le sunt asociate costuri i se dorete determinarea unui flux maxim de
cost minim, cele care conin mai multe surse i/sau mai multe destinaii, precum i cele n care sunt asociate capaciti i pentru noduri.

9.8. Implementri sugerate


Pentru a v familiariza cu modul n care trebuie implementate rezolvrile problemelor
ale cror soluii necesit cunotine referitoare la reelele de transport, v sugerm s
ncercai s realizai implementri pentru:
1. determinarea fluxului maxim ntr-o reea de transport, folosind algoritmul FordFulkerson;
2. determinarea fluxului maxim ntr-o reea de transport, folosind algoritmul
Edmonds-Karp;
3. determinarea unei tieturi minime ntr-o reea de transport;
4. determinarea fluxului maxim de cost minim folosind algoritmul Bellman-Ford pentru identificarea drumurilor de cretere;
5. determinarea fluxului maxim ntr-o reea de transport cu mai multe surse i mai
multe destinaii;
6. determinarea tieturii minime ntr-o reea de transport cu mai multe surse i mai
multe destinaii;
7. determinarea fluxului maxim ntr-o reea de transport n care au fost asociate capaciti i nodurilor;
8. determinarea simultan a fluxului maxim i a tieturii minime.

9.9. Probleme propuse


n continuare vom prezenta enunurile ctorva probleme pe care vi le propunem spre
rezolvare. Rezolvarea acestor probleme necesit, pe lng informaiile prezentate n
cadrul acestui capitol, cunotine referitoare la determinarea unor drumuri n grafuri.

146

I. Teoria grafurilor

9.9.1. Intranet
Descrierea problemei
O companie are la dispoziie o reea local format din N calculatoare ntre care exist
un numr total de M legturi cu rate de transfer diferite. Legturile sunt de tip simplex,
adic informaiile pot circula ntr-un singur sens. Se dorete transmiterea unui volum
mare de date de la calculatorul identificat prin 1, la calculatorul identificat prin N. Va
trebui s determinai care este dimensiunea maxim a datelor care poate fi transmis
iniial pentru ca n reea s nu apar congestii. Durata unui transfer este foarte mic,
motiv pentru care vom considera c intervalul de timp necesar comunicrii ntre oricare dou calculatoare este 0.
Date de intrare
Prima linie a fiierului de intrare INTRANET.IN conine numrul N al calculatoarelor
din reea i numrul M al legturilor directe dintre acestea. Aceste numere vor fi separate printr-un spaiu. Fiecare dintre urmtoarele M linii va conine cte trei numere ntregi x, y i c cu semnificaia: exist o legtur direct de la calculatorul identificat prin
x la calculatorul identificat prin y, iar rata de transfer a acestei legturi este de c Mbps.
Date de ieire
Fiierul de ieire INTRANET.OUT va conine o singur linie pe care se va afla volumul
maxim de date (exprimat n Mb) care poate fi transmis fr a aprea congestii.
Restricii i precizri
1 N 100;
1 M 1000;
rata de transfer a unei legturi este un numr ntreg cuprins ntre 1 i 1000000;
exist cel mult o legtur direct de la un calculator x la un calculator y;
dac exist o legtur direct de la un calculator x la un calculator y, atunci nu
poate exista i o legtur direct de la calculatorul y la calculatorul x;
datele vor putea ajunge ntotdeauna de la calculatorul identificat prin 1, la calculatorul identificat prin N.
Exemplu
INTRANET.IN
10 13
1 2 20
1 3 1
2 3 2
2 4 16
3 5 4

INTRANET.OUT
19

9. Fluxuri
4
4
5
6
6
7
8
9

147

6 12
7 4
8 10
5 7
9 8
10 5
10 10
10 6

Timp de execuie: 1 secund/test

9.9.2. Bomboane
Descrierea problemei
La o fabric de bomboane, sunt puse pe un stand n cutii de bomboane. Fiecare din cele
n cutii conine exact m bomboane dintr-un singur sortiment. Cele n cutii conin bomboane din sortimente diferite (aadar exist un numr total de n sortimente). Un angajat mai distrat ncepe s se amuze i amestec bomboanele din cutii. Spre a nu fi observat modificarea, el are grij ca n fiecare cutie s rmn cte m bomboane.
Problemele ncep s apar atunci cnd angajatului i se cere s aduc cte o
bomboan din fiecare cutie, deci din fiecare sortiment. Fiind urmrit de ctre superiori, el nu va avea voie s extrag dect o bomboan din fiecare cutie.
Angajatul acord fiecrei extrageri un grad de risc. Astfel, la extragerea unei
bomboane din sortimentul cu numrul i din cutia care coninea iniial sortimentul cu
numrul j, gradul de risc va fi valoarea absolut a diferenei dintre i i j. Gradul de risc
al tuturor celor n extrageri va fi egal cu suma riscurilor fiecreia.
S se determine ce sortiment de bomboan va trebui s extrag muncitorul din
fiecare cutie pentru ca gradul de risc total s fie minim.
Date de intrare
Prima linie a fiierului BOMBOANE.IN conine numerele n i m, separate printr-un
singur spaiu. Pe urmtoarele n linii se afl cte m numere, desprite printr-un spaiu.
Cele m numere reprezint sortimentele bomboanelor care se regsesc n fiecare cutie
dup amestecare, n ordine, ncepnd cu cutia avnd numrul de ordine 1 pn la cutia
avnd numrul de ordine n.
Date de ieire
Fiierul de ieire BOMBOANE.OUT va conine dou linii. Pe prima dintre ele se va afla
un numr natural reprezentnd gradul total minim de risc. Cea de-a doua linie va
conine n numere naturale, desprite prin cte un spaiu, reprezentnd numrul de

148

I. Teoria grafurilor

ordine al cutiei din care va fi extras bomboana din fiecare sortiment, n ordine, ncepnd cu sortimentul 1 pn la sortimentul n.
Restricii i precizri
1 n 100;
1 m 1000;
sortimentele i cutiile sunt identificate prin numere ntregi cuprinse ntre 1 i N;
n cazul n care exist mai multe posibiliti de extragere cu risc total minim, se va
determina doar una dintre ele.
Exemplu
BOMBOANE.IN
7 3
1 2 7
6 6 4
4 7 3
4 2 3
2 1 3
7 5 1
5 5 6

BOMBOANE.OUT
10
1 5 3 4 7 2 6

Timp de execuie: 5 secunde/test

9.9.3. Cezar
Pe o tabl sunt desenate N cercuri. Cezar trebuie s deseneze un numr total de M
sgei, astfel nct fiecare sgeat porneasc de la un cerc i s ajung la alt cerc.
Pentru fiecare cerc se cunoate numrul sgeilor care trebuie s plece din cercul
respectiv i numrul sgeilor care trebuie s ajung la cercul respectiv.
Va trebui s verificai dac Cezar poate desena sgeile i, dac acest lucru este
posibil, s descriei modul n care acestea vor fi desenate.
Date de intrare
Prima linie a fiierului de intrare CEZAR.IN conine numrul N al cercurilor i
numrul M al sgeilor. Cea de-a doua linie conine N numere ntregi, separate prin
cte un spaiu, care reprezint numrul sgeilor care trebuie s porneasc de la fiecare
cerc. Cea de-a treia linie conine N numere ntregi, separate prin cte un spaiu, care
reprezint numrul sgeilor care trebuie s ajung la fiecare cerc. Primul numr de pe
fiecare dintre aceste linii corespunde primului cerc (identificat prin 1), al doilea numr
corespunde celui de-al doilea cerc (identificat prin 2) etc. Suma numerelor de pe
fiecare dintre aceste dou linii este ntotdeauna M.

9. Fluxuri

149

Date de ieire
Prima linie a fiierului de ieire CEZAR.OUT va conine mesajul DA n cazul n care
exist cel puin o posibilitate de desenare a sgeilor i mesajul NU n caz contrar. n
cazul n care sgeile pot fi desenate, fiierul va mai conine M linii pe care se vor afla
cte dou numere ntregi x i y cu semnificaia: va fi desenat o sgeat care pornete
de la cercul identificat prin x i ajunge la cercul identificat prin y.
Restricii i precizri
1 N 100;
1 M 1000;
cercurile sunt identificate prin numere cuprinse ntre 1 i N;
poate fi desenat cel mult o sgeat care ponete de la un cerc x i ajunge la un
cerc y;
dac s-a desenat o sgeat care ponete de la un cerc x i ajunge la un cerc y,
atunci poate sau nu fi desenat i o sgeat care ponete de la cercul y i ajunge la
cercul x;
dac exist mai multe soluii atunci poate fi aleas oricare dintre ele.
Exemplu
CEZAR.IN
4 5
1 2 2 0
1 1 1 2

CEZAR.OUT
DA
1 2
2 3
3 1
2 4
3 4

Timp de execuie: 1 secund/test

9.10. Soluiile problemelor


Vom prezenta acum soluiile problemelor propuse n cadrul seciunii precedente. Pentru fiecare dintre acestea va fi descris metoda de rezolvare i va fi analizat complexitatea algoritmului prezentat.

9.10.1. Intranet
Reeaua de calculatoare poate fi privit ca fiind o reea de transport n care nodurile
reprezint calculatoarele, iar arcele reprezint legturile dintre acestea. Capacitatea
unui arc va fi dat de rata de transfer a legturii corespunztoare.

150

I. Teoria grafurilor

Sursa reelei de transport va fi dat de nodul corespunztor calculatorului identificat prin 1, iar destinaia sa va fi dat de nodul corespunztor calculatorului identificat
prin N.
n aceste condiii, problema se reduce la determinarea unui flux n aceast reea de
transport. Valoarea fluxului va reprezenta dimensiunea maxim a datelor care pot fi
transmise fr a aprea congestii. Aceast valoare va fi scris n fiierul de ieire.
Analiza complexitii
Citirea datelor de intrare implic citirea celor M muchii ale reelei de transport i a capacitilor acestora; aadar ordinul de complexitate al acestui subalgoritm este O(M).
n paralel cu citirea se realizeaz crearea structurii de date n care este memorat reeaua, ordinul de complexitate al acestei operaii fiind tot O(M).
Dup crearea reelei de transport vom aplica algoritmul de determinare a fluxului
maxim, al crui ordin de complexitate este O((M + N) M N).
Datele de ieire constau ntr-o singur valoare, deci operaia de scriere a acestora
are ordinul de complexitate O(1).
n concluzie, ordinul de complexitate al algoritmului de rezolvare a acestei probleme este O(M) + O(M) + O((M + N) M N) + O(1) = O((M + N) M N).

9.10.2. Bomboane
n vederea rezolvrii acestei probleme vom crea o reea de transport astfel: introducem
artificial o surs i o destinaie; pe lng aceste dou noduri, reeaua va mai conine alte 2 n noduri (dublul numrului de sortimente distincte). Vom uni pe rnd sursa de fiecare dintre primele n noduri (reprezentnd sortimentele distincte de bomboane, numerotate de la 1 la n), considernd c arcele introduse au capacitatea 1 i costul 0. Celelalte n noduri (care reprezint cele n cutii, i care sunt numerotate de la n + 1 la 2 n)
vor fi unite cu destinaia prin arce de capacitate 1 i cost 0.
Va exista un arc de la un nod i (1 i n) la un nod j (n + 1 j 2 n) dac i numai dac bomboana din sortimentul i se afl n cutia j n dup amestecare. Acest arc
va avea capacitatea 1 i costul egal cu valoarea absolut dintre j n i i (valoarea n este sczut datorit faptului c am numerotat cutiile ncepnd cu n + 1).
Dup construirea reelei este suficient s determinm un flux maxim de cost minim
pentru a obine soluia problemei.
Fluxul va avea ntotdeauna valoarea n, iar o bomboan va fi extras dintr-o anumit
cutie doar dac exist flux pe arcul care leag nodul corespunztor bomboanei (sortimentului) de nodul corespunztor cutiei.
Dup determinarea fluxului se afieaz costul acestuia, precum i alegerile efectuate.

9. Fluxuri

151

Analiza complexitii
Ordinul de complexitate al operaie de citire a datelor de intrare este O(m n) deoarece sunt citite m linii, fiecare coninnd n numere.
Pentru crearea reelei de transport va trebui, mai nti, s construim cele 2 n + 2
noduri ale acesteia, operaie al crei ordin de complexitate este O(n). Pentru a lega
primele n noduri de surs avem nevoie de un timp de ordinul O(n); acelai ordin are i
timpul necesar legrii celorlalte n noduri de destinaie. De fiecare dintre ultimele n noduri vor fi legate m dintre primele n; ordinul de complexitate al operaiei pentru un
nod este O(m), deci pentru toate nodurile obinem un timp de ordinul O(m n). Aadar,
ordinul de complexitate al operaiei de construire a reelei de transport este O(n) +
O(n) + O(n) + O(m n) = O(m n).
Ordinul de complexitate al algoritmului de determinare al fluxului maxim de cost
minim depinde de modul n care se determin drumurile de cost minim.
Pentru a scrie datele de ieire va trebui doar s verificm care dintre arce conin
fluxuri nenule. Deoarece avem m n astfel de arce, ordinul de complexitate al operaiei
de creare a fiierului de ieire va fi O(m n).
Putem trage concluzia c ordinul de complexitate al algoritmului de rezolvare a
acestei probleme depinde doar de modul n care se determin fluxul, deoarece aceast
operaie va avea un ordin de complexitate superior fa de cel al celorlalte operaii
(toate celelalte operaii au ordinul de complexitate cel mult O(m n)).

9.10.3. Cezar
n cazul n care considerm c cercurile sunt vrfurile unui graf orientat, problema se
reduce la alegerea unei configuraii a arcelor, astfel nct fiecare nod s aib un grad
exterior dat (numrul sgeilor care pleac din cercul corespunztor) i un grad interior
dat (numrul sgeilor care ajung la cercul corespunztor).
Pentru aceasta vom crea o reea de transport care va conine 2 N + 2 noduri. Dou
dintre acestea vor fi sursa i destinaia. N dintre noduri vor fi legate de surs prin arce
ale cror capaciti vor fi egale cu gradele interioare ale nodurilor. Celelalte N noduri
vor fi legate de destinaie prin arce ale cror capaciti vor fi egale cu gradele exterioare ale nodurilor. De la fiecare dintre primele N noduri vor pleca arce de capacitate 1
spre fiecare dintre celelalte N noduri.
n aceast reea vom determina fluxul maxim. Dac acesta va fi M, atunci sgeile
pot fi desenate (graful poate fi construit). Arcele reelei de transport pe care exist flux
vor indica modul n care vor fi desenate sgeile (configuraia arcelor).
Analiza complexitii
Datele de intrare constau din 2 N + 2 numere, deci ordinul de complexitate al operaiei de citire a acestora va fi O(N).
Pentru crearea reelei de transport va trebui, mai nti s construim cele 2 N + 2
noduri ale acesteia, operaie al crui ordin de complexitate este O(N). Pentru a lega

152

I. Teoria grafurilor

primele N noduri de surs avem nevoie de un timp de ordinul O(N); acelai ordin are
i timpul necesar legrii celorlalte N noduri de destinaie. Fiecare dintre primele N noduri va fi legat de fiecare dintre ultimele N (cu o singur excepie nu va exista un arc
de la nodul i la nodul N + i, deoarece o sgeat trebuie s porneasc de la un cerc i s
ajung la un alt cerc); ordinul de complexitate al operaiei pentru un nod este O(N),
deci pentru toate nodurile obinem un timp de ordinul O(N2). Aadar, ordinul de complexitate al operaiei de construire a reelei de transport este O(N) + O(N) + O(N) +
O(N2) = O(N2).
Vom observa c numrul muchiilor reelei de transport va fi N + N + N (N 1) =
N (N + 1). n aceast reea va trebui s determinm un flux maxim. Datorit faptului
c tim c acesta va fi cel mult M, putem folosi algoritmul Ford-Fulkerson al crui ordin de complexitate va fi O(M (N + N (N + 1))) = O(M N2), deoarece fluxul maxim va fi M, iar numrul de muchii va fi N (N + 1). Dac am alege algoritmul
Edmonds-Karp, am avea, teoretic, ordinul de complexitate O((N (N + 1) + N) N (N
+ 1) N ) = O(N5). Totui, datorit parcurgerii n lime, fiecare drum are, de fapt, lungimea 3 n foarte multe situaii (marea majoritate), deci ordinul real de complexitate n
cazul mediu va fi, de fapt, O(N3).
Dup determinarea fluxului va trebui doar s verificm arcele care conin flux
nenul i s scriem datele n fiierul de ieire. Ordinul de complexitate al acestei operaii este O(N2).
n concluzie, algoritmul de rezolvare a acestei probleme pentru cazul mediu are ordinul de complexitate O(N) + O(N2) + O(M N2) + O(N2) = O(M N2) dac fluxul este
determinat cu ajutorul algoritmului Ford-Fulkerson i O(N) + O(N2) + O(N3) + O(N2)
= O(N3) dac se utilizeaz algoritmul Edmonds-Karp.

S-ar putea să vă placă și