Sunteți pe pagina 1din 10

Observaie. Problema determinrii drumului de lungime minim poate fi generalizat. Menionm trei generalizri: (i).

Fiind dat digraful D = (V, A) marcat, n care fiecrui arc aA i asociem un numr l(a) > 0 pe care-l numim lungimea lui a s se determine un drum d, care porne!te din "#rful v !i a$unge n "#rful w, astfel nc#t lungimea total a drumului:
l ( d ) = l ( a )
a d

s fie minim. (ii). %ac fiecrui drum d = (v1, v2,,vm) i punem n coresponden o "aloare numeric f(d), se pune problema s se determine drumul d pentru care numrul f(d) s fie c#t mai mic posibil. (iii). Fiind dat un digraf D, fiecrui subdigraf parial D1 i corespunde un numr h(D1); s se determine un digraf parial astfel ca h(D1) s fie minim. Prezentm n continuare trei algoritmi reprezentati"i pentru rezol"area problemei determinrii drumului de lungime minim de tipul (i) !i anume: algoritmul lui %antzig, algoritmul lui Ford !i algoritmul &ellman-'alaba. 8.2. Algoritmul lui Dantzig Fie digraful D = (V, A), V = {v 1, v2,,vn}. (e propunem s calculm lungimile minime ale drumurilor de la "#rful v1 la toate celelalte "#rfuri v2, v3,,vn. )ntroducem funcia distan minim de la "#rful v1 la celelalte "#rfuri, notat cu , deci: ! V" , unde (v#) reprezint lungimea minim a drumurilor de la "#rful v1 la "#rful v# al digrafului (# = 1, 2, ,n). (otm prin V$ o submulime a lui V format din $ "#rfuri, V$V, iar funcia l ! A" (funcia distan), care asociaz fiecrui arc lungimea sa. *lgoritmul const n urmtoarele: Pasul 1. +e noteaz V1 = {v1} !i se define!te (v1) = 0. Pasul 2. %ac s-a determinat mulimea

V$ = -vi , vi ,. ., vi ,
/ . $

, pentru fiecare "#rf

vi V$ se determin "#rful notat wi V$ , care este cel mai apropiat de v i , adic lungimea arcului (v i , wi ) este minim n mulimea lungimilor arcelor care pornesc din vi ctre "#rfuri care nu aparin lui V$.
# # # # # #

%ac e0ist mai multe "#rfuri care sunt unite prin arce de lungime minim ce pornesc din v i , se "a alege unul oarecare dintre ele. +e determin acel "#rf wi cu proprietatea:
#

.12

(vi )+ l(vi ,wi ) = min (- vi )+ l(vi ,wi ),


% % %

/ & $
%

&

& &

!i se define!te

V$ +/ = V$ -wi , ,
%

definindu-se funcia n wi prin: ( wi ) = (vi ) + l (vi , wi ) . +e repet pasul 2 pentru $ = 1, 2, , n'1. 3orectitudinea algoritmului se demonstreaz prin inducie dup $. 4a sf#r!itul aplicrii algoritmului se obine "aloarea minim a funciei distan pentru toate "#rfurile v2, v3,,vn, adic distanele minime de la "#rful v1 la celelalte "#rfuri ale digrafului. %ac funcia nu poate fi definit ntr-un "#rf v#, nseamn c nu e0ist nici un drum de la v1 la v# !i punem prin definiie (v#) = . 5emarcm faptul c acest algoritm construie!te prin recurent, n mod sistematic, distanele minime de la v1 la celelalte "#rfuri ale digrafului. Observaie. *cest algoritm se poate aplica !i grafurilor.
% % % %

8.3. Algoritmul lui Ford Fie digraful D = (V, A), V = {v 1, v2,,vn}, marcat, deci este definit funcia l ! A", l(a) 0 reprezent#nd lungimea arcului aA. (e propunem s determinm drumul (drumurile) d = (v1,,vn) pentru care lungimea:
l ( d ) = l ( a )
a d

