You are on page 1of 73
Capitolul 2 Algoritmi pentru grafuri 2.1 Matricea drumurilor 2.1.1 Algoritmul lui Roy-Warshall Fie A = (a;;)%,. matricea de adiacenti a grafului @ = (X,U). Pentru a determina matricea drumurilor D acestei matrici ii aplicim un sir den transformiri J, k = Tyn, calculand A = T,(A) Etapa k. Pentru i / k si j / k clemontele a, se inlocuiese cu max(aij, min(ai,, a6;)) Daca i = k sau j = k clementele a, réman neschimbate, La sfargitul algoritmului matricea obtinuta 7,,(A) este tocmai matricea dru- murilor Observatia 2.1.1 Remarcdm cd elementele aj; = 1 (pentrui #k si j #k) ramén invariante la 0 transformare Ti, iar elementele a; = 0 (pentru i fk sij # k) devin min(aj.,ax;). Alifel spus, in etapa k se énlocuiese toate elementele 0 care nu se gdsesc pe linia sau coloana k prin 1 dacd ambele lor proiectit pe linia si coloana k sunt egale cw 1 Exemplul 2.1.2 Utiliziind algoritmul tui Roy-Warshall, sd se determine ma- tricea drumurilor pentru graful din figura urmatoare, 33 NTRU GRAFURI ORITMI PE CAPITOLUL 2. ALG 34 Solufie ecouce exucece —__—— = —. neocons ecoco4 —_—_— = | eoouce ecoccn —_— 4 = —~ Haocda YY 4 = I — ecoco4 —_— —~ Haoous ~~ 2.1. MATRICEA DRUMURILOR 35 oo1d010 piaiaad 000000 4=RAM-) praia oo01000 yiiiii 2.1.2 Metoda compunerii booleene Pe multimea {0,1} se definese operatiile boolene de adunare si inmultire, notate 4 si ® prin: ab =max{a,b}, a@b=min{a,b}, (a,b © {0,1} Mai precis avem: oe0 0; O@1 5 1051; lel=1; Oa0= ; 0@1=0; 1R0=0; le@1l=1. Aceste operatii se pot extinde la matrici cu coeficienti din mulfimea {0,1} obtinand *adunarea booleana” a matricilor care actioncaza la fel ea gi in cal- culul matricial clasic "termen cu termen’” si ”inmulfirea boolean’” a matri- cilor care actioneaza la fel ea si in calculul matricial clasie "linie per coloani” Acoste operatii vor fi notate tot cu @ si ®, sperénd ci mu este posibili nicio confuzie. Vom defini A® = A@BAB---@A= (al) Teorema 2.1.3 Fie A = (aj)%j-1 matricea de adiacenfé a grafului G@=(X,U). Atinct 1. Matricea A® este matricea drumurilor (elementare sau nu) de lungime k, adied, dacé a‘ = 1 atunci intre x, gia; exist un drum de lungime oe k, tar dacd af)? = 0 atunci intre a; gia nw evisté drum de lungime kj 2. Matricea drumurilor (elementare sax nu) este D=AGA%Q... 0AM”. 36 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Exemplul 2.1.4 Utilizind metoda compunerii boolene sd se determine ma- tricea drumurilor pentru graful din figura 2.1 Solufie. A= ero°o 00 ao000 AM = AM GAR ooo 0 0 00 1 0 0 1 o000 0 AM = A® x A 000 AD = AY BA 2.1. MATRICEA DRUMURILOR 37 in final D=AGA® @ AD AMG AOR 00 1. e hore Observatia 2.1.5 Pentru a face economic de timp este suficient si ob- servi ca: 1 D=A®@(ASI)"), unde I este matricea unitate; 2 Aw(AoN** = Ag(AaN, (Wk>0 Prin urmare vom calcula (Aal®, (Aan®,..., (Aon unde r se alege én asa fel inedt 2” > n—2. In final D= A@(A@ 1)? Exemplul 2.1.6 Sa se determine matricea drumurilor pentru graful din figura 2.1 Solufie. Cum n = 6 alegem r astfel ineat 2” > n — 2. Prin urmare r oo1010 101010 100100 110100 000000 oo1000 A~looo001]'4%-looo0101 001000 oo1010 010000 010001 101010 101010 riidiil riiliid 001000 sp} 001000 ororor | 4eD") yaad 001010 001010 110101 piliiidl 38 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI D=Aw(AgIDM = 2.1.3. Algoritmul lui Chen Fie A= (aj;)8,_1 matricea de adiacenti a grafului G Pentru k = T,n efectutian: Honore (x.0) Etapa k. Vom aduna boolean la linia & toate liniile j pentru care a,j = 1 Se repeti aceasta etap’ pind ciind nu se mai obtin noi elemente egale cu 1 pe linia &. Exemplul 2.1.7 Aplicdnd algoritmul lui Chen sii se determine matricea drumurilor pentru graful din figure 2.1 Solutie Etapa 1. La linia 1 aduniim boolean liniile 3 si 6. 0 0 0 0 0 1 0 a 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 Pe linia 1 nu sau obfinut noi clemente egale cu 1 si prin mare trecem la pa 2. 2.1. MATRICEA DRUMURILOR 39 Etapa 2. La linia 2 adunim boolean liniile 1 si 4 A= Adunam la linia 2 liniile 1, 3, 4, 5, 6. Obtinem Etapa 3. Cum pe linia 3 mu avem clemente neschimbata. Etapa 4, Adunim boolean linia 6 la linia 4 oo10 viii 0000 4=lo 100 0010 0100 0010 tii 0000 4-loaad 0010 0100 1 0 0 0 0 eoccre 1 1 0 1 0 0 egale cu 1 matricea ramane Etapa 5. Adunim boolean la linia 5 linia a 3-a, Observim ci matricea A rimane neschimbata. 40 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Etapa 6. La linia a G-a adunim boolean linia a 2-a, Objinem oo1010 liid’iid 000000 A liidiil oo1000 liliiil adic& tocmai matricea drumurilor edutata. 2.1.4 Algoritmul lui Kaufmann Algoritmi prezentati in sectiunile precedente ne permit doar si aflam dact existit sau nu drum intre dowd varfuri ale grafului, fiird ins a gti care sunt aceste drumuri, Cum toate drumurile pot fi descompuse in drumuri ele- mentare, algoritmml pe care il vom prezenta este dedicat gasirii drumurilor clomentare. Definitia 2.1.8 Se numeste alfabet o mulfime de simboluri sau litere {s,}ier, unde I este 0 mulfime de indici finita sau nu. Definitia 2.1.9 Se numeste cuvdnt un sir finit de simboluri, notat $182... se Definitia 2.1.10 Se numeste énmulfire latind 0 operatie definitd pe mulfimea cwvintelor unui alfabet, notati @z, si definita prin S182... 5k By, tity. ..ty = $182... Sette. tay adica produsul a doud cuvinte se obfine prin concatenarea lor. Se numeste adunare latina o operatic notaté &,, definita prin $189--- 8h Bp tate --ty = {8189--.Sps tate --ty}, adicd suma a dowd cuvinte este mulfimea formatd cu cele doud cuvinte Observatia 2.1.11 Aceste operatii se pot extinde la matrict cu elemente cuvinte. Astfel vom putea vorbi de multipticarea latiné a dowd matrici, notata ®z, care functioneazd la fel ca si in calculul matriceal clasic "linie per coloana” cu precizarea ca operafia de inmulfire latind a cuvintelor este usor modificatd, in sensul cd produsul a doud cuvinte este 0 dacd unul dintre cuvinte este 0 sau dace cele doud cuvinte au un simbol comun. 2.1. MATRICEA DRUMURILOR Al Observatia 2.1.12 In cazul in care avem un graf G = (X,U) alfabetul va {fi mulfimea varfurilor grafubui Etapa 1. Se construieste matricea latina 1; = (l,;);_, asociata grafului, unde: 1 ayrj, dack exist arcul (1,2) sii # J 710, dacd nm exist areul (,,.r,) sau i= j Se constrnieste matricea latin’ redusi Lx, obtinuta din L; prin suprimarea fiecirei lite Pentru & T vom efectua: Etapa k. Se obtin drumuile elementare de lungime & prin multiplicarea latina, calculand Ly = Ly-1 81 Le. Exemplul 2.1.13 Sa se determine drumurile elementare pentru graful G=(X,U) unde X = {x1, 22,23, 24,45} $8 U = {(1,2), (1,4), (1,5), (2,4), (3,1), (8,2), (3,5), (4,4), (4,5), (5, 3)} Solufie. Prefertim ca varfurile grafului Etapa 1. ile notim A, B, C, D, B. AB AD [AE B DIE] BD Di_| cB CE]; Le=[A]B E] DE E| EC C | Etapa 2. AEBC[ ABD [ADE BDE CAB, CBD [CAE Ly DEC ECA [ECB 42 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Etapa 3. AECB | ADEC ABDE, BDEC Ls= CABD BDE DECA | DECB ECAB ECAD, ECBD. Etapa 4. ADECB | ABDEC | ABCBD BDCEA Iy= CABDE DECAB ECABD 2.2 Determinarea componentelor conexe Algoritmul de scanare al grafului (X,U) un graf orientat sau neorientat. Acest algoritm determina ile de la un varf specificat zo la celelalte varfuri ca pot fi atinse plecand din xo. In cazul neorientat cl construieste un arbore maximal ce confine zo. in cazul orientat el construieste o arborescent& maximali ce contine x9 ca ridicina. Etapa 0. Fie R= {20}, Q:= {mo} i A=. Etapa 1. Daci Q = 9 algoritmul s-a incheiat. In caz contrar alegem x € Q. Etapa 2. Alegem y € X \ R cu proprietatea c& u = (x,y) € U. Dack nu exist un astfel de varf punem Q = Q \ {2} si trecem la etapa 1 Etapa 3. Punem R= RU {y}, Q:= QU {y} si A= AU {u} gi trecem la etapa 1 Exemplul 2.2.1 Fie G = (X,U) un graf neorientat, unde X = {o,21, 02,215,045, 26} 2.2, DETERMINAREA COMPONENTELOR CONEXE 43 si U = {(z0, 21); (0,25), (41,3), (2, 40), (43, 25), (was 2)} Sii se determine arborele maximal ce confine x9 Solutic. Fie R= {20}, Q:= {x0} si A=0. Cum 2 € Q alegom x ¢ X\R care are proprietatea e& (9,21) € U. Fie R = RU {ry} = {00,21}, Q = QU {21} = {20,21} si A= AU {(x0, 21)} = {(20, 21)} Alegem xr € Q. Cum (rp, 15) € U adaugiim 25 la Q si R gi muchia (9,175) la A. Astfel Q = (20, 21,25}, R= (20, 21,25} si A= {(0,11), (20, 25)} Alegem xp € Q. Cum nu existd y € X\ R astfel ineat (xo, y) € U punem Q=Q\ {xo} = {x1 x5} Pentru x; € Q, cum (21, 23) € U, adaugim 23 la Q si R gi muchia (2, 25) la A. Objinom Q= (a1, 05,05}, R= (10, 01,05,05}, A= { (20,21), (20,25); (11 45)} Alegem x; € Q. Cum nu exist y € X\ RB astfel inedt (2r,,y) € U punem Q=Q\ {21} = (25,23), Pentru #5 € Q, cum (4,5) € U, adiugdm sry la Q gi R si muchia (1r4, 25) la A. Obtinem Q = {5,23,24}, R= {x0, 21, 05,03, 24) $i A= {(t0, 21); (20, #5), (15 0s), (a4, 25)} Alegem 25 € Q. Cum nu existi y € X\ R astfel neat (e5,y) € U punem Q = Q\ {5} = {23,24}. Pentru zs € Q observim ci nu exist y € X\ Rastiel neat (xs,y) € U. Punem Q = Q\ {23} = {x4}. Pentru x4 € Q observiim ci nu exist y € X\ R astfel incit (x4, y) € U. Punem Q=Q\ {24} =0. Algoritmul sa incheiat si arborele ciutat este (R, A) Observtia 2.2.2 Ideea acestui algoritm este ca la orice moment (R, A) sé fie un arbore (respectiv 0 arborescenfii ce confine wo ca rédicind, in cazul ‘unui graf orientat). Observatia 2.2.3 in legdturd cu algoritmul prezentat se pune o intrebare fireasca: én ce ordine se aleg in etapa 1 wérfurile x € Q ? Doud metode sunt frecvent utilizate. Acestea sunt numite parcurgerea in adéncime (Depth- First Search) si parcurgerea én ldtime (Breadth-First Search). In metoda DES se alege acel varf x € Q care a fost ultimul addugat. in metoda BFS se alege acel virf x € Q care a fost primul intrat, Mai mult despre parcurgerea unui graf poate fi gésit in ultimul capitol 44 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI 2.2.2 Componente conexe Algoritmul precedent poate fi aplicat pentru a determina componentele conexe ale unui graf. Astfel alegem un varf xo, aplicdm algoritmul si verificdm daca. R=X. In caz afirmativ graful este conex. In caz contrar R este 0 compo- nent conex’ maximal si reluim algoritmul alegand un varf ¢ ¢ X\R pana cind toate varfurile au fost puse intr-o component conexi maximala. Observatia 2.2.4 Graful din exemplul 2.2.1 are doud componente conere: Clea) = {05 21,25, 22,24}, Clea) = {22,26} 2.3 Determinarea componentelor tare conexe In aceasta sectiune se considerd um graf orientat G = (X,U). 2.3.1 Algoritmul Malgrange Etapa 0. Pentru fiecare virf x din X se determin’ mulfimea predecesorilor lui x si multimea succesorilor lui 2. Etapa 1. Fixim un varf x € X gi determin’im componenta tare conexa (2) ce contine varful x (A) Vom calcula prin recurentit P(x) =P (2)) ss PG pand cand in multimea P(e) = {2} Ur (@) UP (2)U, numita inchiderea tranzitiva invers& a lui x € X, nu se mai aduga varfuri noi. (B) Vom calcula prin recurentii PM (a) = PAE @)) 5 PMG) SPE MG) pana cind in multimea (x) = {2} UP*(2) UPP(@) U-- U(x) RMINAREA COMPC 'ONEXE 45 numita inchiderea tranzitivA direct& a lui x €X, nu se mai aduga varfuri noi. in final O(z) =F (2) n f(z) Etapa 2. Se reia ctapa 1 cu un alt varf 2! din X\ C(x) Procedeul continu pani ednd se epuizeazs toate varfurile grafului. Exemplul 2.3.1 Sa se determine componentele tare conexe pentru graful din figura de mai jos () 2) Figura 2.2: Solufie. Etapa 0. Pentru fiecare varf vom determina multimea predeceso- rilor si multimea succesorilor. PQ) =}; PQ) =O} P@) = 2.4} EH) = (3) T-(5) = {2} ; P-(6) = {2,5,7} ; P-(7) = {3,6} ; P-(8) = {4,7,8} 1 (1) = {2}; P*(2) = {8,5,6) ; P°(8) = 4,7) s PFA) = {3,8}; P¥(S) = 1,6} P= {7} PUT) = (6,8) PHB) = 8} Etapa 1. Vom alege mai inti virful rs, pentru ed (8) = {8}. Prin umare C(8) = {8} Etapa 2. Alegem virful x, (A) rq =r@ a) =r = 2} rsa) =P) = @) =O} 46 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Prin urmare Ta) = (1,2,5} (B) ra) = P(t (1) = P*(2) = {3, 5,6}; Pes) = P+(P**(1)) = F*({3, 5, 6}) = €4,7, 1,6} | r4qa) =P! (r'8()) =P! (44, 7,1, 6}) = {3, 8, 6, 2, 7} Astfel P*() = (1,2,3,4,5,6,7,8} § O() =P ayant) = (1,2,5} Etapa 3. Alegem varful 13 (A) P(3) =P (P(3)) =P ({2,4}) = {1,3}; 1-9(3) =P (F%(8)) =F ({1,3}) = {5.2.4} 5 P43) =P F(8)) = P-({5, 2.4) = (2,1,3} Deci T (3) = {1,2,3,4,5} (B) P73) =P" (3) =P'({4, 7) = B,8,6} 5 r+3(3) = r+(-7(3)) = F>({3,8,6}) = {4,7,8) Astfel T+(3) = {3,4,6, 7,8} si C(3) = F-(3) NE*(3) = {3,4} Etapa 4. Alegem varful x6. A “ P46) =P-(P°(6)) =P (2,5, 7) = (1,2,3,6} r-4(6) = P-(P-*(6)) = P({1, 2, 3, 6}) = {5, 1,2, 4,7}; 1-46) =P-(P-4(6)) =P ({5, 1, 2, 4, 7}) = {2, 5, 1,3, 6} Deci _ F-(6) = (1,2,3,4,5,6,7} (B) r(6) = P+(P*(6)) = P*(7) = {6.8} P86) = P-((6)) = P°({6,8}) = {7,8} Astfel T+(6) = {6,7,8} si C(6) = F-(6) NT*(6) = {6,7} 23. DETERMINAREA COMPONENTELOR TARE CONEXE aT 2.3.2 Algoritmul Chen Etapa 0. Se scrie matricea de adiacenta. Se fixeazi un varf xr, si se deter- min& componenta tare conexa ce contine varful xr, Etapa 1. Vom aduna boolean Ia linia k toate liniile j pentru care ag; repet& aceasta etapa pana cand pe linia lui k nu se mai obtin noi elemente ale cu 1. Fie PY (aa) = (4) U (2: any =) Etapa 2. Vom aduna boolean la coloana k toate coloanele j pentru care aj, = 1. Se repeti aceasta etapi pana cand nu se mai obtin noi clemente egale cu 1 pe coloana k. Fie Fr (ex) = {00} U {a5 + ane = 1} in final 7 . C(x) = P* (zx) OT (2x) Etapa 3. Se climin’ toate liniile gi coloanele corespunzatoare varfurilor din componenta tare gasit& si se repeta etapele 1 si 2 fixand un alt varf. Procedeul continua pina cand se epuizeaz’ toate varfuile grafului Exemplul 2.3.2 Aplicnd algoritmul Chen si se determine componentele tare conexe pentru graful din figura 2.2. Solufie 1]2(3/4][5|6[7]8 T° [1 [9[9]0[0[o[o Zoo nietf iofo 3]e [oot [ofoli fa Ti [o[1 fo fo[ofo[t 3] [ofolo loft folo elo [ooo fo folifo Tle lo foloofi [oft EO Alegem mai intai varful zg pentru ci observiim ci pe linia 8 toate clementele sunt 0 (exceptie ultimul). Prin urmare I (rs) = {5} si astfel C(xs) = {23} 48 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Elimindm linia 8 si coloana 8 1]2{3|4|5|6|7 1fo[1[o[o[o[o[o Zope ofoli[ofofi ofo[i[o[ololo Al= d}ofolofoji Alegem varful x. Aduniim boolean linia a 2-a la linia 1 12 [3 5|6 ipeatfeap Zope 4-29 [open fofoya Zo loli [olofojo Si [efofofofi[o 60 fo fololofoyi Tl» [efofofo fifo Adunam boolean la linia 1 liniile 2, 3,5,6. Obtinem 1]2|{3]4|5|o|7 ppp 1 Zoo fotiflo 4-22 PPE To [0/7 [o[o foo Safe fofofofi fo 6 loo folo[ofoya ofofofo[ofi[o 2.3. DETERMINAREA COMPONENTELOR TARE CONEXE Avem f+ (x, boolean coloana 5 la coloana 1 49 Revenim la matricea A; si adundm 1) 2|[3|4|5]o|7 TJoli[ololololo 7hpppanlp 4,39 pp yofoi T[olofifolololo safe fefep[o 6lfo[ofojolofoyr 7lfo[ofolololijo Adunim boolean coloanele 2 si 5 la coloana 1 1f2|3ja[sjel7 Tole folo Tippy solo folifofoyt T[o[o/1 [oo folo ES A élo[ofolo[ofor Tlo[ofofofofijo Astfel P(x) = {x1,x2, 25} i deci C(x) = + (x1) OF (x1) = (x1, 22, 25}. Revenit la matricea A, si eliminam liniile 1,2, 5 si coloanele 1,2,5. Obtinem As = 3|4jol[7 3ffo[ijofi qlee [o éofofoti Tee fo 30 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Alegem variul x3. Aduniim boolean la linia 3 liniile 4 si 7. Objinem 6|7 ifi o[o 02 fo Astfel P+ (rs) = {25, 4, 6, 27}. Revenim la matricea Ag si aduniim boolean. coloana 4 la coloana 3. Obtinem 3[4|6[7 3A fifo As= 41 [0 [0/0 6 fo fo foyt TI» pp fo Atunei P-(23) = {23,24} gi deci Ces) = P¥(x3) A P-(ws) = {05,24}: Elimindm din matricea Ay liniile 3,4 si coloanele 3, 4 6l7 Obtinem Ay= 6 [[0 [1 The Alegem varful ag. Adunam boolean linia 7 la linia 6. 6/7 Obtinem Ajo= 6 1 TH1lio Deci f+ (xg) = {26,27}. Revenim la matricea Ag gi aduniim boolean coloana T la coloana 6. 6|7 Obtinem A= 6 [1 [1 Tilo Avem P (1g) = {26,27}. Atunci C(x6) =F! (a) MF (x6) = {26,27}. 23. DETERMINAREA COMPONENTELOR TARE CONEXE 51 2.3.3 Algoritmul Foulkes Acest algoritm se bazeazii pe adunarea si inmultirea boolean’ a matricilor Etapa 0. Se scrie matricea de adiacenti A asociaté grafului Etapa 1. Se calculeazi A J, unde J este matricea unitate. Etapa k. Se c (Aen, Algoritmul se incheie cand (A @ I) = (A @ I) in matricea (AG) se suprimé liniile i, 2, --- , jp formate doar din cifra 1 si coloancle corespunzitoare. Varfurile corespunzttoare acestor linii formeazi prima componenta tare conexi, adied lculeazi ign 5 Big) reia algoritmul cu matricea riimasi Exemplul 2.3.3 Aplicdnd algoritmul lui Foulkes sé se determine compo nentele tare conexe pentru graful din figura 2.2. Solute 1/2|3[4[5|6|7[8 TJo[i[olo[ofofofo Zool [oli fifolo 3[0olo[1[o folio Tofolt[ololololr 31 lofololofijolo efololofolololifo To [ofolofofi jor eo [olololofojoli 1]2(3]4]s[e|7]s8 Ti f2[e[ofofofofo Zola loli jolo soto ffolofifo Topo foley Si folololifjolo 5 Tlololofolofifi|i 80 [olo[olololo 52 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI 1[2[3|4[5|6|7[8 TE Ppp oo 7A sof aAhfaph (AeIv=T]ofolififoloff spp Pppnt[ tPPppprAnp Tole lofojofi fifi solo folofojo[ofa 1]2|3]4]s[e]7]8 Topp faffo Maayan sop apa (ens=afolfofififolifala Spar anyy efofojopojoffii Tole lofololifi|i Soleo fofofofoli 1[2|3|4[s[e7[8 Teepe | ee soe aAhfptph em=ToprAnptit[ spp hppeah eo PpPprntpy Toloofojofi fifi Sololofolololofi (A@I) va fi egal cu (A@I)*. Astfel am gisit prima component nele 1, 2,5. Observim c: tare conexa C(x) = {21, 22,25}. Eliminam liniile 1, 2,5 gi coloa 24. DETERMINAREA CIRCUITELOR EULERIE Obtinem 3[4[6/7]8 S3fijijififa p-4ppbeEht Solo {tft Tololififa sfolojofofi 3i4ie]7]{s& 3 1fi}ififi 4fifijijifi Atunci BO = Nace ep Topo fifa sfofofofo]i Observim ci B® = B. Astfel am gasit a doua component tare conexd C(23) = {r5,r4}. Eliminim liniile 3,4 si coloanele 3, 4 67 [8 6 7h 8 [> [o Cum C® = © algoritmul s-a incheiat si am obtinut a treia component’ tare conexd C(xg) = {26,27}. Elimin&m liniile 6,7 gi coloanele 6,7. Ma- 8 T 1] stunei C2) — © Hf Atanci c= % 1 8 Matricea ramasi este C= 7 I I 0 tricea rimasa este D = Prin urmare, a patra component tare conexa este C25) = {x5}. 2.4 Determinarea circuitelor euleriene 2.4.1 Introducere Teorema 2.4.1 (Euler [1736]) Un graf neorientat conex este eulerian dacit si numai dacd fiecare varf are grad par Fic G = (X,U) un graf neorientat conex (verificarea conexititi se poate face utilizind algoritmul de scanare a grafului). Presupunem ci G este eulerian 3 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI (verificarea paritatii gradelor fieckrui varf este imediati). Algoritmul prezen- tat mai jos va determina un ciclu eulerian in graful G. Idea acestui algoritm, este ck plecnd dintr-un vari arbitrar al grafului, spre exemplu 2, si de- terminiim un cicn L = L(x1). Se alege apoi un alt varf, spre exemplu -,, al ciclului L pentru care mai exist muchii incidente cu el, neluate inci. Se determina un nou ciclu L(x;) pe care il concatendim cu ciclul L obtinand un ciclu L mai lung. Se reia aceast& etapa atat timp cit mai exist muchii care nu au fost incluse in ciclul L. 2.4.2 Algoritmul lui Euler Alegem un varf arbitrar al grafului, spre exemplu x; si determinim L= En) Etapa 0. Punem L:= 1 siz =n Etapa 1. Daci I(r) = 0 trecem la etapa 3. in caz contrar fie y € P(x). Etapa 2. Punom L:= L,y siz :=y. Punem U =U \{(x,y)} si trecom la etapa 1. Etapa 3. Pentru ficcare varf x, din L determinim L := L(2,) Etapa 4. Intercalim in L ciclwrile L, Exemplul 2.4.2 Sa se determine un ciclu eulerian pentru graful din figura de mai jos. “ Gi) Solufic. Alegem varful x). Punem L := 2; six = 2. Cum (x),2)) €U punem L:= 2,22 gio = 22. Punem U := U \ {(x1,22)}. Continudm si 2.5. DRUMURI SI CIRCUITE HAMILTONIENE, 55 pareurgem muchiile grafului din 2». Cum (19,23) € U adiugim 2y la L gi scidem din U muehia parcursi (11,3). Avem L°= 11, 02,23 Dup& mai multi pagi obtinem L = 71, 2,75, 14,5, 675,21, Acum L este un ciel. Observam cA 3 este singurul varf din L care mai are muchii incidente neluate incl. Determinim ca si mai sus Ly = L(r3). Obtinem Ls = #3, 210, 9,25, 27,03 Intercalim in L ciclul L3. Obtinem L = 2y, 22, L3,r4,25,%6, 23,01 adic& L = 24,22, 3, 20,9, 48, 27,09, 4, 25,26, 05,01. Acum L este un ciclu ce contine varfurile gi ip care au muchii incidente neparcurse ine’. Prin ur- mare vom determina ciclurile Ly = 27,011, 12, 413, 07 §1 Lio = 10, P14, 215,10 pe care le intercalim in L si obtinem L 21, 22, £3, Lio, £9, 2g, Lr, 3, 24,5, Te, Xs, 21 adic& L > 21, £2) 43, F109) Fray L155 F19) Fa; Ta, Tr, C11, 12) Lrg, LT, 3, L4, Ts) TG) Xe, 2 Observatia 2.4.3 fn cazul unui graf orientat algoritmul se pastreazd modificénd doar etapa 1. Astfel aceasta devine: Etapa 1’. Daca P'(x) = 0 trecem la etapa 3. In caz contrar fie y € P' (xr) 2.5 Drumuri si circuite hamiltoniene 2.5.1 Algoritmul lui Kaufmann Am vazut in sectiunea 2. 1.4 cA algoritmmul lui Kaufmann este dedicat gasirii drumurilor elementare. In particular, drumurile elementare de lungime n—1 (unde n este numirul de varfuri ale grafului) sunt tocmai drumurile hamil- toniene, Pentru a gisi si circuitcle hamiltoniene mai trebuie si completim algoritm cu o singura etapa. Etapa n. Se obtin circuitele hamiltoniene caleuland ace Li = Ini Siler, operatia de multiplicare latin’ fiind putin modificat®, in sensul e& acum vom pistra acele cuvinte ce au un simbol comun cu conditia ca ele si se giseas pe diagonala princilala, cl 36 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Exemplul 2.5.1 Sa se determine drumurile si circuitele hamiltoniene pen- tru graful G = (X,U) unde X = {xy, 22,03, 04,05} $i U = {(1,2), (1,4), (1,5), (2,4), (3,1), (3, 2), (8,5), (4.4), (4,5), (6, 3)} Solufie. Etapele 1,2,3,4 au fost faente in solugia exemplului 2.1.13. Pr cf in etapa d au fost gasite toomai drumurile hamiltoniene Etapa 5. ABDECA BDCEAB CABDEC DECABD ECABDE 2.5.2 Algoritmul lui Foulkes Etapa 1. Se determind componentele tare conexe ale grafului. Etapa 2. Trecind de la o component tare conexi Ja alta, utilizand arce din graf, se determina toate drumurile hamiltoniene ale grafulu: Observatia 2.5.2 Algoritmul este eficient atunci cénd componentele tare conere contin un numdr mic de varfuri Exemplul 2.5.3 Aplicdnd algoritmul lui Foulkes sd se determine drumurile hamiltoniene pentru graful din figura de mai jos. Ke (x6) Solutie. 2.5, DRUMURI $I CIRCUITE HAMILTONIENE 87 T[o]O[1 [0 Thy feyiqt Thi fofo fo Taf fops fo TAP yognpw_ PEEP Tapeh? 48" -aa apa dope fa TP Ppa ss ss Ty Tf TH] yy repr] Ce) = Tf ift 1p) ipa Taya) rapa B=—7AAfh], =a oppo] dfofefifi Tp} ofopofi fi Se giisese componentele tare conexe C(:r1) 122 ta} $i Clas) = {5,20} Drumul hamiltonian este 4, 22, 23,21, 25, 25 2.5.3. Algoritmul lui Chen Acest algoritm se bazeazi pe urmiatoarele teoreme: Teorema 2.5.4 (Chen) Un graf orientat cun varfuri, faird circuite confine un drum hamiltonian daca si numai daca unde p(x) este puterea de atingere a varfului 2; Teorema 2.5.5 Dacd intr-un graf orientat fara cireuite existd un drum hamiltonian atunci acesta este unic. 58 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Etapa 1. Se determina matricea drumurilor D. Etapa 2. Daci exist un indice i € {1, 2, ,..., m} astfel imeat dy = 1 atunci graful are circuite si nu se poate aplica algoritmul lui Chen. Etapa 3. Se caleuleazi puterea de atingere pentru fiecare varf Dac& > p(x.) ¢ SH a Daci > p(x,) = “4-4 se ordoneazi. varfurile in ordine descreseatoare a. atunci graful nu are drum hamiltonian. a puterilor lor de atingere si se obtine drumul hamiltonian Exemplul 2.5.6 Aplicdnd algoritmul lui Chen sd se determine drumul hamil- tonian pentru graful din figura de mai jos. Solutie, Etapa 1. Topo TT [oI] 0] oop ptf tab] A=[o[ofol[o[o], Aes=[olo]i [ole] ofo ofi ofolfolifi| ofofi[ofo tht Pp| 1ijyifayi Tijifay{) wap pp Oe (4en™=[ofofifofo], Aen”=(po[i[o[o] dpa te pnt| CO thot 2.6. DRUMURI DE VALOARE OPTIMA 59 oi fiyiyz] ofolijifz| D=Aa(Aon® =[0 fo] ooo} opti fotr) ofofi [oto] Etapa 2. Observim ci in matricea D toate elementele de pe diagonala principala sunt zero, Prin urmare graful nu are circuite si algoritmul lui Chen poate fi aplicat. Etapa 3. Remarcim cA p(1) = (a2) = 3 ples) = 0; ples) = 2 p(as) = 1. Atunet 3 p(x,) = 10. Dar 282 = 84 — 10. Algoritmul Ini Chen & {st un drum hamiltonian care se obtine ordonand varfurile in ordine descresciitoare a puterii lor de atingere: 1, %2, a4, 5, 43 2.6 Drumuri de valoare optima Considerim un graf orientat, valorizat, fara bucle, Suntem interesati sa gisim un drum de valoare minima sau maximi intre doud varfuri date ale acestui graf, Binenfeles, daci ye = (1, ua,-++ ,u,) atunci v(1) = v(n) + v(ur) +++ + v(up) se numeste valoarea drumului i. 2.6.1 Algoritmul lui Ford Acest algoritm determin drumurile de valoare optima de la un varf fixat (spre exemplu 2 € X) la colelalte varfuri ale grafului Etapele algoritmului pentru o problema de minim: Etapa 1. Vom marca fiecare varf al grafului un numér A,, care reprezinté valoarea unui drum arbitrar de Ja x; la x. Deci Ay = 0 si Ay = v(u(xr, 24). Btapa 2. Pentru (x,,2;) € U calculim t,, Xs, Daca ti; < vj se trece la etapa final. Btapa 3. Daci exist t;, > vi vom pune Xj = A, + vy, cclelalte marcaje ramanand neschimbate. Revenim la etapa 2. Btapa final. Drumul de valoare minima este format din acele arce pentru care ty = vis 60 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Exemplul 2.6.1 Sa se determine drumurile de valoare minima de la x, la 1, (i = 2,9) in urmatorul graf valorizat. Figura 2.3: Solutie vy | G2 3) GT] 24 [25] ] 31 wl M [lof [sls ty | 4 [0 [12 [-2 [8 ty | [10 [12 [-2 [8 [-l0 ty Lt [0 | 2 f2[ 8 a 46 [56 [57 [58 [ [os 79 [87 [ao Us mw] 6 [play 26 | 16 t, Oo |-lo] 3] 4 [ [14] ] 1 | 17] -1 | 16 ty 0 |-10] 3 | 2 12 |-1] 17] 1 18 ty oO f-lo[ 3 [2] 12 ]f-1[i5sf. 16 Tabelul marcajelor este 1 | ee [es | a | as [x6 | 27 | 2s | to [0 [a4 [10 | 12 [22 [12 [25 | 26 [42 ds [0 [aa [a0 | 12 [22 [72 [25 | 2d [a2 [0 [a4 [10 [12 [22 [12 [25 | 24 [40 2.6. DRUMURI DE VALOARE OPTIMA 61 24. Revenim la etapa 2. 40. In final (21,02) = (1,2) , v(e(2r, 22)) = i war, 1, 2,5) sau ofa, x5) = (1,3,5) gi v(qu(ar, x5) = 22. wa, 1,3,6) , v(j(1,9)) = 12. wr, 22) = (13,7) , vu(2,27)) = 25. mz, 1,3,6,8) , v(su(ar1, a)) = 24. ee(2r, 29) = (1,3,6,8,9) , v(u(rr, 9) = 40. Observatia 2.6.2 In cazul unei probleme de maxim algoritmul se incheie eénd ty; > vj. Prin urmare, vom schimba marcajul varfului x; € X, punénd N= Arty, dacd ty < vy 2.6.2 Algoritmul Bellman-Kalaba Acest algoritm determina drumurile de valoare optim’ ce unese varfurile gra- fului cu un varf fixat (spre exemplu 7.) Etapele algoritmului pentru o problema de minim: Etapa 0. Construim matricea V = (v,;) unde vl a3) dack (mi, 25) €U it AF; 0 dack i oo in rest Etapa 1. Se pune a!” Btapa m. Se calcule Yin af") = minfal” + v,} 3 Algoritmul se incheie dack a") = al", In accast& situatic drumurile de valoare optim sunt formate din acele arce (,,x;) € U pentru care af”) =n, al", Daci exist i astfel incat a!) # al") se trece la etapa m+1. Exemplul 2.6.3 Sa se determine drumurile de valoare minima de la x;, (0 =T,8), la xg in graful valorizat din figura 2.3. 62 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Solutie 8/8] 8/8) 8/8 oO 20 | 28 | 20[ 16 | 0 20 | 28 | 20[ 16 | 0 20 | 28 | 20[ 16 | 0 20 | 28 [20[ 16 | 0 co |e | 35 45 | 28 | 30 40 | 28 | 30 | 40 [28 | 30 In concluzie g(r, 29) = (1,3,6,8,9) , v(u(r,29)) = 40; (x2, 29) = (2,5,8,9) , (ula, x9) = 28; M(2x3,0) = (3,6,8,9) , v(u(es,29)) = 30; H(xa, 0) = (4,6,8,9) , v(q(ara,at9)) = 38; hrs, 9) = (5,8,9) , v(s(as, 9) = 20; H(x6, 9) = (6,8,9) , v((a6, a8) = 28; b(27, 29) = (7,9), v(ula7, 29) = 20; M(x, 9) = (8,9), v(u(xs,29)) = 16. Observatia 2.6.4 In cazul unei probleme de marim matricea V se serie asemandtor cu precizarea cé uj; = 00 daca (1,,2;) ¢U. La etapa m in loc de minim se va lucra cu maxim. 2.6.3. Algoritmul lui Dijkstra Algoritmul Iui Dijkstra determin drumurile de valoare minim& de la un f fixat (spre exemplu x, € X) la celelalte varfuri ale grafului precum Iungimea lor. Mai precis vom determina d(x) si P(z) pentru fiecare vi 2.6. DRUMURI DE VALOARE OPTIMA 63 x € X\ {x}, unde d(x) reprezinta lungimea drumului de valoare minima de la x1 la ¢ iar P(x) reprezint predecesorul lui 1, aceasta insemnind ea drumul optim dela 2; la x este (x1, P(x), x). Dac varful x nu poate fi atins plecind din 1; atunci d(x) ~ oo si P(x) este nedefinit. Algoritmul utilizeaza © mulfime R format cu varfurile pentru care valorile finale corespunzittoare drummrilor optime de la varful 7, au fost determinate. Initial R= @ gi la fiecare iteratie se mai adaug un varf la R. Etapa 0. (Initializare) d(x) = d(x) = 00, P(x) = Wee X\{n}sR=0 Btapa 1. Se alege un varf x € X \ R astfel incat az ae) Btapa 2. R= RU {2} Btapa 3. Pentru fiecare y € X \ R eu proprietatea (x,y) € U executiim Dac d(y) > d(x) + v(x, y) atunci punem d(y) := d(x) + v(«,y) si P(y) = 2. in caz contrar d(y) gi P(y) rman neschimbate. Etapa 4. Daci R # X se trece la ctapa 1. Dack R = X algoritmul sa incheiat. Exemplul 2.6.5 Aplicénd algoritmul lui Dijkstra sé se determine drumurile de valoare minimé de la x1 la x; (pentru i = 2,6) in urmétorul graf valorizat: @ \ Figura 2.4: 64 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Solutie Tteratia| 0 1 2 3 4 5 6 RRs} OT ted | feb | tes | tas} | feed | Cah de2) (Plex) | oof— | 37a | 8fa | 3/1 [ 8/m [ 3/e | 37m d(xs)/Ples) | e0/— | cof— | Vfa2 [12s [12/5 | 12/25 | 12/5 ales) Pes) [oof [oof | cof— [28/5 [28m [23/5 | 23/z5 d(ws)/P(as) | oof | oof | S/ma | 8/ma | B/a | 8/m | Sfx d(x) /P(a6) [oof— [28/1 | 23/x2 [23 fe2 [18/3 | 18/25 [18/23 Vom explica constrctia tabelului de mai sus. Initializare: d(r) = 0; d(x) = 00, (V)i= 26; R= 0. Iteratia 1: Cum d(x) = min, d(u) punem R = RU {x} = {11}. Cum EX (21,22), (1,6) € U vom pune d(x) = d(x:) + v(m, 22) =0+3=3; Plas) =x; (xg) = d(a,) + v(v1, 26) = 0+ 28 = 28; P(e) = 2 Iteragia 2: Cum d(x,) = min, d{(y) punem R= RU {za} = {21,42}. Cum 28 = d(x») > d(2) + v(1r2,2%6) = 3+ 20 = 23, vom pune d(t6) = 23 gi P(z6) = a2. Apoi (a3) = d(w2) + v(xa,73) =3 +1 = 14; Plas) = 22 (x5) = d(z2) + v(a2,a5) = 3 +5 = 8; Plas) = 2 Iteratia 3: Cum d(x; rnin d(y) punem R= RU {25} = {21,42, 45} YEX\ Cum 14 = d(x3) > d(xs) + v(x5, 73) = 8 +4 = 12, vom pune d(ry) = 12 gi P(x3) = 25. Apoi (x4) = das) + v(x5,24) =8 +15 = 23; Plrg Iteratia 4: Cum d(r3) — min d(y) vom adiuga srs la R. Dect very R= RU {0s} = (01,02, 25,05} 2.6. DRUMURI DE VALOARE OPTIMA 65 Cum 23 = d(x,) < d(xs) + (xs, 24) = 1241 d(z,) si P(x) raman neschimbate. Dar 23 = d(xe) > d(xs) + v(x3, 76) = 12 +6 = 18 Prin urmare vom pune d(x) = 18 si P(r Iteratia 5: Se adauga ze la R. Iteratia 6: Se adaugé 24 la R. Interpretarea tabelului: ay pula, 2) = (21,22); v(ula,22)) = 38 (ys ts) = (21,225,205); (unr, 45)) = 12 ju(x,24) = (3,20, 25,24); vee, 24) = w(eysts) = (ra, 42206); v(4ea, 15) ila, 6) = (22,22, 15525,2%0)5 U(qe(21, 6) 2.6.4 Algoritmul Floyd-Warshall Acost algoritm determin drumurile de valoare minima dintre toate perechile de varfuri ale unui graf orientat @ = (X,U) valorizat. Funetia v : U > R poate lua si valori negative dar vom presupune ci nu exist cicluri de cost negativ Etapa 0. Construim matricea V = (vi;)fj1, unde a1 v(xi,2j), daca (x;,2;) EU git x9 0, ack i 0, in rest sande Construim matricea P = (pi)? _ J 0, dacd i= 7 sau v; = 00 > LG, dack i fj si vy <0 Aplicim matricilor V si P un sir de n transformari Tj, (k = Tn) calculand V=T(V); P= TP) Etapa k. Daca vj; < vig + v4y atunci vy $i py rman neschimbate. Dack vy; > vy + v4; atunel vy, se inlocuieste cu v4. + vg; iar ps devine pi, 66 CAPITOLUL 2. ALGORITMI TRU GRAFURI La sfirgitul algoritmului se obtine matricea V = T,(V) = (vj), ale c&rei clemente reprezint valoarea drumului minim de la x; la x), $i matricea P = T,(P) = (p;) numiti matricea predecesorilor, unde p,, = 0 in cazul in care i — j sau nu exist drum de la, la 1; iar dac& pj =U atunci predecesorul lui 2 intr-un drum de valoare minim de la 2, este 2 Observatia 2.6.6 viz este proiectia lui v, pe coloana k si vy; este proiectia lui vis pe linia k. In fapt viz devine min{u,;, vse + v45} Exemplul 2.6.7 Sa se determine drumurile de valoare minimd intre toate perechile de varfuri ale grafului din figura 2.4 precum si valorile acestora Sotutie. 0 3 00 00 co 2B 910900 co 0 ll ow 5 2 002022 v=] © 6 9 1 «© 6 p-[%39303 | «© c%© 3 0 8 oo re ee cx 00 4d 15 0 00 905500 o0 9 0 mw wo 0 ooogoo 0 3 90 0 co 2 Oo10006 co 0 ll ow 5 20 O02022 co 6 0 15 oo 6 030303 VERM =) 0 3 0 8 ow]? 04040 co co 4 15 0 0 o05500 90 00 90 00 wo 0 goood oD 0 3 Uw 8 B 012022 co 0 Ilo 5 20 602022 _pyy | ™ 6 0 15 1 6 030323 V=BM) =) oo 0 3 0 8 ooroas co ce 4 15 0 06 O05 500 oo 00 C6 co we 0 oood0o 0 3 M29 8 2 012323 co 0 1 2 5 17 002323 _ _|o 6 0 1b 1 6 >| 930323 V=BM! 2 9 3 0 8 9 | Polo saeas co 10 4 15 0 10 035503 ce cc ce cc ce 0 gooo009 ARBORE DE ACOPERIRE MINIM 67 0 3 M 2 8 20 912323 co O ll 26 17 902323 y= TV) co 6 0 15 ll 6 5 030323 VETM=|) 2 9 3 0 8 9 , 034043 co 10 4 15 0 10 935503 co 00 20 oc oo 0 ooogoe 0 3 12 238 «1 015523 co 0 9 2 5 15 005523 niyy_| © 6 0 16 ll 6 5) 0939323 VEBY)=|) 2 9 3 0 8 9 } 034043 co 10 4 15 0 10 935503 90 90 96 co ce 0 oooo00 0 3 12 3 8 18 015523 co 0 9 20 5 15 905523 _[ «© 6 0 1b M6 pu|03 0323 “lo 9 3 0 8 9 . 09346043 co 10 4 15 0 10 035503 co 00 0 oo oo 0 ooo0800 In concluzie: cum p, = 0 inseamna ci nu exist’ drum din 2, in 2) Dac& suntem interesati de un drum de valoare minima din x; in x», cum vp = 18 avem cA valoarea acestuia este 18. Apoi pis = 3 inseamna ci predecesorul lui zp este x3. Cum pg = 5 avem cA predecesorul lui x3 este 5, Dar pis = 2 si deci predecesorul Ini 2s este 22. Apoi pi2 = 1 ne spune ci predecesorul lui z2 este x. Prin urmare drumul este js = (21,22, 25,73, 26) Apoi vy = 9 ne spune c& valoarea minima a unui drum din x4 in 72 este 9. Pentru a giisi acest drum observiim ca py = 3, adic& predecesorul lui x2 este 43, Cum pay = 4 avem ca predecesorul lui as este 4. Deci drumul este p= (#4,23,2) 2.7 Arbore de acoperire minim Fie G = (X,U) un graf neorientat, conex, valorizat, Cautim ACU, A fir cicluri, care conecteazi toate varfurile gi a cdrei cost total v(A) = DO v(u) aca 68 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI este minim. A va fi numit arbore de acoperire minim. Idea unui astfel de algoritm: - algoritmul foloseste 0 multime A (initial A = @) care la fiecare pas este 0 submultime a unui arbore muchie u care poate fi adaugata la A respectand proprietatea de mai sus, in sensul ck AU {u} este de asemenea o submultime a unui arbore de acoperire minim. O astfel de muchie u se numeste muchie sigur pentru A. - in orice moment al executiei algoritmului G4 = (X, A) este o pidure si ficcare din componentele conexe ale Ini G4 este un arbore (initial, cand A = 0, pidurea contine n arbori, cdte unul pentru fiecare varf). La fiecare iteratie se reduce numirul de arbori cu 1, Cand pidurea confine un singur arbore, algoritmul se incheie. - orice muchie sigurii pentru A neste componente distincte ale lui A Existé multi algoritmi pentru determinarea arborelui partial de cost minim. Dintre care cei mai cunoseufi sunt algoritmul lui Kruskal si algoritmmul lui Prim. Chiar daci nu genereazi toate solutiile posibile, ei genereaza intr-un limp scurt o singura solutie optima. Daca toate costurile muchiilor sunt diferite intre ele atunci solutia este unica. de acoperire minim. La fiecare pas se determina o 2.7.1 Algoritmul lui Kruskal Etapa 1. Punem A = 0. Se formeazii n arbori, cite umul pentru fiecare varf. Etapa 2. Se ordoneazit muchiile creseitor dup’ cost Etapa 3. Se alege o muchie (2;,.r;) 3.1 Daca varfurile terminale ale ac trece la urmatoarea muchie 3.2 Daca varfurile torminale ale acestei muchii apartin la arbori diferiti se adaugi: muchia (2;,;) la A gi se unese varfurile din cei doi arbori, Se trece la urmatoarea muchie. tei muel apartin aceluiagi arbore se Exemplul 2.7.1 Sa se determine arborele de acoperire minim pentru graful din figura 2.5, Solutic. Punem A= 9). Alegem muchia (rs, 75). Cum varfurile terminale ale ei muchii apartin la arbori diferiti se adaugd aceast&’ muchie la A. Deci {(xa,75)}. Dup& mai multi pasi A= {(x5,05), (5,28), (04,26); (84,28), (2, 22)} 2.7. ARBORE DE ACOPERIRE MINIM 69 Alegem muchia (x5, x5). Cum varfurile terminale apartin aceluiagi arbore se trece la mnchia urmitoare (4,77). Varfurile terminale ale acestei muchii apartin la arbori diferiti, Prin urmare se adauga la A aceasta muchie. Astfel A= {(x5, 25), (25, 8), (24, 6), (#4, 28), (41, 22), (4,27) }, Alegem muchia (3, rs). Cum varfurile terminale ale acestei muchii apartin aceluiasi arbore se trece la muchia urmitoare (x1, 3) care va fi adiugati la A. Deci A= (5,25); (a5, 2"8); (204,26); (tay 8), (1, 2), (4,27), (2, 28)} Alegem muchia (x2, 74). Varfurile terminale ale acestoi muchii apartin accluiasi arbore. Tyecem la urmitoarea muchie. Alegem muchia (x7, rs). Varfurile terminale ale acestei muchii apar{in la arbori diferifi. Se adaugi aceasta muchie la A, Objinem A= {(45, 25), (25,8); (24,6); (a, 8), (#1, #2), (aa, 7), (1,23), (27, 49)} Am obtinut arborele de acoperire minim. Figura 26: 70 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI 2.7.2 Algoritmul lui Prim Acest algoritm este asemanitor on algoritmul lui Kruskal. Arborele citutat porneste dintr-un varf arbitrar si creste pana cdnd acoperi toate vaturile La fiecare pas se adugi mulfimii A o muchie sigur’. In timpul executiei algoritmului toate varfurile care nu sunt in A se afl intr-o coada de prioritate Q (initial Q = X). Algoritmul so incheie cand Q = 0 Etapa 0. A=0;Q=X. Etapa L. A= {ni}; Q=X\ {n)} Etapa 2. Se determina yo € Q cu proprietatea ci exist ry € A astfel incat ¥(¢0,24) = ain vas) Etapa 3. yo se adaugi la A gi se climin din Q. Daci Q = 0 algoritmul s-a incheiat, In caz contrar se reia ctapa 2. Exemplul 2.7.2 Aplicdnd algoritmul lui Prim sii se determine arborele de acoperire minim pentru graful din figura 2.5. Solufie. Fie A= {m1}, Q=X \ {x1}. Cum dain u(y) = mmoles, a), ules ta)} = vet) vom adiuga 2) la A gi se climin’ din Q. Deci A = {(x1,22)}, Q=X\ {21,22}. Apoi ain, u(9) =min{u(z, x3), v(a2, x3), v(x2,24)} = v(xi,23) Astfel A { (x1, 22), (x1, 23)} si Q = X \ {21, 22,23}. Observiim cit main 5 v(2,y) = min{v(x2,24), (2s, 26); v(xs,x5)} = v(as, 25) seaye Prin urmare A = {(21,:"2), (011,23), (#3, 25)} In final A= {(41, 22), (22,23), (v3, 25), (25, 0s), (14,48), (84, 46), (4,7), (7, 29)} 28. ALGORITMUL FORD-FULKERSON, a 2.8 Algoritmul Ford-Fulkerson Etapa 0. Fixim f(x,y) =0, (V)x,y € X, Etapa 1. Céutim un drum rezidual in G;. Vom marca intrarea retelei cu +. Dac un varf x este mareat vom marea cu: 1. [x] acele varfuri y+ (x,y) € U si cy(x,y) = (x,y) — f(x,y) > 05 furi y: (yx) €U sies(x,y) = f(y2) > 0. Daci prin acest procedeu de marcare nu se poate marca ultinul var, flwcul obtinut este maxim. in caz contrar se trece la etapa 2. Etapa 2. Fic jun drum rezidual gisit, Fie ¢y(s#) = min e(x, y) capac Galen tatea reaiduala a drumului Fie fy: XxX SR cpl), daca (1,y) € pOU fulz.y) = 4 ey(u), dack (x,y) € psi (yz) 6 U 0, ‘in rest Consideriim un nou flux f= f+ f, si tevenim la etapa 1 Exemplul 2.8.1 {n figura 2.6 este consideratd 0 refea de transport. Varful Xp este intrarea refelei tar varful x9 este iesirea refelei. Copacitatea fiecdrui are este treculd in chenar. Sa se determine flurul mazim aplicénd algorilmul Ford-Fulkerson. Solutie. A) Presupunem mai intai c& f(x,y) = 0, (V)x,y € X. in aces situatie reteaua reziduald G, coincide cu reteaua initials. B) C&utdm un drum rezidual in Gy. Marcim intrarea retek Avunci varful 2; va putea i marcat cu [+0] Plecénd de la varful x 2 va putea fi marcat cu [FI] Apoi zs va fi marcat cu [42], varful 2s va fi marcat cu [+5] si varful xo va fi marcat cu [+8] Objinem drumul rezidual jx, (fy, Ty, 2, cy(4u) = min{12, 8, 14, 13, 12} = 8 Prin urmare marim fluxul cu & unitti pe arcele din care este format acest drum gi il lism neschimbat in rest C) in mod similar gasim drumul r ei cu +. 5) 3, Tyo) care are capacitatea reziduala, Br, 49) care 72 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI are capacitatea reziduala cy(j2) = min{4, 9, 8, 12, 15} = 4. Marim cu 4 uniti{i fluxul pe arcele din care este format acest drum. Figura 2.6: D) Gasim drumul rezidual us = (ro, 2, 5, -t7, Tyo) care are capacitatea residual cr(44s) = min{15, 6, 8, 11} = 6. Marim cu 6 unitii fluxul pe arcele din care este format acest drum E) Gisim drumul rezidual jay = (0, 23, 6, 25, x9, 19) avand capacitatea reridual& c/(jis) = min{9, 14, 12, 11, 10} = 9. Marim eu 9 unitati fluxcul 2.9. PROBLEME DE AFECTARE 73 pe arcele din care este format acest drum. F) Observiim acum eX dac& intrarea retelei este marcatii cu +, doar varful x2 poate fi marcat cu [+0] Varfurile 2, si xs nu pot i mareate cu[ +0] deoarece arcele (9,1) si (9,73) stunt saturate Plecdnd de la varful «2, varful 2r5 nu mai poate fi marcat cu [72] deoarece areul (9,5) este saturat. In schimb insi varful 2; poate fi marcat cu [2 deoarece flucul pe arcul (x7, r2) este strict pozitiv. Varful x5 nu poate fi marcat [-2] pentru ci nu avem flux pe arcul (:r3,2r2) Plecdnd de la z; vom putea marca x4, apoi x5, 2s si z10. Obtinem drumul rezidual p15 = (xo, 2, "1, 4, 5, Zs, To) care are capacitatea rezidualé cs(tis) = min{9, 8, 5, 4, 5, 4} = 4. Marim cu 4 unitati fluxul pe arcele (20,22), (1,24), (v4.25), (25,28), (v5, 710) si scAdem cu 4 unitati fluxul pe arcul (¢1, 22) G) Reludm procedeul de marcare. Marcim intrarea reelei cu +. Plecdnd de la xq doar «2 va putea fi marcat cu[+0} Plecand de la x2 doar 2; poate fi marcat cu Plecand de la 2; doar x4 poate fi marcat cu +1 c&ei areul (x1, 4) nu este saturat. Varful 5 nu poate fi marcat plecind de la 1; c&ci nu avem flux pe areul (15,71). Plecdnd de la x4 nu mai putem marea niciun varf. Varful 2 nu poate fi marcat [-A] céci nu avem flux pe areul (rz, 4) iar varful srs nu poate fi marcat [74] cdci arcul (:r4, ts) este saturat, Cum prin acest procedeu de marcare nu se poate marca iegirea retelei, fluxul gisit este maxim avand valoarea f = 12 +10 +9=31 H) in final precizim ca puteam alege Ja alt flux maxim, bincinteles tot de valoare 31 ji alte drumuri reziduale care conduceau 2.9 Probleme de afectare 2.9.1 Algoritmul lui Little Fie T = (;,)"j-1 matricea timpilor. Etapa 1. Se determina matricea redusi Tz efectudnd operatiile: 1.1. Se scade din fiecare linie cel mai mic element. Mai p1 i=Tn, ” cis, pentru e scade din elementele liniei "2” elementul tia tis, min {tu} 74 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI 1.2. Se scade din fiecare coloand cel mai mic element. Mai precis, pentru Jj =T)n, se scade din elementele coloanei "j” elementul tay = min {ty — tia} Etapa 2. Se determina constanta de reducere he Yha + obs a oat Etapa 3. Vom construi un arbore. Fiecarui nod 2 ii asociom 0 margine w(x). Nodul initial este # (multimea permutarilor definite pe {1,2,...,n}) si vom pune w(E) = h. Etapa 4. 4.1, Pentru ficeare clement f,; = 0 din Te se calculeaz’t 64; = min ti, + mint, = iat + yl 4.2. Se determin’ 64 = max(4,;} 4.3. Se asociaz& lui H doud noduri: Ky si Ey. Vom pune wo(By) = w(B) + 0 4.4, Se construieste matricea T'(Ej,) obtinuta din Tp prin suprimarea liniei k sia coloanei [. Se aplicd acestei matrici etapele 1 si 2 si se determin’ Tia( Ex) si constanta de reducere hy. Vom pune w(Ex) = EB) + haw Etapa 5. Daca s-a obtinut o matrice de tipul (1, 1) algoritmul sa incheiat in caz contrar ramificarea se continua din acel nod cu marginea cea mai mica. Tn cazul mai multor noduri se alege un nod de tip Eu: Dac& s-a ales un nod de tip Ey se trece la etapa 4 Daci s-a ales un nod de tip By atunci pentru a evita afectarea (f, 1) se pune in matricea nodului precedent ty) = 00 si se trece la etapa 4. 2.9. PROBLEME DE AFECTARE 7 Exemplul 2.9.1 tricea timpilor este rezolve problema de afectare (minim) én care ma- t{2|s|4]s{6l[7 Ite, ] st if sii 1 2feol2[s[s[oluls plots tele sols 4s [a] 3] 3] @¢[ 9 [ox Slel[7l4[9[~lsla 6] 1] 8] 7] «olu«o] 3] 2 TL 9 [ofr] 9] 3s] 10] 8 Solufie. Precizim mai intai ci anumite clemente ale matricei T sunt egale cu 0, ceea ce inseamni cd pe o anumit& magind nu poate fi executatd o anumiti Iucrare. De exemplu tz; = 00 ne spunc c& masina My nu poate L. x0 linie ccl mai mic element. Acestea sunt in ordine 1,0,5,3, executa lucrare, Scaidem din fie 4,2,5. Obtinem 1{2|;3]fa|[sjej7 TP9[0/2[o0[4|0]/0 2 =[2[s[3folexl[s 7-38 [3 [ele] olafo T[2[s8[o]/o][s[6[m si<[3 [eo] [x[o]o 6[9 5 [xele[i fo 74 7[4 3 [4 3 6 36 Scadem din fiecare coloana cel mai mic element. Prin urmare din coloana intai va trebui si scidem 2 1,/2|3];4a[5|6]7] I[7[o[2[o/afo[o] 2]=[2)513)0 l=] | tt, - 3/4 Ft le] 7fols[o[o[3[o[~| Sf |p 4 pels Pollo s [6 | s[= [3 (Wl; [= pea 6 feos ]4 || [felpo 7 Ile Ts [2 Ped3 me ri2[3lia o|7 1 [7 Pel? [ole Peds 2 f= (le [2 Pel= [7 3i3l2lf-l-[1 [3 [a 4 |Di[s Pe pets [6 | si [3 [Ds [= fea efe[s [4 l@[= [flpe 7 pele [s [2 [bi[3 [3 Prin urmare avem afectirile optime: {(1,2), (2,5), (3,7), (4,4), (5, 3), (6,6), (7,1)} si {(1,4), (2,2), (3,7), (4, 1), (5,3), (6, 6), (7,5) } 92 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI 2.10 Probleme de ordonantare Prin proiect intelegem un ansamblu de activitati {4,}",, supuse anumitor striefii in ce priveste ordinea de execufie a acestora, a cdror realizare per Trebuie facuta pr fiecare activitate Aj este indivizibilA (mu se poate descompune in subactivitati), odat& inceputa nu mai poate fi iIntrerupt gi are o durata de executie cunoscuta d, de ordonanjare consti in stabilirea unei snecesiuni de efectuare ior unui proiect, astfel incat relatiile de precedenta dintre ele si fie respectate si timpul total de executie a acestuia sa fie minim. Relatia. de precedent coa mai des intAlnita este aceca in care activitatea A, precede activitatea A, (sau altfel spus activitatea A; suecede activitatea A,) dack activitatea A, nu poate si inceapa decat dup’ un interval de timp t,; de la terminarea activitatii Aj. In general t,, = 0. cizarea 2.10.1 Metoda potentialelor Graful activitagilor unui proiect este G = (X,U) unde X = (AJR, si (A, Aj) €O daci activitatea A; precede activitatea A,. Acest graf va fi vie lorizat in cazul in care nu toti f,, sunt nuli, pundnd valoarea arcului (Ay, Ay) tocmai valoarea ty in camul in care exist mai multe activitali care nu sunt conditionate de nicio activitate a proiectului, vom introduce o activitate initiala fictiv’ Ay cu du- rata de executic dy = 0 gi care precede aceste activitati. In mod similar, daci exist’ mai multe activitSti care nu au nicio activitate succesoare vom introduce o activitate finalé fictiva A,.. en durata de executie dj.y1 = 0 far succesor, dar precedat de aceste activitati. Fiecare activitate A, e rizati prin doud momente: t,- momentul de inceput al activitigii gi t; + d)- momentul terminirii activititii, Pentru activitatea A, vom nota cu - momentul cel mai devreme al inceperii activitit - momentul cel mai devreme al termina activitiigii T> - momentul cel mai tarziu al inceperii activitatii Ty - momentul cel mai tarziu al terminarii activitAtii te date se pun sub forma 2.10. PROBLEME DE ORDONANTARE 93 GALS T, [4 [T Evident tf - +d. Pentru activitatea initial se considera ty =0. Apoi max_ (tf +;); T= min (Ty ~ ty) sana eC si AnAaygew Pentru activitatea final se considera T7,, = 7... Pentru fiecare activitate se defineste rezerva de timp a acesteia R=T, -t O activitate A; pentru care R, = 0 se numeste activitate critic’. Se numeste drum critie un drum intre varlul initial si cel final format din activititi critice Momentele timpunii se determina parcurgand graful de la sursi spre destinatie iar cele tirzii se determina parcurgind graful in sens invers, de la destinatie spre sursi. Exemplul 2.10.1 Sa se determine drumul critic pentru proiectul Acctivitatea | Durata | Achwitafi precedente T 3 = 2 2 3 3 z = a 3 2 3 6 2,3 Solufie. Cum activitatile A, si Ay nu au activitigi precedente introducem activitatea initial fictiv Ap care precede aceste activitayi, Cum activititile Ag si As nu au activitati succesoare introducem activitatea final fictivk Ay precedata de aceste activititi. CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Activitatea | Durata | Activitagi precedente 0 0 = T 5 0 2 2 3 3 7 a q 3 T2 3 6 2,3 6 0 a5 [Ae 9 [3 [a Ail 5 4 [Ae 3 [9 4[2[e Drumul critic este format de activitatile Ao, As, Ao, As, As. 2.10.2 Diagrama Gantt Un instrument de mare utilitate in analiza drumului critic il constituie dia- grama Gantt, care exprimé la scara timpului, prin linii orizontale duratele activititilor gi prin linii intrerupte rezervele de timp. 2.10. PROBLEME DE ORDONANTARE 95 Pentru proiectul din exemplul precedent, diagrama Gantt in care activitatile incep la momentele cele mai devreme este Activitatea 234 5 6 7 8 9 1011 12 Timpul Pentru proiectul din exemplul precedent, diagrama Gantt in care activititile incep la momentele cele mai tarzii este: Activitatea 4 +--+ a4 2 — oo “T4234 5 69 8 9 1011 12 Timpul 2.10.3 Algebra de ordonantare O alta metoda pentru determinarea momentelor cele mai devreme de incepere a activitatilor se obtine prin introducerea pe R U {—oo} a urmitoarelor operatii © b= max{a,b}; a@b—atb 96 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Aceste operatii se extind in mod natural pe mulfimea matzicilor eu elemente din RU {-o0} Etapa 0. Se determin matricea A 0, dack i= j; a= 4 di, dack (A, A,) € U; = in rest. Punem Tp = [0,—00,—00,..., 00], un vector cu n +2 componente. fn fapt Ty este prima coloand din A Etapa k. Caleulim Tj, = Th1@ A. Dack (Ak < n+1 astfel neat T, = Tha atunci algoritmul s-a incheiat iar componentele lui T; reprezint: momentele cele mai devreme de incepere al activititilor. Dac& Tyi2 # Thu atunc sistemul de restrictii este incompatibil. Exemplul 2.10.2 Utilizdnd algebra de ordonanfare si se determine mo- mentele cele mai devreme de incepere a activitafilor pentru proiectul din exemplul 2.10.1 0 2 3 4 5 6 0 0 0 90 0 90 00 1 0 0 0 0 5 0 Solutic. A=—2f, =e | ce | 0 {oo | 2 =e 3 0 9° 4 0 oC 0 4 0 ‘20 2° 0 0 3 5 0 0 90 0 oo 6 6 0 0 0 0 oC 0 Th = (0, -20, -20, -00, ~20, ~00, ~00] T, =Tp & A=[0,0, ~00, 0, 00, ~o0, (0,0,4,0,5,4, ~oe] T; = Ty @ A= [0,0,4,0,6,6, 10] T, = Ts @ A= [0,0,4,0, 6,6, 12] Ts = T,@ A= [0,0,4,0, 6,6, 12] in concluzie ty = 0,t7 = 4,t; =0,ty =6,t7 = 6. 2.11. EXERCITI 97 2.11 Exercitii Exercitiul 2.11.1 Se considerd graful orientat G = (X,U) unde X = {1,2,3,4,5,6} si U = {(1,2), (1,4), (2,1), (2,3), (2,4), (3,2), (3,4), (3,6), (4,1), (4,3), (4,5), (5,3), (5,4), (5,6), (6,3), (6,5)}. Determinati matricea drumurilor aplicénd: a) algoritmul tui Roy- Warshall; b} metoda compunerii booleene, ¢) algoritmul lui Chen. Exercitiul 2.11.2 Sa se determine componentele conexe pentru graful ne- orientat G = (X,U) unde X = {xo,01,22, 03, 04,05, 26,07} si U = {(20, 01), (20,26); (0,27), (1,45), (82,44), (42,27); (#3, 24); (255 26); (45, 27) } Exercitiul 2.11.3 Sa se determine componentele tare conexe pentru graful orientat G = (X,U) unde X = {1,2,3,4,5,6, 7} si U = {(1,2), (1,4), (1,5), (1,7). 2,3), (2,4), 8.1), (3.2), (8,4), (3,5), (4,5), (5,3), (5,0), (6,3), (6.7), (7,1), (7,5)} aplicdnd: a) Algoritmul lui Malgrange; 8) Algoritmul tui Chen; ¢) Algoritmul lui Foulkes. Exercitiul 2.11.4 Sé se determine componentele tare conexe pentru graful G = (X,U) unde X = {1,2,3,4,5,6,7,8} i U = {(1,2), (1,3), (1, 4), (2,3), (2,7), (3,5), (3,6), (3,7), (4,5), (5,8), (5,6), (5,7)} apliednd: a)Algoritmul lui Malgrange; 8) Algoritmul lui Chen; ¢) Algoritmul lui Foulkes Exercitiul 2.11.5 Sa se determine componentele tare coneze pentru graful 7, U) unde X = {1, st U = {(1,2), (1,3), (1,4), (3, 1), (2,3), (2,5), (5,2), (2,8), (3.4), 8,6), (4,5), (4,7); (7,4), (8,6); (6,4), (5,9), (5,7), (4.1), (67), (6.8), (7.9), (7,8), (8,7), (8,9)} apltedind: a) Algoritmul lui Malgrange; 6) Algoritmul lui Chen; c) Algoritmul lui Foulkes. Exercitiul 2.11.6 Sa se determine componentele tare conere pentru graful G = (X,U) unde X = {1,2,3,4,5,6,7} 51 U = {(1,4), (2,1), (2,5), (2,3), 98 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI (3,6), (4,1), (4,5), (4,7), (5,7), (6,3), (6,2), (7,5)} aplicdnd: a) Algoritmul hua Malgrange; b) Algoritmul lui Chen; €) Algoritmul lui Foulkes Exercitiul 2.11.7 eulerian. se precizeze dacd graful din exercifiul 2.11.2 este Exercitiul 2.11.8 Sa se determine un ciclu eulerian pentru graful din figura de mai jos Exercitiul 2.11.9 Aplicdnd algoritmul lui Kauffmann sit se determine dru- murile si circuitele hamiltoniene pentru graful a) 2.41. EXERCITIL 99 b) Exercitiul 2.11.10 Aplicénd algoritmul tui Foulkes sd se determine dru- murile hamiltoniene pentru grafurile din exercifiul precedent. Exercitiul 2.11.11 Aplicénd algoritmul lui Chen sd se determine drumul hamiltonian pentru grafurile din exercifiul 2.11.9. Exercitiul 2.11.12 Se considerd graful valorizat aj | 12 | 13 | 14 | 23 | 25 | 28 | 31 | 34 | 36 | 41 | 45 | 47 wlST9T7l4[ol4lel[sf2fslals ij | 52 | 57 | 59 | 64 | 67 | 68 | 74 | 78 | 79 | 86 | 87 | 89 vy [3 ploy s {> 7 es >s ~7{ afloat asyo a) Aplicénd algoritmul Ford sii se determine drumurile de valoare minimd de lax la 2,(i=7,9) b) Aplicdnd algoritmul Bellman-Kalaba sé se determine drumurile de va- loare minima de la x; la x9(i = T,8); ¢) Aplicdind algoritmul tui Dijkstra si se determine drumurile de valoare minima de la xy la 2,(i = 2,9); 4) Aplicénd algoritmul Floyd-Warshall sa se determine drumurile de va- loare minima intre toate perechile de virfurt precum si valorile acestora. 100 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Exercitiul 2.11.13 Sd se determine arborele de acoperire minim pentru gra- a) Aplicand algoritmul lui Kruskal; b) Aplicand algoritmul lui Prim, Exercitiul 2.11.14 Sd se determine arborele de acoperire minim pentru gra- ful 2.41. EXERCITIL 101 a) Apliciind algoritmul lui Kruskal, 8) Aplicdind algoritmul lui Prim, Exercitiul 2.11.15 fn figura de mai jos este consideratd 0 refea de trans- port. Sé se determine flurul maxim aplicind algoritmul Ford-Fulkerson Exercitiul 2.11.16 Sé se rezolve problema de afectare (minim) in care ma- tricea timpilor este 4 g 64 | 169 | 225 361| 400] 1 36 | 64 T =| 225 [256 | qt 7 | 16 484 | 529 | 16 | 81 | T 196 [225 [500| 1 [9 1. Aplicénd algoritmul Little; 2. Aplicénd algoritmul Ungar. 102 CAPITOLUL 2. ALGORITMI PENTRU GRAFURI Exercitiul 2.11.17 Sé se rezolve problema de afectare (minim) in care ma- tricea timpilor este 165[135| 8 [55] 1 is | 16 [105| 7 [95 | i [135] 1 [65 55 | 75 | 13 | 16,5[ 11 105,75 [ 8 [a5] 16 1. Aplicénd algoritmul Little; 2. Aplicénd algoritmul Ungar Exercitiul 2.11.18 Aplicdnd algoritmul Little sd se determine circwitul hamil- tonian de valoare minimé in urmétorul graf valorizat ij | 12 [13 | 14 | 15 | 21 | 23 | 24 | 25 | 31 | 32 | 34 | 35 wl2lslel4[sl7/e[i[s/4]3fe ij | 41 | 42 | 43 | 45 | 51 | 52 | 53 | 54 wl2ts{7lifels[2fs Exercitiul 2.11.19 Se considerd protectul Activitatea [ Durata | Activitatea precedente 1 z 2 6 T 3 a a 12 3 i0 2.3 6 2 2.3 7 7 T 8 10 457 9 3 68 1. Determinafi drumul critic aplicénd metoda potenfialelor si construifi diagramele Gantt 2, Determinafi momentele cele mai devreme de incepere a activitifilor utilizénd algebra de ordonantare.

You might also like