Documente Academic
Documente Profesional
Documente Cultură
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. 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.
f(1, 3) = 0
f(2, t) = 5
f(3, 5) = 8
f(4, 3) = 8
f(5, 2) = 3
f(5, t) = 5
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. Fluxuri
139
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
140
I. Teoria grafurilor
9. Fluxuri
141
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. Fluxuri
143
144
I. Teoria grafurilor
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.
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
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
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
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.