este minim. *lgoritmul lui Ford const n urmtoarele: Pasul 1. +e marc6eaz fiecare "#rf vi al digrafului D = (V, A) cu o "aloare i dup regula: 1 = 0 pentru "#rful iniial v1, iar "#rfurile vi (i = 2, 3, , n) se marc6eaz cu i = (i = 2, 3, , n). Pasul 2. Pentru fiecare arc (vi, v&)A se consider "alorile & ' i !i di& =l(vi, v&). %ac & ' i di&, atunci "aloarea lui & se pstreaz nesc6imbat, iar dac & ' i 7 di&, atunci & se nlocuie!te cu i " di&( &. +e continu operaia aceasta p#n c#nd nici un arc nu mai permite mic!orarea "alorii $ pentru nici un "#rf. 8n aceast situaie "aloarea n asociat "#rfului vn este "aloarea drumului minim. 8ntr-ade"r, fie v # ultimul "#rf folosit pentru reducerea "alorii lui n, cunoscut fiind faptul c pe parcursul algoritmului "aloarea lui n descre!te, deci: n # = l (v # , v n ) .
/

.9:

Fie v # astfel ca: # # = l (v # , v # ) !.a.m.d.. +uccesiunea n , # , # ,... este strict descresctoare, iar la un moment dat a"em v # = v/ . *tunci n este lungimea celui mai scurt drum de la v1 la vn, drumul fiind d = (v/ , v # , v # ,..., v # , v n ) !i lungimea drumului d este:
.

) +/

) /

l (d ) = n = l (v/ , v # ) + l (v # , v # ) + ... + l (v # , v n ) .
) ) ) / /

Corectitudinea algoritmului. ;aloarea n este "aloarea minim a lungimilor drumurilor de la v1 la vn. 8ntr-ade"r, fie d* un drum oarecare de la v1 la vn, de lungime l(d*), d < = (v/ , v ) , v ) ,..., v ) = v n ) . *tunci a"em:
/ . % +/

) / l (v/ , v ) ) ,
/ /

) ) l (v ) , v ) ) , ========. n ) l (v ) , v n ) ,
. / / . % %

) d < = (v/ ,..., v n ) . deci n l (d < ), ( Observaie. *lgoritmul lui Ford se poate folosi !i pentru determinarea drumului (drumurilor) de "aloare ma0im ntr-un digraf, dar numai n cazul n care digraful este fr circuite. 8n acest caz fiecrui "#rf i se asociaz "aloarea i > : (i = 1, 2, , n) !i se compar diferenele & ' i cu "alorile di& = l(vi, v&) pentru fiecare arc. %ac & 'i ( di& ? atunci & se nlocuie!te cu & = i + d i& > & , iar dac & 'i di&, atunci & se las nesc6imbat. @peraia se continu p#n c#nd nici un arc nu mai permite ma$orarea "alorii $ pentru nici un "#rf. ;aloarea ata!at "#rfului vn reprezint "aloarea drumului ma0im.

8. . Algoritmul !ellman"#alaba %at fiind digraful D = (V, A), V = {v1, v2,, vn}, marcat, pentru care este definit funcia l ! A" , l(vi, v&) reprezent#nd "aloarea (lungimea) arcului (vi, v&), ne propunem s determinm drumul (drumurile) de lungime minim dintre "#rfurile vi !i vn, (i = 1, 2, , n). *lgoritmul const n urmtoarele: Pasul 1. +e determin matricea $Mn(), numit matricea "alorilor, n care elementele sunt: l (vi , v & ) , da+, (vi , v & ) A, i & mi& = , da+, (vi , v & ) A, i & : , da+, i = & Pasul 2. +e calculeaz "ectorul m m , da+, i n mi( : ) = in . da+, i = n :,
(:) (:) (:) = ( m/( : ) , m . ,..., m n ) , unde:

(/) (/) (/) (/) Pasul 3. +e calculeaz "ectorul m = ( m/ , m. ,..., mn ) , unde:

.9/

-m (&:) + mi& ,, da+, i n min m = & i . : , da+, i = n


(/) i

================ () ) () ) () ) () ) Pasul %&2. +e calculeaz "ectorul m = (m/ , m. ,..., mn ) , unde:

() ) i

-m (&) /) + mi& ,, da+, i n min = &i . : , da+, i = n

() ) ( ) +/) , i = /, .,..., n . 8n Pasul %&3. *lgoritmul se nc6eie atunci c#nd mi = mi () ) acest caz "alorile mi reprezint lungimea minim a drumului (drumurilor) de la vi la vn.

