Documente Academic
Documente Profesional
Documente Cultură
Grafuri
Grafuri
x1
x2
x3
x4
x5
x6
C
x1
x2
x3
x4
x3
x6
x1
x2
x5
x5
x6
x6
112
x4
x1
1
0
1
0
0
0
x2
1
0
1
0
1
0
x3
0
1
0
0
0
0
x4
1
1
0
0
0
1
x5
1
0
0
1
0
0
x6
0
1
0
0
0
0
x1 x2 x3 x4 x5 x6
x1
x2
x3
x4
x5
x6
113
Dac privim graful ca imagine a unui sistem, nodurile reprezentnd componentele sistemului, atunci o interpretare imediat a unui arc (xi,xj) este c, componenta xi influeneaz direct
componenta xj. Dac nodurile au semnificaia de stri posibile ale unui sistem atunci un arc (xi,xj)
semnific faptul c sistemul poate trece direct din starea xi n starea xj. n ambele cazuri se vede c
avem de-a face doar cu informaii despre legturi directe; totui, chiar dac o component xi nu
influeneaz direct componenta xj ea o poate influena prin intermediul altor componente, existnd
un ir de componente intermediare: x1 x2 ,..., xk, fiecare influennd-o direct pe urmtoarea i xi
direct pe x1 iar xk direct pe xj. Astfel, dac dintr-o stare xi nu se poate trece direct ntr-o stare xj s-ar
putea totui n mai multe etape, prin alte stri intermediare. Deoarece gsirea acestor influene sau
treceri posibile este de obicei foarte important iar pentru un sistem cu mii sau zeci de mii de
componente acest lucru nu mai poate fi fcut "din ochi", este necesar formalizarea noiunii de
"influene" i "treceri" posibile, nu neaprat directe. Acest lucru a i fost fcut mai sus, deoarece
este evident c "xi influeneaz xj" sau "din starea xi se poate trece n starea xj" este echivalent cu
existena n graf a unui drum de la nodul xi la nodul xj.
n continuare vom da un algoritm prin care putem gsi toate drumurile dintr-un graf orientat
cu un numr finit de noduri.
Pasul 1. Se construiete matricea boolean a adiacenelor directe corespunztoare grafului, notat
cu A. n aceasta se afl, evident, toate drumurile de lungime 1.
Este interesant de vzut ce legtur exist ntre aceast matrice i drumurile de lungime 2.
Fie dou noduri xi i xj oarecare din graf. Existena unui drum de lungime 2 ntre ele presupune
existena unui nod xk, din graf, cu proprietatea c exist att arcul (xi,xk) ct i arcul (xi,xk). Pentru a
vedea dac acesta exist, lum pe rnd fiecare nod al grafului i verificm dac exist sau nu ambele
arce ((xi,xk) i (xi,xk)). Aceasta este echivalent cu a verifica dac, n matricea boolean a adiacenelor directe, exist vreun indice k astfel nct elementul k al liniei i i elementul k al coloanei j s fie
ambele egale cu 1. Dac folosim operaiile algebrei booleene de adunare i nmulire:
0
1
0
1
+&
&
0
0
1
0
0
0
1
1
1
1
0
1
atunci verificrile de mai sus sunt echivalente cu a verifica dac elementul de pe poziia (i,j) din A2
este egal cu 1. Valoarea 1 spune doar c exist cel puin un drum de lungime 2 de la xi la xj. Dac
dorim s vedem i cte sunt, vom folosi regulile de nmulire i adunare obinuit.
De asemenea, se poate observa c existena unui drum de lungime 3 de la xi la xj presupune
existena unui nod xk astfel nct s existe un drum de lungime 2 de la xi la xk i un arc de la xk la xj,
care este echivalent cu a verifica dac exist vreun indice k astfel nct elementul k al liniei i din
114
Dac ne intereseaz doar existena drumurilor dintre noduri, nu i numrul lor, vom folosi
nmulirea i adunarea boolean i conform observaiei de mai sus:
(
(
1 daca exista cel putin un drum de x i la x j
dij =
(
(
0 daca nu exista nici un drum de x i la x j
A+I mai mare sau egal cu n-1 (de exemplu calculnd (A+I)2, (A+I)4, (A+I)8, ..., (A + I) 2 , r fiind
prima putere a lui 2 pentru care 2r n-2).
Procedeul de mai sus nu asigur dect aflarea faptului dac exist sau nu drum ntre dou
noduri, eventual ce lungime are i cte sunt de aceast lungime. Totui, n problemele practice cel
mai important este s tim care sunt efectiv aceste drumuri. Deoarece toate drumurile pot fi
descompuse n drumuri elementare i n problemele practice n general acestea sunt cele care
intereseaz, paii urmtori ai algoritmului vor fi dedicai gsirii lor. Pentru gsirea acestora se
folosete reprezentarea grafului prin matricea latin de la cazul F.
Pasul 4. Construim matricea latin L asociat grafului, unde:
115
~
i matricea L , definit prin:
x x
lij = i j
0
(
(
daca exista arcul (x i , x j )
(
(
daca nu exista arcul (x i , x j )
(
(
~ x j daca exista arcul (x i , x j )
lij =
(
(
0 daca nu exista arcul (x i , x j )
numit matricea latin redus.
Gsirea unui drum de lungime 2 de la xi la xj presupune gsirea unui nod cu proprietatea c
exist arcele (xi,xk) i (xk,xj) i memorarea vectorului (xi, xk, xj). Aceasta este echivalent cu a gsi
un indice k astfel nct elementul de pe poziia k a liniei i, din matricea L, s fie xi,xk i elementul
~
~
de pe poziia k al coloanei j, din matricea L , s fie xj. Vom nmuli deci matricea L cu matricea L ,
folosind ns nite reguli de calcul speciale, numite nmulire i adunare latin.
Definiia 1: Se numete alfabet o mulime de semne numite simboluri sau litere {si/iI}
unde I este o mulime oarecare de indici, finit sau nu.
Definiia 2: Se numete cuvnt un ir finit de simboluri notat s i1 s i 2 ...s i n .
Definiia 3: Se numete nmulire latin o operaie definit pe mulimea cuvintelor unui
alfabet, notat " L ", astfel:
s i1 s i 2 ...s i n L s j1 s j2 ...s jm = s i1 s i 2 ...s i n s j1 s j2 ...s jm
~
~
L2 = L L L , L3 = L2 L L , ...
~
,Lk+1 = Lk L L
folosind operaiile de nmulire i adunare latin, alfabetul fiind mulimea nodurilor grafului, unde
operaia de nmulire este uor modificat, produsul dintre dou elemente ale matricilor fiind 0, dac
unul dintre ele este 0 sau au un nod comun i este produsul latin al lor, n caz contrar.
Din felul cum a fost construit, matricea Lk va conine toate drumurile elementare de
lungime k. Cum un drum elementar poate avea cel mult n noduri (cte are graful cu totul) rezult
c:
primele n-1 puteri ale lui L conin toate drumurile elementare din graf;
puterile lui L mai mari sau egale cu n au toate elementele egale cu 0;
matricea Ln-1 conine toate drumurile hamiltoniene din graf (dac exist).
Observaie: Deoarece obinerea matricii D prin metoda de mai sus presupune un volum
foarte mare de calcule (de exemplu, dac graful are 100 de noduri, ridicarea unei matrici de
100100 la puterea 100) pentru obinerea acesteia se poate aplica i urmtorul algoritm:
Pas 1. Se construiete matricea de adiacen A;
Pas 2. Pentru fiecare linie i se adun boolean la aceasta toate liniile j pentru care aij = 1.
116
117
Un arbore este un graf neorientat, finit, conex i fr cicluri. Grafurile din fig. 4.1. sunt
arbori.
x1
x1
x1
x1
x1
x1
a)
x1
x1
x1
x1
x1
c)
b)
Figura 4.1
Studiul arborilor este justificat de existena n practic a unui numr mare de probleme care
pot fi modelate prin arbori. Dintre acestea amintim:
1. construirea unor reele de aprovizionare cu ap potabil (sau cu energie electric sau
termic etc) a unor puncte de consum, de la un punct central;
2. construirea unor ci de acces ntre mai multe puncte izolate;
3. desfurarea unui joc strategic;
4. luarea deciziilor n mai multe etape (arbori decizionali);
5. evoluii posibile ale unui sistem pornind de la o stare iniial;
6. construirea unei reele telefonice radiale, a unei reele de relee electrice;
7. legarea ntr-o reea a unui numr mare de calculatoare;
8. organigramele ntreprinderilor;
9. studiul circuitelor electrice n electrotehnic (grafe de fluen etc);
10. schemele bloc ale programelor pentru calculatoare etc.
n toate problemele de mai sus se dorete ca, dintre muchiile unui graf neorientat, s se
extrag arborele optim din mulimea tuturor arborilor care pot fi extrai din graful dat.
Deoarece definiia arborelui este dificil de aplicat pentru deciderea faptului c un graf este
arbore sau nu (i n special sunt greu de verificat conexitatea i mai ales existena ciclurilor) exist
mai multe caracterizri posibile ale unui arbore, acestea fiind date de teorema de mai jos:
Teorem. Dac H este un graf neorientat finit, atunci urmtoarele afirmaii sunt echivalente:
1) H este arbore;
2) H nu conine cicluri i, dac se unesc printr-o muchie dou noduri neadiacente, se
formeaz un ciclu (i numai unul). Arborele este, deci, pentru o mulime de noduri dat,
graful cu numrul maxim de arce astfel nct s se pstreze proprietatea c nu are cicluri);
3) H este conex i dac i se suprim o muchie se creeaz dou componente conexe (arborele
este graful conex cu numrul minim de arce);
118
1) 2). ntre cele dou noduri adiacente noii muchii introduse exista deja un drum n fostul graf.
Acest drum, mpreun cu noul arc va forma evident un ciclu i afirmaia 2) a fost
demonstrat.
2)3). Pentru oricare dou vrfuri neunite printr-o muchie, adugnd muchia dintre cele dou
vrfuri s-ar crea, conform ipotezei, un ciclu care conine aceast muchie, deci dou
drumuri ntre cele dou noduri, din care unul nu conine noua muchie, adic n graful
iniial exista un drum ntre cele dou noduri. Dac nu exist cicluri nseamn c ntre
oricare dou noduri exist un singur drum. Pentru dou noduri unite printr-o muchie,
aceasta este chiar drumul corespunztor celor dou noduri. Dac suprimm aceast muchie
ntre cele dou noduri nu va mai exista nici un drum, formndu-se dou componente
conexe.
3)4). Demonstraia se face prin inducie dup n = numrul de noduri ale grafului. Pentru n=2 este
evident. Presupunem afirmaia adevrat pentru toate grafurile cu cel mult n noduri. Dac
graful are n+1 noduri, prin suprimarea unei muchii se formeaz dou componente conexe
fiecare avnd cel mult n noduri (n1 n, n2 n i n1 + n2 = n+1) i deci au n1 1 respectiv
n2 1 muchii. n concluzie graful iniial a avut (n1 1) + (n2 1) +1 = n1 + n2 1= (n+1)-1
muchii, ceea ce era de demonstrat.
4)5). Dac ar avea un ciclu atunci prin suprimarea unui arc al acestuia ar rmne de asemenea
conex. Eliminm acest arc apoi repetm procedeul pentru graful parial rmas i tot aa
pn cnd nu mai rmne nici un ciclu. n acest moment graful rmas este conex i nu are
cicluri deci este arbore i deci are n-1 arce, n contradicie cu faptul c el avea n-1 arce
nainte de a ncepe suprimarea arcelor;
5)6). Dac ntre dou noduri ar exista dou drumuri atunci acestea ar forma la un loc un ciclu.
Deci ntre 2 noduri este cel mult un drum. Dac ntre dou noduri nu ar exista nici un drum
ar fi cel puin dou componente conexe n graf, fiecare fiind arbore (pentru c nu exist
cicluri) i deci fiecare ar avea un numr de arce cu 1 mai mic dect numrul de noduri.
Fcnd adunarea, ar rezulta c n graf sunt strict mai puin de n-1 arce.
6)1). Dac H ar avea un ciclu, ntre dou noduri ale acestuia ar exista dou lanuri, n
contradicie cu ipoteza.
Presupunem c avem un graf pentru care am verificat deja dac este conex. Dac nu este
atunci acesta, evident, nu are nici un graf parial care s fie arbore.
Presupunem de asemenea c fiecrei muchii i este asociat o valoare real.
5.2. Algoritmi pentru gsirea arborelui de valoare optim
Vom da mai jos trei algoritmi pentru determinarea unui graf parial al grafului, care s fie
arbore i pentru care suma valorilor arcelor sale s fie minim (sau maxim).
Toi algoritmii descrii n continuare extrag arborele prin colectarea una cte una a muchiilor
acestuia.
A. Algoritmul lui Kruskal
Pasul 1. Dintre toate muchiile grafului se alege muchia de valoare minim (maxim). Dac
minimul este multiplu se alege la ntmplare una din muchiile respective. Deoarece acest
"la ntmplare" trebuie cumva tradus n limbajul calculatorului, n cazul implementrii unui
119
Acest algoritm asigur de asemenea gsirea arborelui optim, necesit mult mai puine
calcule (la fiecare alegere se calculeaz minimul doar pentru muchiile adiacente unui singur nod),
evit automat formarea ciclurilor, dar, pentru grafuri foarte mari, la un moment dat pot exista att de
multe componente conexe care trebuie memorate succesiv, nct calculul devine greoi sau, pe
calculator, depete posibilitile de memorare ale calculatorului.
C. O variant a algoritmului lui Kruskal
Pasul 1. Dintre toate muchiile grafului se alege cea de valoare minim (maxim);
Pasul 2. Dintre toate muchiile adiacente componentei conexe format din arcele alese pn n acest
moment, se alege cea de valoare minim (maxim);
Pasul 3. Se reia pasul 2 pn se colecioneaz n-1 muchii.
Algoritmul are toate avantajele algoritmului lui Sollin i, n plus, lucreaz cu o singur
component conex, fiind mult mai uor de implementat pe calculator i mult mai rapid n execuie.
Exemplu: Administraia unei localiti montane a hotrt construirea unor linii de teleferic
care s lege oraul de cele 8 puncte turistice importante din jurul acestuia. n urma unui studiu au
120
P1
P3
2
3
P6
6
P7
8
9
P5
8
P4
4
8
7
P8
Figura 4.2
Rezolvare
La primul pas poate fi ales unul din arcele OP3 sau OP7, ele avnd valoarea minim 2. Putem
alege oricum primul arc dintre cele dou pentru c la al doilea pas va fi ales cellalt.
La pasul trei poate fi ales unul din arcele OP5, OP6 sau P1P6 care au valoarea minim 3. Nici
n acest caz nu are vre-o importan ordinea alegerii, deoarece pot fi alese succesiv toate trei fr a
se forma nici un ciclu.
Al aselea arc poate fi ales dintre arcele P4P5 i P1P2, care au valoarea minim 4. Nici n
acest caz nu are vre-o importan ordinea alegerii, deoarece pot fi alese succesiv ambele, fr a se
forma nici un ciclu.
Urmtoarea valoare disponibil a unui arc este 5, dar arcul opt nu poate fi ales dintre arcele
OP1, P6P7, dei au valoarea minim 5. Arcul OP1 nu poate fi ales deoarece s-ar forma ciclul OP1P6,
iar P6P7 ar duce la ciclul OP6P7. Urmtoarea valoare minim este 6, pentru arcul P5P7 dar nu poate fi
ales deoarece se formeaz ciclul OP5P7.
Valoarea urmtoare, 7, o au arcele OP4, P2P3 i P5P8. OP4 nu poate fi ales deoarece s-ar
forma ciclul OP5P4. Arcul P2P3 nu poate fi ales deoarece s-ar forma ciclul OP6P1P2P3. Arcul P5P8 nu
formeaz nici un ciclu i el va fi al optulea arc ales. n acest caz, deoarece s-au adunat 8 arce ntr-un
graf cu 9 noduri, am obinut graful cutat.
Acest arbore este reprezentat n figura 4.3.
121
P1
P4
2
3
3
P6
P5
7
P8
P7
Figura 4.3
B. Sollin
Vom alege:
pentru nodul O
pentru nodul P1
pentru nodul P2
pentru nodul P3
pentru nodul P4
pentru nodul P5
pentru nodul P6
pentru nodul P7
pentru nodul P8
arcul OP3
arcul P1P6
arcul P1P2
arcul OP3
arcul P4P5
arcul OP5
arcul P1P6
arcul OP7
arcul P5P8
P1
P4
2
3
O
P6
P5
7
P8
P7
Figura 4.4
OP3
OP7
OP6
OP5
P1P6
P1P2
P4P5
P5P8
123
xn
y1
y2
ym
124
n ceea ce privete a doua problem, observm mai nti c putem presupune c ntotdeauna
AB, n caz contrar inversnd sensul tuturor arcelor grafului, problema rmnnd aceeai.
n acest caz:
min( A C + (C ) ) = A min( A C + (C ) ) A = 0 min( C + (C ) ) = 0
C A
C A
C A
max ( C (C ) ) = 0 (C ) C oricare ar fi C A
C A
sau altfel spus, pentru orice submulime C a lui A, mulimea nodurilor atinse de arce care pleac din
nodurile sale, adic (C), are cel puin attea elemente ct C.
De exemplu, la repartizarea angajailor pe posturi, fiecare angajat poate obine un post dorit
dac i numai dac oricare ar fi mulimea de r angajai exist cel puin r posturi diferite din care pot
alege.
Presupunem, n continuare, c s-a asociat fiecrui arc (xi,xj) o valoare vij.
Definiia 4: Se numete valoare a unui cuplaj suma valorilor arcelor care l formeaz.
M1
4
5
5
4
4
6
M2
3
4
6
5
6
6
M3
6
8
8
7
6
8
125
M4
2
3
2
2
3
3
M5
6
8
8
7
6
8
M6
8
9
7
8
7
9
4
5
3
4
6
5
6
6
6
8
8
7
6
8
2
3
2
2
3
3
6
8
8
7
6
8
8
9
7
8
7
9
Pasul 2. Se scade din fiecare linie minimul acesteia apoi, n matricea obinut, din fiecare coloan
minimul acesteia (se poate face i invers, rezultatul final va fi acelai). Pentru exemplul
dat vom obine succesiv matricile:
2 1 4 0 4 6
1 0 1 0 1 2
2 1 5 0 5 6
1 0 2 0 2 2
3 4 6 0 6 5
M1 = 2 3 5 0 5 6 i apoi M2 = 12 23 23 00 23 12
1 3 3 0 3 4
0 2 0 0 0 0
3 3 5 0 5 6
2 2 2 0 2 2
Ultima matrice este cea asupra creia se aplic urmtoarele calcule. n acest moment pe
fiecare linie i pe fiecare coloan se afl cel puin un 0, care corespunde celui mai mic timp. Se
ncearc n continuare folosirea doar a acestor repartizri:
Pasul 3. n ordinea cresctoare a numrului de zerouri i de sus n jos (n cazul existenei mai
multor linii cu acelai numr de zerouri ) se ncadreaz pentru fiecare linie zeroul a crui
coloan conine cele mai puine zerouri (primul de la stnga dintre acestea, n caz de
egaliate) i se bareaz celelalte zerouri de pe linia i coloana acestuia. Pe parcursul
algoritmului sunt luate n considerare la numrare doar zerourile nencadrate i nebarate
nc. n final, pe fiecare linie i pe fiecare coloan va fi cel mult un zero ncadrat. Dac n
final sunt n (= dimensiunea matricei) zerouri, atunci arcele corespunztoare formeaz
cuplajul cutat. Dac sunt mai puine se trece la pasul 4.
n exemplul nostru avem trei linii cu cte un zero (a 3-a, a 4-a i a 5-a) .l ncadrm pe cel de
pe linia 3 (prima dintre ele) i barm restul zerourilor de pe linia 3 i coloana 3, obinnd:
1
1
2
1
0
2
0
0
3
2
2
2
1
2
3
2
0
2
0
0
0
0
0
0
1
2
3
2
0
2
2
2
1
2
0
2
126
0
0
3
2
2
2
1
2
3
2
0
2
0
0
0
0
0
0
1
2
3
2
0
2
2
2
1
2
0
2
Ultima linie cu zerouri este linia 5 din care l ncadrm pe primul i le barm pe celelalte:
1
1
2
1
0
2
0
0
3
2
2
2
1
2
3
2
0
2
0
0
0
0
0
0
1
2
3
2
0
2
2
2
1
2
0
2
n total nu sunt 6 zerouri ncadrate (sunt doar trei) i deci trecem la pasul 4.
Pasul 4. La acest pas se va stabili numrul minim posibil de linii i coloane care s conin toate
zerourile matricii. n acest sens vom proceda astfel:
0
0
3
2
2
2
1
2
3
2
0
2
0
0
0
0
0
0
1
2
3
2
0
2
2
2
1
2
0
2
0
0
3
2
3
2
0
1
2
1
0
1
0
0
0
0
1
0
0
1
2
1
0
1
1
1
0
1
0
1
Deoarece avem 6 zerouri ncadrate, am obinut cuplajul maxim de valoare minim cutat, cruia i
va corespunde repartizarea muncitorilor pe operaii de mai jos:
M1
O1
M2 4
O2
4
M3
M4
7
6
M5
O3
O4
O5
M6
O6
O1
M2
0
0
1
0
0
1
0
0
3
2
3
2
0
1
2
1
0
1
0
0
0
0
1
0
0
1
2
1
0
1
1
1
0
1
0
1
M3
adic
M6
6
7
M4
M5
128
6
3
O2
O3
O4
O5
O6
129
1. Se consider n matricea M liniile pline (cu toate elementele 1). Nodurile ce corespund liniilor
pline cu 1 formeaz submulimea C1.
2. Se elimin liniile i coloanele care corespund nodurilor din submulimea stabilit.
3. Se reia raionamentul de la punctul 1 pe matricea redus obinut la punctul 2 obinndu-se
urmtoarea submulime i n continuare toate celelalte pn se epuizeaz toate liniile matricei.
130
1. Nodurile care formeaz o submulime sunt reprezentate prin puncte n interiorul unui
dreptunghi i ntre acestea se traseaz arcele existente n graful iniial G.
2. Se traseaz legturile dintre submulimi. Ele sunt reprezentate prin arcele existente n
graful iniial G ntre nodurile submulimii C1 i cele ale submulimii C2, ntre nodurile
submulimii C2 i cele ale submulimii C3 etc.
Pasul 5. Se gsesc drumurile hamiltoniene
Un drum hamiltonian se gsete plecnd de la un vrf din submulimea C1, trecnd prin toate
vrfurile acesteia cu un drum hamiltonian, din ultimul vrf la care se ajunge n C1 trecnd la un vrf
din C2, parcurgnd n continuare un drum hamiltonian n a doua submulime i tot aa, trecnd prin
toate submulimile i parcurgnd, deci, toate nodurile grafului iniial, o singur dat. Aplicnd acest
procedeu n toate modurile posibile se obin toate drumurile hamiltoniene din graful iniial G.
(Observaie: poate s nu existe nici un drum hamiltonian n graful G, caz n care algoritmul se
oprete deoarece la un anumit pas nu mai exista nici o linie plina cu 1).
Observaie. Algoritmul lui Foulkes reduce gsirea drumurilor hamiltoniene n graful iniial
G (care n problemele practice este foarte mare) la gsirea mai multor drumuri hamiltoniene mai
mici n componente tare conexe ale grafului. Dac un graf are o singur component tare conex,
algoritmul lui Foulkes nu este eficient, n acest caz trebuind aplicai ali algoritmi cum ar fi cel bazat
pe nmulirea latin.
p(x i ) =
i =1
n (n 1)
2
Demonstraie
Fie H un drum hamiltonian i presupunem c nodurile grafului au fost notate n
ordinea n care apar n acest drum. Atunci din orice nod xi se poate ajunge n toate nodurile cu
indice mai mare i numai n acestea (altfel ar exista circuite) i deci puterea unui nod xi este n i, de
unde:
n
p(x i ) = (n 1) + (n 2) + + 1 + 0 =
i =1
n (n 1)
2
Ordonnd vrfurile n ordinea descresctoare a puterii lor de atingere (i > j p(xi) <
p(xj)) i cum graful nu are circuite, vom obine o matrice D cu toate zerourile deasupra diagonalei
(evident pe o poziie (i,i) nu se afl nici un 1 iar dac ar fi un 1 pe poziia (i,j) cu i > j ar nsemna c
131
p(x i ) =
i =1
n (n 1)
atunci graful nu are drumuri hamiltoniene
2
~
~
~
L2 = L L L , L3 = L2 L L , ..., Lk+1 = Lk L L , ...
132
Cazul1. Cuplajului maxim gsit i corespunde un singur circuit. Dac acest circuit
este primul obinut atunci valoarea sa i se atribuie unei variabile Z i
circuitul este pstrat. Dac nu este primul atunci valoarea sa se compar cu
Z i, dac este mai mic, ea devine noua valoare a lui Z i circuitul se
pstreaz, eliminndu-l pe cel corespunztor fostei valori a lui Z. n caz
contrar se trece la alt graf parial neanalizat nc.
Cazul2. Cuplajul maxim are o valoare mai mare dect Z. Pentru acest graf parial se
abandoneaz ramificarea.
133
n care fiecare nod este un graf parial de analizat, iar pentru fiecare arc, nodul inferior este un graf
parial care provine din graful corespunztor nodului superior, prin suprimarea unui arc de pe
circuitele de lungime minim corespunztoare cuplajului maxim de valoare minim al acestuia.
Observaie: Algoritmul asigur gsirea circuitului de valoare minim iar n cazul n care
algoritmul lui Foulkes nu funcioneaz este o alternativ mai bun dect algoritmul lui Kaufmann.
Totui el nu lucreaz n timp polinomial i n unele cazuri (de exemplu cazuri n care se formeaz
foarte multe cicluri cu lungime minim) necesit un numr imens de calcule.
n aceste cazuri se pot folosi metode euristice prin care se elimin din start o serie de arce,
considerate a avea valori prea mari pentru a se putea afla pe circuitul hamiltonian de valoare
minim, apoi se aplic n graful parial rmas unul din algoritmii de mai sus.
134
Una din problemele care poate aprea n aceste situaii este gsirea, pentru o anumit
pereche de noduri (sau mai multe perechi), a drumului optim ntre acestea.
Pentru formalizarea problemei vom introduce noiunea de valoare a unui drum, care este
egal cu suma valorilor arcelor care l compun. Vom nota n continuare valoarea unui arc (xi,xj) cu
v(xi,xj) sau cu vij. n aceste condiii putem enuna problema drumului optim astfel:
"Dat un graf G = (X,U) i o funcie care asociaz fiecrui arc o valoare real, s se
gseasc, pentru o pereche dat de noduri, drumul (drumurile) de valoare optim (minim sau/i
maxim) ntre cele dou noduri i valoarea acestuia (acestora)"
Deoarece este vorba de gsirea minimului unei mulimi de numere reale, prima ntrebare
care se pune este dac aceasta admite minim. Dac mulimea nodurilor grafului este infinit atunci
pot exista o infinitate de drumuri elementare distincte ntre cele dou noduri i mulimea valorilor
acestora poate avea orice form (nchis sau nu, mrginit sau nu) devenind foarte greu de
caracterizat cazurile cnd minimul dorit exist. Deoarece totui majoritatea covritoare a
problemelor economice se modeleaz prin grafuri cu numr finit de noduri, ne vom limita n
continuare doar la acestea.
Un numr finit de noduri n atrage dup sine existena unui numr finit de arce (cel mult n2)
n -1
corespunde un drum elementar de (obinut prin eliminarea tuturor subcircuitelor lui d) putem calcula
valoarea oricrui drum ca sum ntre valoarea drumului elementar corespunztor i valorile unor
subcircuite ale sale, fiecare nmulit cu numrul de parcurgeri ale circuitului respectiv.
n concluzie, dac exist un circuit de valoare negativ nseamn c exist drumuri de
valoare orict de mic (cele care conin acest circuit), obinut prin parcurgerea acestuia de oricte
ori dorim) i, deci, mulimea valorilor drumurilor este nemrginit inferior, neexistnd drum de
valoare minim. Dac exist un circuit de valoare pozitiv atunci exist drumuri de valoare orict de
mare i mulimea valorilor drumurilor este nemrginit superior, neexistnd drum de valoare
maxim.
Dac nu exist circuite de valoare negativ atunci valoarea oricrui drum este mai mare sau
egal cu a drumului elementar corespunztor, deci drumul de valoare minim (dac exist) va fi un
drum elementar. Cum mulimea drumurilor elementare este finit (i deci i mulimea valorilor lor)
va avea minorant i am lmurit problema compatibilitii problemei. Analog, dac nu exist circuite
de valoare pozitiv atunci valoarea oricrui drum este mai mic sau egal cu a drumului elementar
135
136
mij = 0
daca i = j
sau Lij = max (Li-1,j , max (mjk + Li-1,k)) ntr-o problem de maxim
k =1, n
Pasul 3. Dup calcularea fiecrei linii noi se compar elementele ei cu cele ale precedentei:
Dac Lij = Li-1,j pentru orice j = 1,...,n atunci se oprete recurena i ultima linie
calculat conine valorile minime ale drumurilor de la celelalte noduri la nodul xn.
Dac exist cel puin un indice j cu Lij Li-1,j se trece la calcularea noii linii Li+1
Pasul 4. Pentru gsirea drumului care d valoarea minim de la un nod xj la nodul xn se gsesc,
ncepnd napoi de la ultima linie, pe care s-au obinut valorile finale, notat Lf, nodurile
x k1 , x k 2 , ..., x k r care formeaz drumul cutat, unde x k1 = xj, x k r = xn i fiecare alt indice
ki+1 este cel pentru care s-a obinut minimul(maximul) de pe poziia ki al liniei Li.
Observaie: Pentru grafuri foarte mari, algoritmul necesit un volum mare de memorie, prin
necesitatea memorrii matricei M, care este greu de manipulat. Chiar dac din cele n2 arce posibile
graful ar avea doar un procent foarte mic matricea grafului va avea tot n2 poziii de memorat i
analizat.
Exemplu: Presupunem dat graful orientat de mai jos, n care se dorete gsirea drumului de valoare
minim de la nodul x1 la nodul x9.
x2
4
8
x1
x3
2
x5
3
x6
6
x7
Matricea M va fi
4
0
8
8
7
0
9
3
0
7
3
0
2
5
0
6
0
137
9
3
8
7
0
3
9
x8
8
x4
4
3
7
x9
x4 x5 x6 x7
5
9
3
0
7 0 3 2
0 5
0
4
3 8
3 10 13 8
3 8 13 8
3 8 13 8
3 8 13 8
x8
6
0
7
7
7
7
7
x9
9
3
8
7
0
0
0
0
0
0
Deoarece L4 = L5 oprim calcularea liniilor dup calcularea liniei 5. n aceast linie se afl
valorile celor mai scurte de la toate nodurile la nodul x9. Drumul dorit de noi (x1 x9) are valoarea
dat de prima poziie a liniei 5, fiind egal cu 13.
Pentru a gsi acest drum, plecm napoi de la linia 4 i avem:
x1
x5
13 = 8 + 5
x3
8 = 6 + 2
x4
6 = 3 + 3
3 x9
Algoritmul lui Ford simplificat se aplic doar n grafuri care nu admit circuite. Cu ajutorul
lui se gsete drumul de valoare optim ntre dou noduri fixate xi i xj. Printr-o eventual
renumerotare a nodurilor putem presupune c nodul de la care pornete drumul este x1, care va fi
numit nod iniial, iar nodul la care se termin este xn, numit nod final.
Algoritmul este:
Pasul 1. I se d vrfului iniial valoarea 0 (zero): w(x0) = 0
Pasul 2. Se construiete mulimea A format din nodul iniial: A = {x1}
Pasul 3. Se analizeaz nodurile din afara mulimii A.
Dac exist noduri n care se poate ajunge prin arce directe doar de la nodurile
mulimii A, acestea se adaug la mulimea A, cu valoarea:
w(xi) = min (w (x j ) + v (x j , x i )) , n problemele de minim
xj
x j ,x i
138
pas1: w(x1) = 0
pas2: A = {x1}
pas3: Nodurile n care se poate ajunge doar din x1: {x5}
w{x5) = min( w(x1) + v(x1,x5)) = 0 + 5 = 5
pas4: x9 A
pas3: A = {x1,x5} i nodurile n care se poate ajunge prin arce directe doar din x1 i x5 sunt: {x6}
w{x6) = min( w(x1) + v(x1,x6), w(x5) + v(x5,x6)) = min(0 + 3 , 5 + 3) = 3
pas4: x9 A
pas3: A = {x1,x5,x6} i nodurile n care se poate ajunge prin arce directe doar din x1, x5 i x6 sunt:
{x2,x7}
w{x2) = min( w(x1) + v(x1,x2), w(x5) + v(x5,x2), w(x6) + v(x6,x2)) = min(0 + 4,5 + 8,3 + 8) = 4
w{x7) = min( w(x5) + v(x5,x7), w(x6) + v(x6,x7)) = min(5 + 2,3 + 5) = 7
pas4: x9 A
pas3: A = {x1,x2,x5,x6,x7} i nodurile n care se poate ajunge prin arce directe doar din x1, x2, x5, x6
i x7 sunt: {x3,x8}
w{x3) = min( w(x2) + v(x2,x3), w(x5) + v(x5,x3)) = min(4 + 7,5 + 2) = 7
w{x8) = min( w(x5) + v(x5,x8), w(x7) + v(x7,x8)) = min(5 + 9,7 + 6) = 13
pas4: x9 A
pas3: A = {x1,x2,x3,x5,x6,x7,x8} i nodurile n care se poate ajunge prin arce directe doar din x1,
x2,x3,x5, x6, x7 i x8 sunt: {x4}
w{x4) = min( w(x2) + v(x2,x4), w(x3) + v(x3,x4),w(x5) + v(x5,x4), w(x8) + v(x8,x4)) = min(4 +
9,7 + 3,5 + 7,13 + 4) = 10
pas4: x9 A
pas3: A = {x1,x2,x3,x4,x5,x6,x7,x8} i nodurile n care se poate ajunge prin arce directe doar din x1,
x2, x3, x4, x5, x6, x7 i x8 sunt: {x9}
w{x9) = min( w(x3) + v(x3,x9), w(x4) + v(x4,x9), w(x7) + v(x7,x9), w(x8) + v(x8,x9)) = min(7 +
9, 10 + 3, 7 + 8, 13 + 7) = 13
pas4: x9 A i urmeaz s gsim drumul care are lungimea 13.
Avem succesiv:
w(x9) = w(x4) + v(x4,x9)
w(x4) = w(x3) + v(x3,x4)
w(x3) = w(x5) + v(x5,x3)
139
Observaia 1. Dac graful are un circuit atunci se poate demonstra uor c nu vom putea da
valoare nici unui nod al acestuia i dac exist vreun drum de la x1 la xn care trece prin unul din
nodurile circuitului nu vom putea da valoare nici lui xn, cu toate c exist drum de la x1 la xn.
Observaia 2: Algoritmul necesit pentru memorare i manipulare doar cunoaterea, pentru
fiecare nod, a nodurilor spre care "pleac" arce din acesta i valorile acestor arce, fiind mult mai
uor de aplicat sau implementat pe calculator. El are ns dezavantajul c se poate aplica doar n
grafuri fr circuite.
C. Algoritmul Ford generalizat
Algoritmul lui Ford generalizat a fost creat cu scopul de a putea gsi drumul optim i n
grafurile care au circuite. Cu ajutorul lui se gsete drumul de valoare optim ntre dou noduri
fixate xi i xj. Printr-o eventual renumerotare a nodurilor putem presupune c nodul de la care
pornete drumul este x1, care va fi numit nod iniial, iar nodul la care se termin este xn, numit nod
final.
Algoritmul este:
Pasul 1. I se d vrfului iniial valoarea 0 (zero): w(x0) = 0 i tuturor celelalte valoarea + (ntr-o
problem de minim) sau - (ntr-o problem de maxim).
Pasul 2. n ordinea cresctoare a indicilor nodurilor se calculeaz pentru fiecare nod, pe baz
fostelor valori, noile valori cu formula:
*
w (xi) = min w (x i ), min (w (x j ) + v (x j , x i )) n problemele de minim
xj
x
j ,x i )
*
sau w (xi) = max w (x i ), max (w (x j ) + v (x j , x i )) n problemele de maxim
xj
(x j , x i )
*
Pasul 3. Se compar noile valori w (xi) cu fostele valori w(xi):
Dac w*(xi) = w(xi) pentru orice nod xi atunci:
dac w(xn) < (la problema de minim) sau w(xn) > - (la problema de maxim),
valoarea nodului xn reprezint valoarea drumului de valoare minim(maxim) de
la x1 la xn. Pentru gsirea acestui drum se pornete napoi de la nodul final xn i
se gsesc nodurile x k1 , x k 2 , ..., x k r care formeaz drumul cutat, unde x k1 = xn,
Observaie: Algoritmul poate gsi drumul i n grafuri cu circuite dar este evident mult mai
lent dect cel simplificat. Pentru scurtarea duratei de execuie se poate modifica algoritmul n sensul
c o valoare nou calculat a unui vrf va fi folosit imediat ca atare la calculul noilor valori ale
celorlalte, nu doar dup ce se calculeaz noile valori ale tuturor vrfurilor.
140
n algoritmul Ford simplificat, pentru a gsi valoarea nodului final, deci a drumului minim,
plecm de la nodul iniial n toate direciile posibile, pstrnd de fiecare dat toate nodurile
analizate. Acest fapt duce la un consum inutil de timp, deoarece foarte multe din aceste noduri nu
vor face parte din drumul optim. Pentru a elimina acest neajuns, algoritmul lui Dijkstra ncearc s
pstreze, la fiecare iteraie, mulimea minim de noduri care s le conin pe toate cele care vor
forma efectiv drumul optim. n plus, algoritmul se poate aplica i n drumuri cu circuite. Ca un
minus este faptul c se aplic doar la probleme de minim. Algoritmul are urmtorii pai:
Pasul 1. I se d vrfului iniial valoarea 0 (zero): w(x0) = 0
Pasul 2. Se construiete mulimea A format din nodul iniial: A = {x1}
Pasul 3. Se analizeaz nodurile din afara mulimii A.
Dac exist noduri n care se poate ajunge prin arce directe de la noduri din A
(nu doar de la nodurile mulimii A, ca la algoritmul lui Ford simplificat) se
calculeaz pentru toate acestea:
w(xi) = min (w (x j ) + v (x j , x i )) n problemele de minim
x jA
x j ,x i
dar, spre deosebire de algoritmul lui Ford simplificat, se adaug la mulimea A doar
cel pentru care se obine valoarea minim, apoi se trece la pasul 4.
Dac nu exist nici un nod de acest tip atunci nu exist nici un drum de la x1 la xn.
STOP
Pasul 4. Se analizeaz mulimea A:
Dac xn A atunci valoarea sa reprezint valoarea drumului de valoare optim de la
x1 la xn. Pentru gsirea acestui drum se pornete napoi de la nodul final xn i se
gsesc nodurile x k1 , x k 2 , ..., x k r care formeaz drumul cutat, unde x k1 = xn, x k r =
pas1: w(x1) = 0
pas2: A = {x1}
pas3: Nodurile n care se poate ajunge i din x1: {x2, x5, x6}
w{x2) = min( w(x1) + v(x1,x2)) = 0 + 4 = 4
w{x5) = min( w(x1) + v(x1,x5)) = 0 + 5 = 5
w{x6) = min( w(x1) + v(x1,x6)) = 0 + 3 = 3
min(w{x2),w{x5),w{x6)) = w{x6) = 3
pas4: x9 A
pas3: A = {x1,x6} i nodurile n care se poate ajunge prin arce directe din x1 sau x6 sunt:
{x2,x5,x7}
w{x2) = min( w(x1) + v(x1,x2), w(x6) + v(x6,x2)) = min(0 + 4 , 3 + 8) = 4
w{x5) = min( w(x1) + v(x1,x5)) = min(0 + 5) = 5
w{x7) = min( w(x6) + v(x6,x7)) = min(3 + 5) = 8
min(w{x2),w{x5),w{x7)) = w{x2) = 4
pas4: x9 A
141
142
9. Reele de transport
ntr-o mare varietate de situaii concrete din practica economic se pune problema deplasrii
unei cantiti de materie, energie, informaie etc, din anumite locuri, numite surse, n alte locuri,
numite destinaii. Pentru realizarea acestui transport se folosesc o serie de trasee, numite rute de
legtur. Unitile indivizibile ale cantitii Q, care se deplaseaz de-a lungul rutelor ntre surse i
destinaii, se numesc uniti de flux, iar ansamblul rutelor, surselor, destinaiilor i, eventual, a
altor puncte intermediare se numete reea de transport.
Situaia de mai sus poate fi reprezentat geometric printr-un graf finit, conex i fr bucle.
Pentru ca o astfel de problem s fie suficient de complex pentru a necesita un studiu
matematic riguros, trebuie ca fiecare surs s poat aproviziona mai multe destinaii i orice
destinaie s poat fi aprovizionat de mai multe surse.
Aprovizionarea destinaiilor se poate face direct de la surse sau prin intermediul altor
puncte, numite puncte intermediare. n cazul cel mai general pot exista de asemenea legturi ntre
surse i/sau legturi ntre destinaii.
Aa cum s-a vzut i la problema de transport, situaia de mai sus este un cadru extrem de
larg, care permite existena unui numr foarte mare de tipuri de probleme posibile, diferite ntre ele
prin informaiile suplimentare pe care le avem despre reea i prin obiectivele urmrite.
Una dintre acestea este problema determinrii cantitii maxime (minime) care poate fi
transportat de la surse la destinaii, n situaia n care sursele dispun de cantiti limitate (inferior
sau superior), destinaiile au un necesar sau o putere de absorbie limitat inferior sau superior iar pe
fiecare rut se poate transporta doar o cantitate cuprins ntre anumite limite.
Pentru studiul matematic al acestei situaii vom da definiiile matematice ale obiectelor
implicate n problem i ipotezele modelului.
Definiia 1: Se numete reea de transport standard un graf finit, simplu, conex, fr bucle
G = (X,U) care are urmtoarele proprieti:
+
1. Exist i este unic s X a.. U s , U s = (din care doar "ies" arce), numit
intrarea reelei de transport;
Observaie: Este clar c exemplele obinuite au doar rareori o singur surs i o singur destinaie.
Totui, printr-o tehnic foarte simpl, orice reea de transport se poate aduce la forma standard:
1. Dac sunt mai multe surse se introduce un nod suplimentar din care "pleac" cte
un arc spre fiecare surs (i numai spre acestea), iar capacitile acestor arce vor fi
egale cu disponibilurile surselor corespunztoare;
2. Dac sunt mai multe destinaii se introduce un nod suplimentar spre care "pleac"
cte un arc din fiecare destinaie (i numai din acestea), iar capacitile acestor arce
vor fi egale cu necesarurile destinaiilor corespunztoare;
Definiia 2: Se numete flux ntr-o reea de transport R = (X,U) o funcie : U R+ care
are urmtoarele proprietile:
P1. 0 u cu oricare ar fi u din U; valoarea u se numete flux al arcului u
P2.
u U i+
u U i
un nod i este egal cu suma fluxurilor arcelor care "ies" din acest nod, cu excepia
nodului iniial i al celui final.
143
u U s+
u U t
Valoarea fluxului de valoare maxim reprezint cea mai mare cantitate care se poate
transporta efectiv pe reea, de la surse la destinaii.
Economic vorbind, ne intereseaz, referitor la o reea, rspunsurile la urmtoarele ntrebri:
1.
2.
3.
4.
Rspunsul la primele dou ntrebri se poate afla prin gsirea fluxului de valoare maxim i
compararea valorii lui cu suma necesarurilor destinaiilor. n plus, valoarea acestuia pe un arc
reprezint cantitatea care trebuie transportat pe ruta respectiv, pentru a obine aceast valoare a
fluxului.
Rspunsul la ultimele dou ntrebri pornete de la observaia c cea mai mare cantitate care
poate traversa reeaua de la un cap la altul este egal cu dimensiunea celui mai ngust loc de trecere
prin reea. Dac vrem, deci, s mrim fluxul va trebui s lrgim tocmai acest cel mai ngust loc de
traversare al reelei.
Pentru formalizarea consideraiilor de mai sus vom introduce noiunea de tietur ntr-o
reea:
Definiia 5: Dat o reea de transport G(X,U) cu s = nodul iniial i t = nodul final, se
numete tietur n reea o partiie a mulimii vrfurilor reelei de transport, format din dou
submulimi V i W (VW = , VW = X) astfel nct s V i t W.
O tietur poate fi privit, intuitiv, ca o seciune a reelei, care las nodul iniial cu o
submulime din noduri ntr-o parte, nodul final cu restul nodurilor n cealalt parte i reteaz toate
arcele care trec dintr-o parte n cealalt.
A cunoate o tietur este echivalent cu a cunoate care sunt elementele celor dou mulimi,
V i W, care formeaz partiia.
Vom nota o tietur prin T = (V,W), convenind ca mulimea scris pe prima poziie s
conin nodul iniial s al reelei iar cea scris pe a doua, nodul final t.
Definiia 6: Se numete capacitate a unei tieturi T = (V,W) ntr-o reea de transport
G(X,U), notat C(T), suma capacitilor tuturor arcelor care au extremitatea iniial n V i cea
final n W.
144
( )
C(T) =
u = x i ,x j
x i V
x jW
Pentru a nu exista nici o ambiguitate, insistm asupra faptului c se vor lua n considerare
doar arcele care trec de la mulimea ce conine nodul iniial spre mulimea care conine nodul final,
adic n sensul normal de transport (surse destinaie).
Definiia 7: Se numete tietur de valoare minim ntr-o reea o tietur T n aceast
reea, cu proprietatea c, pentru orice alt tietur T' n aceast reea, avem C(T) C(T').
Urmtoarele teoreme fac legtura matematic dintre fluxurile unei reele i tieturile sale:
Teorema 1. Dat o tietur T = (V,W) i un flux ntr-o reea de transport avem:
( )
( )
u = x i ,x j
x i V
x jW
u = x i ,x j
x i W
x jV
sau, altfel spus, valoarea unui flux oarecare este egal cu suma fluxurilor arcelor care trec de la V la
W din care se scade suma fluxurilor arcelor care trec invers, de la W la V, oricare ar fi tietura T =
(V,W).
Demonstraie: Avem succesiv:
u =
u +
u
u =
=
u = (s, x j )
u = (s, x j )
x i V uU +
uU x i
xi
x i s
x jX
x jX
( )
u ) +
u = x i ,x j
x i V
x jV
( )
( )
u = x i ,x j
x i V
x jW
u = x i ,x j
x i W
x jV
( )
u = x i ,x j
x i V
x jW
( )
u = x i ,x j
x i W
x jV
Corolar: ntr-o reea de transport valoarea oricrui flux este mai mic sau egal dect valoarea oricrei tieturi.
Demonstraie: Fie T o tietur oarecare i un flux oarecare. Avem succesiv:
( )
u = x i ,x j
x i V
x jW
( )
u = x i ,x j
x i W
x jV
( )
u = x i ,x j
x i V
x jW
( )
= C(T)
u = x i ,x j
x i V
x jW
Corolar: ntr-o reea de transport valoarea fluxului maxim este mai mic sau egal dect
valoarea tieturii minime.
Demonstraia e evident. n plus, din cele de mai sus se vede c egalitatea are loc numai
dac, pentru tietura minim, exist un flux pentru care toate arcele de la V la W sunt folosite la
maxim (fluxul e egal cu capacitatea arcelor) iar pe toate arcele de la W la V nu se transport nimic.
Teorema lui Ford-Fulkerson Dac fluxul este maximal atunci exist o tietur de
capacitate egal cu valoarea fluxului.
145
Dac vrful final t ar fi marcat, atunci ncepnd de la acesta, am putea construi lanul
x k1 , x k 2 , ..., x k r unde x k1 = s, x k r = t i marcajul oricrui vrf x k i +1 este + x k i sau x k i .
Adugnd la fluxul fiecrui arc al lanului de tipul ( x k i , x k i +1 ) valoarea:
= min(
min
(c(x k , x k ) (x k , x k )) , (x min,x
(x k i ,x k i +1 )
i +1
i +1
k i +1
ki
(x k i , x k i +1 ) )
i scznd din fluxul fiecrui arc de tipul ( x k i +1 , x k i ) aceeai valoare , obinem un flux de valoare
( )
C(T) =
( )
u = x i ,x j
x i V
x jW
u = x i ,x j
x i V
x jW
( )
u = x i ,x j
x i W
x jV
i teorema e demonstrat.
Teorema lui Ford-Fulkerson poate stabili doar valoarea fluxului maxim dar nu d o metod
de gsire a acestuia. Pentru a rezolva problema gsirii fluxului de valoare maxim se poate folosi
algoritmul lui Ford-Fulkerson.
Pentru expunerea acestuia vom introduce i noiunile de:
arc saturat = un arc pe care fluxul este egal cu capacitatea;
drum complet = un drum de la nodul iniial s la nodul final t care conine cel puin un arc saturat;
flux complet = un flux pentru care orice drum de la nodul iniial s la nodul final t este complet.
Algoritmul lui Ford-Fulkerson
ETAPA I Se determin un flux complet.
Pasul 1. Se numeroteaz nodurile reelei de transport astfel nct x1 = s i xn = t;
Pasul 2. Se asociaz grafului fluxul nul (u = 0 pentru orice arc u din graf);
Pasul 3. n ordine lexicografic, se ia pe rnd fiecare drum D de la nodul iniial la cel final, se
calculeaz valoarea D = min(c u u ) i se adaug la fluxul de pe fiecare arc al
uD
146
Deoarece alegerea drumurilor n ordine lexicografic nu ine cont de structura reelei, aa cum se
poate vedea pe un exemplu, acest procedeu nu asigur ntotdeauna gsirea fluxului maxim. Acest
impediment poate fi depit fie prin gsirea unei ordini de parcurgere a tuturor drumurilor, care s
dea pentru fiecare reea fluxul maxim, n urma procedeului de mai sus, fie prin redistribuirea
judicioas a fluxului gsit la etapa I. A doua variant este cea care se aplic la etapa II.
ETAPA II Se determin fluxul maxim
Pasul 4. Se marcheaz nodul iniial s cu 0(zero);
Pasul 5. Pentru fiecare vrf marcat xi se marcheaz cu:
[+xi] toate vrfurile nemarcate xj pentru care exist arcul (xi,xj) i (xi,xj) < c(xi,xj)
(adica nodurile spre care mai e loc pentru a se transporta ceva din xi);
[xi] toate vrfurile nemarcate xj pentru care exist arcul (xj,xi) i (xj,xi) > 0 (adic
toate nodurile spre care pleac deja ceva din xi);
Pasul 6. Se repet pasul 5 pn este marcat nodul final sau pn cnd nu mai poate fi marcat nici
un vrf;
Pasul 7. Dac nodul final a fost marcat atunci fluxul este maxim i algoritmul se oprete, n caz
contrar trecndu-se la pasul 8;
Pasul 8. Construim un lanul L = x k1 , x k 2 , ..., x k r unde x k1 = s, x k r = t i marcajul oricrui vrf
L = min(
min
(c(x k , x k ) (x k , x k )) , (x min,x
(x k i ,x k i +1 )
i +1
i +1
k i +1
ki
(x k i , x k i +1 ) )
n final, tietura de valoare minim este cea n care V = mulimea nodurilor marcate iar W =
mulimea nodurilor nemarcate.
Observaia 2. Teorema de mai sus asigur doar o limitare superioar a numrului de iteraii
ale algoritmului, fa de capacitatea tieturii minime. Aceast valoare poate fi ns, n anumite
147
Observaia 3. Exist probleme n care se dorete gsirea fluxului minim ntr-o reea, valorile
fluxului pe arce fiind limitate inferior de capacitile acestora. n acest caz se aplic de asemenea
algoritmul lui Ford-Fulkerson astfel:
Pasul 1. Se calculeaz M = maximul capacitilor arcelor
Pasul 2. Se construiete reeaua R', care este fosta reea, n care au fost modificate doar
capacitile arcelor, acestea devenind c u = M cu
Pasul 3. Se gsete cu algoritmul Ford-Fulkerson fluxul , de valoare maxim, n aceast
reea
Pasul 4. Fluxul de valoare minim n reeaua iniial va avea valorile ' = M
Observaia 4. Exist i alte tipuri de probleme asemntoare celor de mai sus. Astfel, se
poate pune problema:
gsirii capacitilor minime ale arcelor cu care se poate asigura transportarea ntregii
cantiti de la surse la destinaii
fluxului minim(maxim) ntr-o reea n care capacitile rutelor sunt limitate att superior
ct i inferior;
n cazul n care rutelor li se asociaz i costuri unitare de parcurgere, putem cuta fluxul
maxim de cost minim;
148