%rumul (drumurile) de lungime minim de la vi la vn rezult din !irul de egaliti: mi( ) ) = m (&) ) + mi& ,
/ /

m = m + m& & , =======. () ) m (&) ) = mn + m& n , de unde rezult: mi( ) ) = mi& + m & & + ... + m & n ,
() ) &/ () ) &.
/ .
#

adic unul din drumurile cutate, de la vi la vn este: d = (vi , v & , v & ,..., v & , v n ) . 3orectitudinea algoritmului este asigurat de principiul optimalitii al lui &ellman pentru procese dinamice discrete. Observaie. 8n cazul cutrii drumului (drumurilor) de lungime ma0im, () ) algoritmul se modific n sensul c se ia - n loc de A, iar "alorile mi se determin sc6imb#nd min cu ma-.
/ . #

8.'. ()emplu +e d digraful urmtor care poate reprezenta sistemul de comunicare a datelor cu pri"ire la necesarul de materiale dintr-un sector producti". +e cere s se afle ruta optimal care stabile!te timpul minim de transmitere a informaiei dintre "#rfurile v1 !i v. utiliz#nd: a) algoritmul lui %antzig b) algoritmul lui Ford c) algoritmul &ellman-'alaba.

.9.

Figura B2. *ezolvare+ a) V1 = {v1}, (v1} = 0; v1V1 w1 = v2V1; V2 = {v1, v2}, (v2) = (v1) "l(v1, v2) = 1; v1V2 w1 = v3, (w1) = (v1) " l(v1, w1) = 2; v2V2 w2 = v3, (w2) = (v2) " l(v2, w2) = /; V3 = {v1, v2, v3}, (v3) = 2; v1V3 w1 = v., (w1) = (v1) " l(v1, w1) = 0; v2V3 w2 = v1, (w2) = (v2) " l(v2, w2) = 1; v3V3 w3 = v2, (w3) = (v3) " l(v3, w3) = /; V/ = {v1, v2, v3, v2}, (v2) = /; v1V/ w1 = v., (w1) = (v1) " l(v1, w1) = 0; v2V/ w2 = v1, (w2) = (v2) " l(v2, w2) = 1; v3V/ w3 = v/, (w3) = (v3) " l(v3, w3) = 1; v2V/ w2 = v/ sau v1 (w2) = (v2) " l(v2, w2) = 1; C0aminm cazul w2 = v/ deci: V3 = {v1, v2, v3, v/, v2}, (v/) = 1; v1V3 w1 = v., (w1) = (v1) " l(v1, w1) = 0; v2V3 w2 = v1, (w2) = (v2) " l(v2, w2) = 1; v3V3 w3 = v., (w3) = (v3) " l(v3, w3) = 0; v/V3 w/ = v3 sau v. (w/) = (v/) " l(v/, w/) = .; v2V3 w2 = v1, (w2) = (v2) " l(v2, w2) = 1; V2 = {v1, v2, v3, v/, v2, v1}, (v1) = 1; v1V2 w1 = v., (w1) = (v1) " l(v1, w1) = 0; v2V2 w2 nu e0ist v3V2 w3 = v., (w3) = (v3) " l(v3, w3) = 0; v/V2 w/ = v3 sau (w/) = (v/) " l(v/, w/) = .; v2V2 w2 nu e0ist v1V2 w1 = v., (w1) = (v1) " l(v1, w1) = 0;
.91

C0aminm cazul w/ = v3! V1 = {v1, v2, v3, v/, v3, v2, v1}, (v3) = .; v1V1 w1 = v., (w1) = (v1) " l(v1, w1) = 0; v2V1 w2 nu e0ist v3V1 w3 = v., (w3) = (v3) " l(v3, w3) = 0; v/V1 w/ = v., (w/) = (v/) " l(v/, w/) = .; v3V1 w3 nu e0ist v2V1 w2 nu e0ist v1V1 w1 = v., (w1) = (v1) " l(v1, w1) = 0; V. = {v1, v2, v3, v/, v3, v2, v1, v.}, (v.) = .; C0aminm cazul w/ = v. V1 = {v1, v2, v3, v/, v2, v1, v.}, (v.) = .; v1V1 w1 nu e0ist v2V1 w2 nu e0ist v3V1 w3 nu e0ist v/V1 w/ = v3, (w/) = (v/) " l(v/, w/) = .; v2V1 w2 nu e0ist v1V1 w1 nu e0ist v.V1 w. nu e0ist V. = {v1, v2, v3, v/, v3, v2, v1, v.}, (v3) = .. C0aminm cazul w2 = v1! V3 = {v1, v2, v3, v2, v1}, (v1) = 1; v1V3 w1 = v., (w1) = (v1) " l(v1, w1) = 0; v2V3 w2 nu e0ist v3V3 w3 = v/, (w3) = (v3) " l(v3, w3) = 1; v2V3 w2 = v/, (w2) = (v2) " l(v2, w2) = 1; v1V3 w2 = v., (w1) = (v1) " l(v1, w1) = 0; V2 = {v1, v2, v3, v/, v2, v1}, (v/) = 1; v1V2 w1 = v., (w1) = (v1) " l(v1, w1) = 0; v2V2 w2 nu e0ist v3V2 w3 = v., (w3) = (v3) " l(v3, w3) = 0; v/V2 w/ = v3 sau v. (w/) = (v/) " l(v/, w/) = .; v2V2 w2 nu e0ist v1V2 w1 = v., (w1) = (v1) " l(v1, w1) = 0; C0aminm cazul w/ = v3! V1 = {v1, v2, v3, v/, v3 v2, v1}, (v3) = 0; 5ezult: V. = {v1, v2, v3, v/, v3, v2, v1, v.}, (v.) = .. 8n sf#r!it se e0amineaz cazul w/ = v.! V1 = {v1, v2, v3, v/, v2, v1, v.}, (v.) = .; 5ezult: V. = {v1, v2, v3, v/, v3, v2, v1, v.}, (v3) = .. Prin urmare, (v1) =0, (v2) =1, (v3) =2, (v/) =1, (v3) =., (v2) =/, (v1) =1, (v.) =..
.99

4) 1 = 0; 2 = 3 = = . = ; 2 ' 1 = > l(v1, v2) = 1 2 = 1; 3 ' 1 = > l(v1, v3) = 2 3 = 2; . ' 1 = > l(v1, v.) = 0 . = 0; 3 ' 2 = 2 5 1 ( l(v2, v3) = 3; 1 ' 2 = ' 1 > l(v2, v1) = 2 1 = 1; / ' 3 = ' 2 > l(v3, v/) = 3 / = 1; 2 ' 3 = ' 2 > l(v3, v2) = 2 2 = /; . ' 3 = 0 5 2 = l(v3, v.) = 1; 3 ' / = ' 1 > l(v/, v3) = 1 3 = .; 1 ' / = 1 5 1 ( l(v/, v1) = 2; . ' / = 0 ' 1 > l(v/, v.) = 1 . = .; 2 ' 3 = / ' . ( l(v3, v2) = 3; / ' 2 = 1 ' / ( l(v2, v/) = 3; 1 ' 2 = 1 ' / ( l(v2, v1) = 3; . ' 1 = . ' 1 ( l(v1, v.) = 2. 4ungimea minim a drumurilor de la v1 la v. este . > D. %rumurile rezult din relaiile: 3 ' 1 = l(v1, v3) = 2; / ' 3 = l(v3, v/) = 3; . ' / = l(v/, v.) = 1; deci: d1 = (v1, v3, v/, v.); l(d1) = 2 " 3 " 1 = . !i

3 ' 1 = l(v1, v3) = 2; 2 ' 3 = l(v3, v2) = 2; / ' 2 = l(v2, v/) = 3; . ' / = l(v/, v.) = 1;
d2 = (v1, v3, v2, v/, v.); l(d2) = 2 " 2 " 3 "1 = ..

deci: c) %eterminm matricea "alorilor care este de tipul . . !i n continuare, pe linie, trecem componentele "ectorilor m ( ) ) , pentru ) = 0, 1, 2, 3. 5egsim acelea!i rezultate ca mai sus:

.9B

v1 v2 v3 v/ v3 v2 v1 v. --------------------------------------------------------------------------v1 : / . 2 v2 : 1 E v3 : B . F v/ : / . / v3 : 1 v2 1 : 1 v1 : . v. : ---------------------------------------------------------------------------m(0) 2 F / . : ---------------------------------------------------------------------------m(1) 2 D E / 9 . : ---------------------------------------------------------------------------m(2) 2 D E / F 9 . : ---------------------------------------------------------------------------m(3) 2 D E / F 9 . : --------------------------------------------------------------------------,. Flu)ul ma)im -n reele de transport ,.1. *eea de transport. Flu). ./ietur/ -n reea 5eelele de transport reprezint unul dintre cele mai importante modele ale teoriei digrafurilor, a"#nd multiple aplicaii n rezol"area problemelor te6nice, economice, etc. De0iniia '1. +e nume!te reea de transport un digraf finit !i fr bucle D=(V, A) n care fiecrui arc a i se asociaz un numr natural +(a) (numit capacitatea arcului a) !i n plus: (i). C0ist un "#rf v0V !i numai unul, numit intrarea -n reea, pentru care g' (v0) = 0 (ii). C0ist un "#rf, 6V !i numai unul, numit ie2irea din reea, pentru care g"(6) = 0. + Fie Av mulimea arcelor incidente spre interior "#rfului v !i Av mulimea arcelor incidente spre e0terior "#rfului v. De0iniia '1. @ funcie ! A", se nume!te 0lu) pentru reeaua de transport D = (V, A) dac: (a) = (a), ()v V , v v : , v 6 (i)
aAv aAv+

( a ) +( a), ( ) a A. (ii) %in (i) rezult c:


aAv+: aA6

(a) = (a) =

(umrul 6 se nume!te 0lu)ul -n v3r0ul 6 sau valoarea 0lu)ului .


.9E

De0iniia '2. Fie 7V, v07, 67 mulimea A7 a arcelor incidente spre interior "#rfurilor din 7 se nume!te t/ietur/ -n reea. +e nume!te capacitatea t/ieturii A7 "aloarea: + ( A7 ) = + (a ) .
aA7

Observaie. @rice unitate de cantitate de produs care pleac de la v0 la 6 nt#lne!te cel puin odat un arc al tieturii A7 deci, oricare ar fi flu0ul !i tietura A7 are loc inegalitatea 6 +( A7 ) . .eorema 33. 4Ford"Ful%erson5. 8ntr-o reea de transport dat, "aloarea ma0im a flu0ului este egal cu capacitatea minim a tieturilor n reea, adic:
ma0 6 = min +( A7 ).

A7

8ntr-ade"r, dac pentru un flu0 0 !i o tietur 8, a"em: 0 = +(8), atunci flu0ul 0 are "aloare ma0im !i tietura 8 are capacitate minim deoarece 6 +(8) = 0, ()6 !i +(8) = 0 +( A7 ), () A7 . ,.2. Algoritmul Ford"Ful%erson pentru determinarea unui 0lu) ma)im 3onsiderm o reea de transport !i un flu0 ! A" pentru reea. (e propunem s ma0imizm "aloarea flu0ului n reeaua dat. Pasul 1. Pornind de la flu0ul se determin un flu0 complet (un flu0 se nume!te complet, dac orice drum care pleac din v0 !i a$unge la 6, conine cel puin un arc saturat un arc a se nume!te saturat dac (a) = +(a)). %ac flu0ul nu este complet, se poate determina un drum d ale crui arce s fie nesaturate drumul d se determin n digraful parial al arcelor nesaturate d = (v0,,6). )ntroducem flu0ul * definit astfel: *(a) = (a) " 1, dac ad *(a) = (a), dac ad. 5emarcm faptul c 6< = 6 + / . *stfel se obine un flu0 complet pornind de la un flu0 incomplet. Pasul 2. Fie un flu0 complet printr-un procedeu iterati" "om marca succesi" toate "#rfurile digrafului n care putem face s par"in o unitate de flu0 suplimentar. Marcm v0 cu coeficientul 0. %ac vi este un "#rf marcat, "om marca cu coeficientul "i orice "#rf w nemarcat astfel ca (vi, w)A !i (vi, w) ( +(vi, w). %ac vi este un "#rf marcat, "om marca cu coeficientul -i orice "#rf w nemarcat nc astfel ca (w, vi)A si (w, vi) > 0.

.9F

%ac prin acest procedeu a$ungem s marcm "#rful 6, atunci e0ist un semidrum = 9v0,,6: ale crui "#rfuri sunt distincte !i marcate cu indicele "#rfului precedent (abstracie fc#nd de semn). )ntroducem flu0ul * definit astfel:

.9D

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