Sunteți pe pagina 1din 107

Curs nr.

1 NOIUNI INTRODUCTIVE
Teoria grafurilor, la nceputurile ei, s-a dezvoltat paralel cu algebra. Grafurile au multiple aplcaii practice, fiind strns legate de multe ramuri ale matematicii (cercetri operaionale, teoria grupurilor, teoria numerelor), dar sunt folosite i ca modele matematice n rezolvarea unor probleme tehnice, economice, etc. Studiul grafurilor i are originea n lucrrile lui Euler din 1736, n care studia problema podurilor de la Knigsberg. Oraul Knigsberg se afl aproape de punctual de vrsare a rului Pregolea n Marea Baltic. Rul are pe teritoriul oraului dou brae confluente iar n punctual de confluen se afl o insul, numit Curtea Hanului1. Aceast insul este legat de maluri prin cinci poduri. Peste fiecare bra al rului mai exist cte un pod. Problema care a aprut cerea s se gseasc un traseu continuu care s treac o singur dat pe fiecare din cele apte poduri.(vezi figura 1.) Euler a fost primul care a artat c aceast problem nu are soluie. Fig.1.1.

Prima carte de teoria grafurilor a fost publicat de D. Knig n 1936, Theorie der endlichen und unendlichen Grphen, urmat de cartea lui C. Berge n 1957 Thorie des graphes et ses applications.
1

H. R. Radian, T. J. Radian, Recreaii matematice, Editura Albatros, Bucureti, 1973.

Fie X o mulime finit nevid, X={x1, x2 ,,xn }. Se numete graf o pereche G = (X, U) format din mulimea X de vrfuri sau noduri i din mulimea U={u1, u2, , um } de perechi de vrfuri numite arce sau muchii. Reprezentarea grafurilor poate fi fcut n diferite moduri n funcie de cine este utilizatorul. Dac este calculatorul, este de preferat ca graful s fie dat cu ajutorul matricei sale de adiacen. Altfel, oamenii, prefer vizualizarea grafului sub forma unei colecii de puncte legate prin linii, ceea ce implic darea unor informaii geometrice despre graf. Cardinalul mulimii X, se noteaz |X|, i se numete ordinul grafului G. n cele ce urmeaz vom lucra numai cu grafuri finite. n mulimea U putem avea mai multe perechi identice. Dac numrul lor nu depete un numr natural q, spunem c G este un q-graf Un 1-graf se mai numete i graf orientat. n aceast situaie U este o submulime a produsului cartezian X X . Atunci orice element u U este o pereche ordonat, de forma u = ( x, y ), cu x, y X i l numim arc. Vrful x se numete extremitatea iniial iar vrful y se numete extremitatea final. n acest caz vrfurile x i y se numesc adiacente. n cazul n care nu tinem cont de orientarea arcelor, atunci (x, y) nu mai este o pereche ordonat. Deci, U va fi format din submulimi ale mulimii X, cu dou elemente, {x, y}, sau cu un singur element {x}. n aceast situaie ele se vor numi muchii, respectiv bucle. Dac graful G nu are bucle i nu conine dou muchii egale(egalitate ca mulimi), adic U este o submulime a mulimii prilor mulimii X, cu dou elemente, atunci perechea G = (X, U) se numete graf simplu sau neorientat. Definiia 1.1. Fie G = (X, U) un graf , x X un vrf al su. i) Mulimea
x
+

= { y X / (x, y) U }

se numete mulimea succesorilor vrfului x. Deci orice element y x se numete succesor al vrfului x. n cazul grafurilor orientate, x numete semigradul exterior al vrfului x i-l notm cu d+x. ii) Mulimea
+

se

x = { y X / ( y, x) U }
se numete mulimea predecesorilor vrfului x. Deci orice element y x se numete predecesor al vrfului x. n cazul grafurilor orientate, x numete semigradul interior al vrfului x i-l notm cu iii) Mulimea

se

dx-.

+ x

se numete mulimea vecinilor vrfului x sau a vrfurilor adiacente cu vrful x. n cazul grafurilor orientate, dx = d+x + d x se numete gradul vrfului x. n cazul grafurilor neorientate, gradul unui vrf x este este numrul muchiilor pentru care x este o extremitate, deci: 1 + d x = (d + x + d x ) = x = x . 2 Definiia 1.2. Fie G = (X, U) un graf i A X . i) Mulimea

+ ( A) = {u U / u = (a, x), a A, x X \ A}.


se numete mulimea arcelor incidente cu A ctre exterior. ii) Mulimea

( A) = {u U / u = ( x, a), a A, x X \ A}.

se numete mulimea arcelor incidente cu A ctre interior. Mulimea arcelor incidente cu A este mulimea:

( A) = + ( A) ( A).
Definiia 1.3. Fie G = (X, U) un graf i = (u1 , u 2 ,..., u q ) un ir de arce. i) Dac irul are proprietatea c extremitatea final a arcului u i coincide cu extremitatea iniial a arcului u i +1 , atunci se numete drum. Numrul de arce care compun un drum se numete lungimea drumului, n cazul nostru lungimea fiind q. Un drum se numete elementar dac nu folosete de dou ori acelai vrf, iar dac nu folosete de dou ori acelai arc se numete simplu. Dac extremitatea final a arcului u q coincide cu

extremitatea iniial a arcului u1 , drumul se numete circuit. ii) Dac irul are proprietatea c o extremitate a arcului u i coincide cu o extremitate a arcului u i +1 , iar cealalt extremitate a arcului u i +1 coincide cu o extremitate a arcului u i + 2 , atunci se numete lan. Numrul de arce care compun un lan se numete lungimea lanlui, n cazul nostru lungimea fiind q. Un lan se numete elementar dac nu folosete de dou ori acelai vrf, iar dac nu folosete de dou ori acelai arc se numete simplu. Dac o extremitate a arcului u q , necomun cu arcul u q 1 , coincide cu o extremitate a arcului u1 , necomun cu arcul u 2 , lanul se numete ciclu. n cazul grafurilor neorientate cele dou noiuni, de lan i drum, coincid. Definiia 1.4. Fie G = (X, U) un graf A X , V U , o submulime de vrfuri, respectiv arce. i) Subgraful generat de submulimea de vrfuri A este un graf, G ( A) = { A,U ( A)}, unde U ( A) = {u U / u = ( x, y ), x, y A}.

ii) Graful parial al unui graf G, generat de submulimea de arce V, este graful G= (X, V), adic graful care are aceleai vrfuri ca i G dar arcele sale sunt din mulimea V. Definiia 1.5. i) Fie G = (X, U) un graf. El este tare conex dac pentru oricare dou vrfuri x, y X exist un drum de la x la y i un drum de la y la x. O component tare conex a grafului G este un subgraf G(A) al lui G, cu A X , care este tare conex i este maximal fa de aceast ptoprietate n raport cu incluziunea.(Acest lucru nseamn c dac lum x X \ A, subgraful lui G, generat de B = A {x}, G ( B ), nu mai este tare conex). ii) Un graf G este conex dac pentru orice dou vrfuri diferite, x, y X , putem gsi un lan care s aib ca extremiti aceste dou vrfuri. O component conex a grafului G este un subgraf G(A) al lui G, cu A X , care este conex i este maximal fa de aceast ptoprietate n raport cu incluziunea.(Acest lucru nseamn c dac lum x X \ A, subgraful lui G, generat de B = A {x}, G ( B ), nu mai este conex). Fie G = (X, U) un graf. Pe mulimea X definim urmtoarea relaie binar: x ~ y dac i numai dac x = y sau exist un drum de la x la y i un drum de la y la x. Aceast relaie este o relaie de echivalen, iar clasele de echivalen ale acestei relaii de echivalen sunt componentele tare conexe ale grafului G. Dac pe mulimea X definim urmtoarea relaie binar: x y dac i numai dac x = y sau exist un lan care are ca extremiti pe x i y, atunci aceast relaie este o relaie de echivalen, iar clasele de echivalen ale acestei relaii de echivalen sunt componentele conexe ale grafului G. tim c o relaie de echivalen determin pe mulimea pe care a fost dat o partiie, deci componentele conexe si tare conexe ale unui graf definesc o partiie pe mulimea de vrfuri X. Definiia 1.6. Fie G = (X, U) un graf, x X un vrf dat. Definim

2 x = { y x } = x (x ),..., k x = x ( ( k 1) x ) ,

iar
+ + x = {x} x 2 x ... o submulime a mulimii X format din x i din toate vrfurile care se gsesc pe drumuri care pleac din x. Cu aceste notaii definim aplicaia:

: X X , ( x) = x
i obinem graful G = ( X , ), numit nchiderea tranzitiv a grafului G.

Definiia 1.7. Fie G = (X, U) un graf, x X un vrf dat. Definim

2 x = { y x } = x (x ),..., k x = x ( ( k 1) x ) ,
iar
x = {x} x 2 x ... o submulime a mulimii X format din x i din toate vrfurile care se gsesc pe drumuri care se termin n x. Cu aceste notaii definim aplicaia:

: X X , ( x) = x i obinem graful G = ( X , ), numit nchiderea tranzitiv invers a grafului G.

Folosind notaiile de mai sus, pentru orice dou vrfuri x, y X , definim relaia binar: x y x y i y x x y y ,

care este o relaie de echivalen. Atunci, clasa de echivalent a vrfului y este C ( y ) = y y , adic tocmai componenta tare conex a vrfului y. Definiia 1.8. Un graf orientat G = (X, U) este complet, dac orice dou vrfuri sunt legate printr-un arc sau dou arce n sensuri opuse, adic pentru orice x, y X , avem ( x, y ) U ( x, y ) U . Dac graful nu este orientat, atunci el este complet dac i numai dac orice dou vrfuri sunt unite printr-o muchie. n figura 1.2. avem graful neorientat complet de ordin 5, K5. Fig. 1.2.
1

Definiia 1.9. Fie G = (X, U) un graf. Fie A X o submulime de varfuri ale grafului G. A este o clic a grafului G dac subgraful generat de A, G(A), este complet.

Curs nr. 2 DRUMURI OPTIME NTR-UN GRAF


1. Matrice asociate unui graf Fie G = (X, U) un 1-graf (sau graf orientat), cu X = {x1, x2 ,., xn } mulimea vrfurilor sale. Acestui graf i se asociaz o matrice A = ( ai , j ) i , j =1,n Mn (), astfel:

1, dac xi i x j sunt adiacente, adic ( xi , x j ) U , aij = 0, altfel.


Dac avem o bucl ( xi , xi ) U, atunci aii = 1, n caz contrar aii = 0. Aceast matrice se numete matricea de adiacen asociat grafului G. Folosind programul Mathematica 4, putem da un graf cu ajutorul matricei sale de adiacen astfel:
<< D s r t M t ` o b n t r c ` iceeahCmiaoia ,1 ,1 ,0 < ,0 ,1 ,0 < ,1 ,0 ,0 < ,0 ,0 ,0 < ,0 ,0 ,0 < a= 880 ,0 ,0 ,1 ,81 ,1 ,0 ,0 ,81 ,0 ,0 ,1 ,80 ,0 ,0 ,0 ,81 ,0 ,1 ,1 , 80 ,1 ,0 ,1 ,80 ,1 ,1 ,0 ,0 ,0 ,0 < ,0 ,1 ,0 << S o L b l d r p @G a h a e t c s C m l t G a h 7 h w a e e G a h r p @ ,V r i e @ o p e e r p @ DDDD

Graful rezultat este:

2 1

Sau
< DsrtMt`obntrc` < iceeahCmiaoia

Graful rezultat avnd forma:

,1 ,1 ,0 < ,0 ,1 ,0 < ,1 ,0 ,0 < ,0 ,0 ,0 < ,0 ,0 ,0 < a=880 ,0 ,0 ,1 ,81 ,1 ,0 ,0 ,81 ,0 ,0 ,1 ,80 ,0 ,0 ,0 ,81 ,0 ,1 ,1 , 8 ,0 ,0 ,0 < 8 ,0 ,1 ,0 < 0 ,1 ,0 ,1 , 0 ,1 ,1 ,0 < S o G a h G a h a e t c s C m l t G a h 7 DD,D r c e D h w r p @ r p @ ,V r i e @ o p e e r p @ D i e t d

* * * Pentru grafuri neorientate matricea de adiacen este dat astfel:

1, dac exist muchie ntre xi i x j , aij = 0, altfel.


n aceast situaie matricea A este o matrice simetric cu coeficieni reali, a crei urm este zero. Fiind simetric si cu coeficieni reali ea admite valori proprii reale. Deoarece elementele matricei A corespund, de fapt, unei numerotri arbitrare a vrfurilor, este interesant de gsit proprietile care sunt invariante fa de schimbarea liniilor si coloanelor n funcie de numerotarea aleas. Definiia 2.1.1. Vom numi spectrul grafului G=(X, U), mulimea SpecG = {l1 >l2 >>lp / PA (li) = 0, li valoare proprie de ordin de multiplicitate mi }, unde PA( ) este polinomul caracteristic al matricei A. Putem reprezenta spectrul unui graf sub forma unei matrice S M2,p (), 2 ... p . SG= 1 m m ... m 2 p 1 Exemplul 2.1.2. Pentru graful neorientat complet de ordin cinci, K5 , matricea de adiacen este: 0 1 1 1 1 1 0 1 1 1 4 1 A = 1 1 0 1 1 , iar S K 5 = 1 3 . 1 1 1 0 1 1 1 1 1 0

Numim valori proprii pentru graful neorientat G valorile proprii corespunztoare matricei sale de adiacen A iar polinomul caracteristic PA(l) ataat matricei de adiacen A va fi polinomul caracteristic al grafului neorientat G, notat la fel:
PA(l) = ln - 1ln-1 + 2ln-2 - 3ln-3++(-1)nn ,

unde i reprezint suma minorilor principali ai matricei A, de ordin i. Polinomul caracteristic al matricei de adiacen A ne poate da diverse informaii despre graful studiat, dup cum vom vedea n cele ce urmeaz.
Propoziia 2.1.3. Fie G=(X, U) graf neorientat , A matricea sa de adiacen i PA(l) polinomul caracteristic asociat. Atunci: a) 1 = 0; b) 2 = - |U| = i j ;
i j

c) - 3 = 2N, N este numrul triunghiurilor care pot fi formate cu vrfurile grafului G. Demonstraie: a) tim c 1 = Tr A = 0. b) Deoarece i este suma minorilor principali ai matricei A, de ordin 0 1 , i, avem c 2 este suma tuturor minorilor de ordin doi de forma 1 0 `
2 care sunt n numr de C n . Un astfel de minor, care are valoarea -1, corespunde fiecrei perechi de vrfuri adiacente din graf. Atunci avem c 2 =- |U|, iar ultima relaie rezult folosind relaiile lui Vite. c) Minorii principali de ordin trei ai matricei A sunt de forma:

0 1 1 0 1 0 0 1 1 1 0 1, 1 0 0, 1 0 0 , 1 1 0 0 0 0 1 0 0

primul avnd valoarea 2 iar ultimii doi sunt nuli. Acest minor nenul corespunde unui triunghi pe care-l putem forma cu vrfurile grafului. Deci -3 = 2N.
Propoziia 2.1.4. Fie G=(X, U) un graf neorientat. Atunci numrul drumurilor de lungime l din G care unesc vrfurile xi cu xj , xi x j , este dat de elementul aflat pe poziia (i,j) din matricea Aq, unde A este matricea de adiacen a grafului G. Demonstraie: Prin inducie dup q. Pentru l=0, deoarece A0 =I, afirmaia este adevrat. Pentru q=1, Aq=A, obinem matricea de adiacen, deci afirmaia este adevrat. Presupunem afirmaia adevrat pentru q i o demonstrm pentru q+1. Avem: n n n (q) A ( A q +1 ) ij = aik ( q 1) a kh a hj . A q +1 = A q A = aik a kj k =1 h =1 k =1 i , j =1,n

n cazul nostru, din ipoteza de inducie,

a
k =1

( q 1) ik

a kh reprezint numrul

tuturor drumurilor de lungime q ntre xi i xh. Dac xh este adiacent cu xj atunci ahj =1, altfel ahj =0 i pentru h{1,2,,n} vom obine toate drumurile de lungime q+1 dintre i i j.
Definiia 2.1.5. i) Numrul muchiilor pe care le are cel mai scurt drum dintre xi i xj se numete distana n graful neorientat i conex G dintre vrfurile xi i xj. ii) Se numete diametru al grafului neorientat i conex G cea mai mare distan dintre oricare dou vrfuri ale grafului dat. Propoziia 2.1.6. [Biggs] Fie G=(X, U) un graf conex neorientat cu n vrfuri i de diametru . Atunci graful G are cel puin +1 valori proprii distincte.

Demonstraie. Fie A matricea de adiacen a grafului G i fie xi, xj X, dou vrfuri ale grafului G, astfel nct exist ( xi , xi1 ), ( xi1 , xi2 ),..., ( xi 1 , xi ), cu xi = xj , drum de lungime ntre xi i xj .

poziia (i, ik) un element nenul, iar matricele I, A,, Ak-1 pe aceeai poziie, (i, ik), au zero. ntr-adevr, deoarece drumul dintre xi i xj este cel mai scurt, de lungime , rezult c drumul dintre xi i xik , de lungime k, k , este cel mai scurt. Dac pe poziia (i, ik) din matricea Ak-1 avem un element nenul, rezult c ntre xi i xik avem un drum de lungime k-1, deci nseamn

Pentru orice k 1, , vom considera matricea Ak. Deoarece ntre xi i xik avem cel puin un drum de lungime k, rezult c n Ak vom avea pe

c putem elimina un vrf din irul { xi , xi1 ,..., xik } i atunci ntre xi i xj vom avea un drum de lungime strict mai mic dect , fals. Din cele de mai sus, rezult c matricele {I, A,, A } sunt liniar independente n Mn (), deci polinomul caracteristic are cel puin +1 valori distincte. ntr-adevr, dac am avea t valori proprii distincte, cu t< +1, atunci polinomul minimal al matricei A ar avea gradul t. De aici rezult c matricele {I, A,, At} ar fi liniar dependente, fals.

Curs nr. 3 DRUMURI OPTIME NTR-UN GRAF (continuare)

Propoziia 2.1.7. a) Fie G un graf neorientat cu n vrfuri . Atunci graful G este conex dac i numai dac matricea (A+I)n-1 nu are nici un element nenul. b) Dac G este un graf neorientat, cu n vrfuri i cu m muchii, care are valorile proprii l1 l2 ln, atunci avem: i) ii)

i =1

i =1 n

=0;
= 2m ;

2 i

iii) 1

2m(n 1) . n

Demonstraie: a) Presupunem c graful G este conex. Rezult c ntre orice dou vrfuri avem un drum. Fie X={x1,x2,,xn} vrfurile grafului. Fie d diametrul grafului. Atunci ntre orice dou vrfuri, xi i xj, exist un drum care are lungimea maxim d n 1, l pe care o notm lij. Atunci matricea A ij va avea pe poziia (i,j) un element nenul. Deci, n matricele A, A2,..., Ad nu exist o poziie (i,j) care s fie nul n toate aceste d matrice, dect dac i = j. Atunci n matricele I, A, A2,..., Ad nu exist o poziie (i,j) care s fie nul n toate, deci (A+I)n-1 nu are nici un element nenul. Reciproc, deoarece (A+I)n-1, are numai elemente nenule, avem c ntre orice dou vrfuri distincte ale grafului G avem un drum. Dac nu ar fi aa, pentru orice t 1, n 1 , At ar avea pe poziia (i, j) element nul, fals. b) Afirmaia i) este evident.
2 ii) Avem c 0 = (1 + 2 + ... + n ) = 1 + 2 + ... + 2 + 2 i j , de une rezult 2 n 2 i j =1 n

c + + ... + = 2m. iii) Folosim inegalitatea Cauchy-Schwarz pentru numerele reale (l2 ln) i (1,1,,1). Rezult
2 1 2 2 2 n

n n n 2 2 2 i i (n 1) 1 2m 1 (n 1) 1 [1 + (n 1)] 2m(n 1) i=2 i=2 Demonstra 2m(n 1) 2 . 1 n ia este astfel ncheiat.

Definiia 2.1.8. a) Dou grafuri G=(X, U), i G=(X, U) se numesc izomorfe dac i numai dac exist f : X X ' aplicaie bijectiv astfel nct aplicaia g : U U ' , g (uij ) = u 'ij , unde uij = (xi , x j ) U i u 'ij = ( f ( xi ), f (x j )) U ' s fie o bijecie. b) Dac G=(X, U) este un graf, se numete automorfism al lui G o aplicaie bijectiv f : X X cu proprietatea c exist aplicaia g : U U , definit ca la punctul a), care s fie bijecie. Mulimea automorfismelor grafului G formeaz, n raport cu operaia de compunere a aplicaiilor, un grup, numit grupul automorfismelor grafului G i notat Aut(G). Dou grafuri izomorfe au aceeai matrice de adicen, deci aceleai valori proprii i acelai polinom caracteristic, dar exist i grafuri neizomorfe care au aceeai proprietate Definiia 2.1.9. Dou grafuri se numesc cospectrale dac sunt neizomorfe i au aceleai valori proprii cu aceleai ordine de multiplicitate. Un exemplu de 2 grafuri cospectrale a fost dat n 1971 de Cvetkovi. Urmtoarele dou grafuri cu 6 elemente, din figura 2, sunt neizomorfe, conexe, cospectrale si au acelai polinom caracteristic P(l)=l6-7l4-4l3+7l2+4l-1[Biggs]: Fig. 2.1.

Definiia 2.1.10. Un graf se numete regulat de grad p dac gradul oricrui vrf al su este p. Propoziia 2.1.11. [Biggs] Fie G = (X,U) un graf regulat de ordin p. Sunt adevrate afirmaiile: i) p este valoare proprie pentru graful G. ii) Dac G este conex, atunci p este valoare proprie de multiplicitate 1. iii) Valoarea proprie p este cea mai mare, adic pentru orice l, valoare proprie a grafului G avem |l| p. Demonstraie. i) Fie G=(X, U), X = n , w=(1,1,...,1)tMn,1 () i A matricea de adiacen a grafului G. Deoarece graful este regulat de grad p, avem c suma elementelor de pe fiecare linie (coloan) din A este p, deci Aw=pw, de unde rezult c p este valoare proprie pentru A i w este vector propriu.

ii) Fie uMn,1 () un vector nenul astfel nct Au=pu, u=(u1,u2,,un).


Presupunem c uj = max ui . Din Au=pu rezult c pu j = a jk uk . De aici obinem c
n

pu j = uk , I {1, 2,..., n} , I este mulimea indicilor poziiilor de pe linia j unde avem 1


k I

i =1, n

k =1

n matricea de adiacen. Se observ c I = p . Datorit maximalitii lui uj, rezult c

uj=uk ,"kI, deci p+1 elemente din vectorul u sunt egale. n cazul n care graful G este conex, repetnd procedeul, rezult c u1 = u2 = = un. ntr-adevr, pentru k I , avem c uk = ut, pentru orice t I 1 , cu I1 mulimea indicilor poziiilor de pe linia t unde avem 1 n matricea de adiacen, .a.m.d. Avem atunci c u = w , deci subspaiul corespunztor valorii proprii p are dimensiunea 1. iii) Presupunem Ax = lx, x 0, xMn,1 () i fie xj = max xi . Cu notaiile
de la punctul ii), avem urmtoarea relaie

x j = xk ,
k I

i =1, n

deci

xj =

x
kI

x k p x j p.
kI

Propoziia 2.1.12. (Hoffman 1963) Graful G=(X,U) este conex i regulat de ordin p dac i numai dac exist r i a0, a1,...,ar astfel nct E=a0I+a1 A++arAr, unde E = (eij ) i , j =1,n , eij=1, " i,j = 1, n , iar A este matricea de adiacen a

grafului G.
Demonstraie. Presupunem c E=a0I+a1 A++arAr . Vom nota cu dj gradul
n n

vrfului xj. Obinem:

aik ekj = di i
k =1

e
k =1

ik

akj = d j . Se observ c AE=EA, de unde

obinem c di=dj, "i, j 1, n arbitrari alei, deci graful este regulat. Presupunem c G nu este conex. Atunci exist dou vrfuri xi i x j care nu sunt adiacente i ntre care nu exist nici un drum. De aici rezult c pe poziia (i, j) din Ak avem zero pentru orice k 0. Atunci orice expresie de forma a0I+a1 A++akAk va avea un zero pe poziia (i, j) i deci nu poate fi matricea E. Reciproc, presupunem c graful G este conex i regulat de grad p. Atunci p este valoare proprie pentru G de ordin de multiplicitate 1. Polinomul minimal al matricei A va fi de forma PA(l )= (l - p)Q(l), deci AQ(A)=pQ(A) . Rezult c fiecare coloan a matricei Q(A) este vector propriu al grafului G, corespunztor valorii proprii p, deci este de forma i w, i = 1, n , w = (1,1,...1) , i 0 i deoarece Q(A) este o matrice simetric, rezult c i = , i = 1, n , deci Q(A) = E.

Definiia 2.1.13. Matricea A = (aij ) i , j =1,n Mn () se numete circular

dac i numai dac aij = a1, k-1 unde k j-i+1mod n , k {1,2, , n}. Dac se cunoate prima linie ntr-o matrice circular, atunci putem determina orice alt linie i pornind de la aceasta, mutnd ultimele i-1 elemente ale liniei 1 (de la n pn la n-i+1) n fa. Se procedeaz astfel: se mut elementul de pe poziia n n faa celui de pe poziia 1, apoi elementul care era pe poziia n-1 (i care acum este pe poziia n) se trece n faa celui care are actuala poziie 1 (i care iniial avea poziia n), .a.m.d. Vom nota cu C matricea circular care are prima linie (0,1,0,...,0).
Propoziia 2.1.14. Fie A Mn () o matrice circular a crei prim linie este (a1, a2,, an). Atunci avem:

a) A = a j C j 1 ;
j =1

b) Valorile proprii sunt i = a j ( j 1) i , unde 1, ,..., n 1 sunt rdcinile de


j =1

ordin n ale unitii.


Demonstraie. a) Notm cu L1, L2,..., Ln liniile matricei C. Se observ c Cn=In iar matricea Cj, j= 1, n se obine din matricea C mutnd primele j-1 linii la sfrit. De exemplu C2 va avea prima linie pe L2, linia 2 pe L3 i ultima linie pe L1. C3 va avea prima linie pe L3, linia 2 pe L4, penultima pe L1 i ultima pe L2, .a.m.d. b) Din Cn=In rezult c Cn-1+Cn-2+...+C+In =0, deci valorile proprii ale matricei C sunt rdcinile de ordin n ale unitii. Atunci vom avea c Cj-1x= j 1 x, j =1, n , cu
x Mn,1 (). Obinem
n

Ax = ( a j C
j =1

j 1

) x, deci

Ax = ( a j j 1 ) x . Rezult c
j =1

= a j j 1 este o valoare proprie pentru rdcina de ordin n a unitii. Lund


j =1

toate rdcinile de ordin n ale unitii, i , vom obine relaia din enun
Definiia 2.1.15. Un graf G=(X,U) se numete circular, dac matricea sa de adiacen este circular. Din cele de mai sus, rezult c pentru un graf circular valorile proprii sunt:

i = a j ( j 1)i , i = 0, n 1 .
j =2

Deorece matricea unui graf circular este simetric, rezult c valorile sale proprii sunt reale i nu n mod necesar distincte. Ca exemplu, avem graful complet Kn, care este circular i care are ca valori proprii 1 = n 1, simpl i 2 = 1, multipl de ordin n-1.

Definiia 2.1.16. Fie G=(X,U) un graf. Graful linie, L(G), asociat lui G este graful ce are ca mulime de vrfuri mulimea U iar dou vrfuri in L(G) sunt unite printro muchie atunci cnd muchiile corespunztoare n G au n comun un vrf.

Fie G=(X,U) un graf cu X= {x1 , x 2 , ... , x n }, U = {u1 , u 2 ,..., u m } . Vom defini matricea F= ( f ij ) i =1,n Mn x m(),
j =1, m

1, dac xi este o extremitate a muchiei u j , fij = 0, altfel.

Propoziia 2.1.17. [Biggs] Dac A este matricea de adiacen a grafului G i AL matricea de adiacen a grafului L(G), atunci avem: i) FtF = AL+2Im; ii) Dac G este regulat de ordin p, atunci FFt = A+pIm. Demonstraie. i)

(F F ) = f
t m ij k =1

ki

f kj . De aici rezult c elementele

(F F )
t

ij

reprezint numrul de vrfuri xk ce sunt incidente cu muchiile ui i uj , adic tocmai elementul (aij)L, pentru i j . De aceea, cnd i = j, ( F t F ) ii reprezint numrul de vrfuri xk ce sunt incidente cu muchiile ui , deci avem 2 pe diagonala pricipal.

ii) Avem ( FF t ) ij = f ik f jk , deci elementele ( FF t ) ij reprezint acele muchii uk


k =1

care au ca extremiti vrfurile xi i xj , adic tocmai elementul aij, pentru i j . Pentru i = j, elementul ( FF t ) ii reprezint numrul muchiilor uk care pleac din vrful xi, adic tocmai gradul vrfului care este p, deci pe diagonala principal vom avea p.
Propoziia 2.1.18. Dac l este o valoare proprie pentru graful linie L(G), atunci l -2. Demonstraie. Matricea FtF este pozitiv definit, deci valorile proprii ale matricei FtF sunt pozitive. Dar AL=FtF-2In i obinem c t det ( AL I n ) = det F F ( + 2)I n , deci valorile proprii ale lui AL sunt -2.

EXERCIII Exerciiul 1. Fie EMn(), E = (eij )i , j =1, n , eij=1, " i,j = 1, n . Dac G=(X,U) este

un graf regulat de grad p i A matricea sa de adiacen, atunci AE=EA=pE.

Exerciiul 2. Cu notaiile de mai sus, fie G=(X,U) un graf regulat de grad p, conex cu X = n i p>l1>>lt-1, valorile sale proprii distincte. Dac notm Q(l) =

( ) vom avea:
i i =1

t 1

n E = Q( p) Q( A) . Rezolvare. Avem relaia Q(A) = E, cu . Valorile proprii corespunztoare matricei Q(A) sunt Q(p)sau Q(li) , i = 1, t 1 . Dar Q(li) = 0, pentru i =

1, t 1 . Singura valoare proprie nenul a matricei E este n ( Demonstrai acest Q( ) lucru! ), deci n = Q( ) de unde rezult = . n
Exerciiul 3. Vom nota cu C matricea circular care are prima linie (0, 1, 0,,0). S se arate c valorile proprii ale acestei matrice sunt rdcinile de ordin n ale unitii: 1, ,..., n 1 .

Curs nr. 4

DETERMINAREA MATRICEI DRUMURILOR INTRUN GRAF. DETERMINAREA COMPONENTELOR TARE CONEXE


n cele ce urmeaz ne vom ocupa de grafuri orientate sau de 1-grafuri. Fie G=(X,U) un graf i A matricea sa de adiacen. Definiia 2.1. Matricea drumurilor grafului G, notat A* = a*ij astfel:

( )

i , j =1, n

, este definit

(a ) =
* ij

1, dac exist n graf un drum ce pleac din xi i ajunge n x j ,

0, n caz contrar.

Folosind programul Mathematica 4, vom da un graf cu ajutorul matricei sale de adiacen.


<< DiscreteMath`Combinatorica`

Graful rezultat este:

a=881 ,0 ,0 ,1 ,80 ,1 ,0 ,0 ,81 ,0 ,0 ,1 ,80 ,0 ,0 ,0 ,81 ,0 ,1 ,1 , ,0 ,1 ,0 < ,1 ,1 ,0 < ,1 ,0 ,0 < ,0 ,0 ,0 < ,0 ,0 ,0 < 80 ,1 ,0 ,1 ,80 ,1 ,1 ,0 ,0 ,0 ,0 < ,0 ,1 ,0 << S o L b l d r p @G a h a e t c s C m l t G a h 7 h w a e e G a h r p @ ,V r i e @ o p e e r p @ DDDD

Algoritmul lui WARSHALL Fie G=(X,U) un graf orientat cu X = n. Uneori este interesant de gsit, ntrun graf, dac exist un drum ntre dou noduri, mai mult dect a gsi distana minim dintre ele. Acest algoritm determin matricea drumurilor A* pornind de la matricea de adicen A. Descrierea algoritmului. Pasul 1. Se face k=1. Pasul 2. Pentru i = 1, n i j = 1, n , i, j k se nlocuiesc elementele aij = 0 cu min{aik, akj}. Pasul 3. Se face k = k+1 i se repet Pasul 2, pn cnd k ia valoarea n. Justificare. La Pasul k al algoritmului se obine o matrice M(k) care este matricea de adiacen a unui graf gsit la Pasul k-1, prin introducerea unui arc ntre dou vrfuri neadiacente, xi i xj, care erau legate printr-un drum de lungime 2, de la xi la xj i care trece prin xk . La sfrit, pentru k = n, se obine matricea A*. Elementul 1 de pe poziia (i,j) din matricea A* arat c ntre xi i xj exist un arc, deci la pasul n-1 ntre ele era un drum de lungime 2 care trecea prin x kn 1 . ntre xi i x kn 1 , la pasul n-1, a fost introdus un arc, pentru c ntre xi i x kn 1 era un drum de lungime 2 care trecea prin xk n2 , . a. m. d. Matricea M(k+1) se obine din matricea M(k) prin adugarea elementelor 1 de pe linia k pe aceeai poziie pe liniile care au pe coloana k elemental 1. Folosind programul Matematica 4 obinem urmtorul program:
Matrice@a_ListD@k_D := a ; k 0

Matrice1@a_ListD@k_D := Table@If@Hi kL && Hj kL && Ha@@i, jDD 0L, Min@a@@i, kDD, a@@k, jDDD, a@@i, jDDD, 8i, 1, Length@aD<, 8j, 1, Length@aD<D ; k > 0
MatriceFinala1@a_ListD := For@k = 0, k < Length@aD + 2, k++, If@k 0, aa = a, If@k Length@aD + 1, Return@aaD, aa = Matrice1@aaD@kDDDD
Rezultat@a_D := Print@"a=", MatrixForm@aD, " > A=", MatrixForm@ MatriceFinala1@aDDD;

Algoritmul lui Warshall ne d si o metod de determinare a componentelor tare conexe ntr-un graf. Cu ajutorul programului Matematika 4 acest lucru se face foarte usor, avnd o funcie special definit. Vom considera acelai graf ca mai sus:
<< DiscreteMath`Combinatorica`

Vom obine urmtoarele componente tare conexe:

StronglyConnectedComponents@Graph@a, Vertices@CompleteGraph@7DDDD

{{4}, {5,2,3,7,1},{6}} .

Algoritmul lui Warshall ne d i o metod de determinare a componentelor tare conexe ntr-un graf. O component tare conex a unui graf este un subgraf C al lui G care este tare conex i care este maximal n raport cu incluziunea fa de aceast proprietate. Dac G = (X, U) este un graf, relaia binar pe X definit prin : x = y sau exist un drum de la x la y i un drum e la y la x , este o relaie de echivalen. Notm cu C1, C2, ..., Cp clasele de echivalen n raport cu aceast relaie de echivalen. Acestea sunt de fapt componentele tare conexe ale grafului G. Cum oricrei relaii de echivalen i corespunde o partiie, rezult c ntr-un graf, componentele tare conexe definesc o partiie a mulimii X . Folosind notaiile din Introducere, fie + + x X , 1 x = { y X / ( x, y ) U }, 2 x = = + ( + x), ..., k+ x = + (k+1 x ), x = {x} 1+ x 2+ x ... . Graful G = ( X , ) se numete nchiderea tranzitiv a

grafului G, x este o submulime a mulimii X i din toate vrfurile care se gsesc pe drumuri posibile n graful G, drumuri care pornesc din x.
Vom defini 1 x = { y X / ( y, x) U } iar prin recuren k x = (k1 x ) . Definim nchiderea tranzitiv invers a grafului G ca fiind graful G = ( X , ) , unde

1 x = { x } 1 x 2 x ... , reprezint acele vrfuri care se gsesc pe toete drumurile posibile din G care se termin n x. Fie x, y X . Avem x y x y i y x x y i x y , care este o relaie de echivalen. Clasa de echivalen a vrfului y este tocmai componenta tare conex, C(y), definit de vrful y. Deci C ( y ) = y 1 y . n urma aplicrii algoritmului Warshall se obine matricea A*. Cu ajutorul acesteia se pot determina componentele tare conexe astfel: i) Se alege un vrf xi , se parcurge linia i coloana i din A* i se determin elementele neneule ct i poziiile lor. Elementele de pe linia i corespunztoare poziiilor nenule determin mulimea xi , iar cele de pe coloana i determin xi , deci C(xi) = x x .
i i

ii) Se suprim din graful dat elementele din C(x) i se continu procedeul. Folosind Maple 6, obtinem urmatorul program pentru algoritmul Warshall si pentru determinarea componentelor tare conexe, pentru graful a carui matrice de adiacenta este data mai jos: Exemplul 1. Algoritmul Roy-Warshall > with(linalg): > n:=7: > a:=matrix(n,n,[[0,0,1,0,0,0,0], > [1,0,0,0,0,0,0], > [0,1,0,0,0,0,0], > [1,1,0,0,1,1,0], > [0,1,1,0,0,1,1], > [0,0,1,1,0,0,0], > [0,1,0,0,0,1,0] > ]): > > for k from 1 to n do > for i from 1 to n do > for j from 1 to n do if i<>k and j<>k then b[i,j]:=max(a[i,j],min(a[i,k],a[k,j])):a[i,j]:=b[i,j]:fi: > od: > od:od: >

> print(`Matricea drumurilor este:`);

Matricea drumurilor este:

> print(a);

1 1 1 1 1 1 1

1 1 1 1 1 1 1

1 1 1 1 1 1 1

0 0 0 1 1 1 1

0 0 0 1 1 1 1

0 0 0 1 1 1 1

0 0 0 1 1 1 1

Exemplul 2. Determinarea componentelor tare conexe ce ajutorul algoritmului RoyWarshall > > > > with(linalg): > n:=7: > a:=matrix(n,n,[[1,1,1,0,0,0,0], > [1,1,1,0,0,0,0], > [1,1,1,0,0,0,0], > [1,1,1,1,1,1,1], > [1,1,1,1,1,1,1], > [1,1,1,1,1,1,1], > [1,1,1,1,1,1,1] > ]): > > w:={}:c:={}:nc:=0:t1:=table():s:={}: > for j from 1 to n do if member(j,s)=false then w:=w union{j}: > for i from 1 to n do > if > a[i,j]=1 and a[j,i]=1 and member(i,w)=false then w:=w union {i}:fi > od:nc:=nc+1: > t1[nc]:=w:c:=w:s:=s union c:w:={}:fi: > od:

> print(`Numarul componentelor tare conexe este:`); Numarul componentelor tare conexe este: > print(nc); > print(t1);

2
table([1 = { 1, 2, 3 }, 2 = { 4, 5, 6, 7 }])

> > Algoritmul lui Malgrange Acest algoritm determin componentele tare conexe ale grafului orientat G , pornind de la matricea sa de adiacen A. Pasul 1. Se determin x . Aceast mulime va fi reprezentat printr-un vector de lungime n n care n csua corespunztoare vrfului x vom pune zero. Cutm arcele ce pleac din x prin citirea liniei corespunztoare vrfului x. n poziiile unde gsim 1, pe aceleai poziii, vom pune 1 n vectorul x . Cutm n vrfurile marcate cu 1 i apoi cutm pe liniile lor din matricea A elementele egele
x

cu 1. Pe aceste poziii n x vom pune 2. La fel procedm cu vrfurile marcate cu 2. Pe liniile corespunztoare lor din A cutm poziiile marcate cu 1. n , aceste
x

poziii vor fi marcate cu 3, . a. m. d. Vrfurile care nu mai pot fi marcate prin acest procedeu vor primi semnul - n casia corespunztoare lor n x . Pasul 2. Se determin Cx. Aceast mulime va fi reprezentat printr-un vector de lungime n. Poziia corespunztoare vrfului x va fi marcat cu zero. Punem 1 pentru orice vrf de pe coloana vrfului x care are 1 i vare se afl n x . Pentru vrfurile xi care au fost marcate cu 1 n Cx punem 2 , n Cx, pe poziiile n care gsim elemente egale cu 1 pe coloanele corespunztoare lor din matricea A* i care se afl i n xi , . a. m.d. Gsim astfel Cx . Considerm x X C x i continum procedeul. Iat i algorimul, implementat n Maple, pe urmtorul exemplu:

> with(linalg): > n:=8: > a:=matrix(n,n,[[0,1,1,0,1,0,0,0], > [0,0,0,0,1,1,1,0], > [1,1,0,1,0,0,1,0], > [1,1,0,0,1,1,0,0], > [0,0,0,0,0,1,1,0], > [0,0,0,0,0,0,1,1], > [0,0,0,0,0,0,0,0], > [0,0,0,0,1,1,1,0]]): > for k from 1 to n do > for i from 1 to n do > for j from 1 to n do if a[i,j]=0 then a[i,j]:=a[i,k]*a[k,j]:fi: > od: > od: > od: > t:={}:nc:=0:t1:=table(): > for i from 1 to n do > c:={}:

>

if member(i,t)=false then nc:=nc+1: > s:={}: > for j from 1 to n do if a[i,j]=1 then s:=s union {j}:fi:od: > p:={}: > for j from 1 to n do if a[j,i]=1 then p:=p union {j}:fi:od: > c:=(s intersect p) union {i}: > t1[nc]:=c: > t:=t union c: > fi: > od: > print(`Numarul de componente tare conexe este:`);nc; > print(`Componentele tare conexe sunt:`); > tare_conexe:=copy(t1);

Numarul de componente tare conexe este: 4 Componentele tare conexe sunt: tare_conexe := table([1 = { 1, 3, 4 }, 2 = { 2 }, 3 = { 5, 6, 8 }, 4 = { 7 }])

Curs nr. 5

DRUMURI OPTIME INTR-UN GRAF


Fie G = ( X ,U ) un graf orientat. Fie L : U +, o funcie u L(U ) numit lungimea arcului u. Lungimea unui drum este egal cu suma lungimilor arcelor sale, iar distana minim dintre dou vrfuri este cea mai mic lungime a drumurilor dintre dou vrfuri. Vom defini matricele:
l ((xi x j )) daca (xi x j ) U D = (d ij )i , j =1,n , d ij = 0, x x i j

minime M = (mij )i , j =1,n :

D se numete matricea distanelor directe ale grafului G, i matricea distanelor

cea mai mic lungime a drumurilor de la xi la x j , dac acestea exist mij = 0, altfel

Algoritmul Roy- Floyd gsete matricea distanelor minime M pornind de la matricea distanelor directe D, ct i drumul minim. Descrierea algoritmului: Pasul 1: k = 1 Pasul 2: pentru i = 1, u , j = 1, u , i j , i k , j k elementul aij se nlocuiete cu min (aij , aik + akj) Pasul 3: k k+1 i se repet pasul 2. La sfrit obinem matricea M. Justificare: Prin inducie dup k.

Fixm dou vrfuri v i w ntre care vrem s calculm drumul de lungime minim. Vom defini un K-drum ntre v i w, un drum care s treac prin cel mult Knoduri intermediare (deci w este al k-lea nod). Vom nota cu P(K) afirmaia: la pasul K, aij = dmin (u,v) obinut la pasul 2 al algoritmului este distana minim a celui mai scurt k-drum dintre u i w (dac exist !), altfel este infinit (dac nu exist un astfel de drum). Presupunem P(K) adevrat i s vedem ce se ntmpl cu dmin (v,w) la pasul k+1. Presupunem c este un k+1 drum de la v la w. Sunt dou posibiliti, funcie dac conine sau nu vrful uk+1 = de la pasul k+1. i) dac este un k-drum, atunci ntrece prin nodul k+1 i atunci din ipoteza de inducie dmin (v,w) rmne egal cu lungimea drumului dup iteraia k. Este clar c dmin (v,w) nu poate fi schimbat la pasul k+1, deoarece nu avem k+1 drumuri. ii) Dac este un k+1 drum, presupunem c trece doar o dat prin vrful uk+1 (pentru c un ciclu ar face s creasc distana). Atunci este suma a dou k-drumuri, 1 i 2, 1 de la v la uk+1 i 2 de la uk+1 la w. Din ipoteza de inducie avem c dmin (v, uk+1) i dmin (uk+1,w) sunt lungimile drumurilor 1 i 2 la pasul k. Se observ c aceste distane nu se vor modifica la pasul k+1, deci lungimea drumului la pasul k+1 este suma celor dou drumuri 1 i 2 i este cea mai scurt. Pentru k = u - 1, avem c dup ce am terminat iteraia n, dmin (v,w) este cea mai mic distan a unui (n-1) drum de la v la w. Dar deoarece orice drum este un (n-1) drum, n cazul nostru, demonstrm c aij = dmin (v,w) este distana minim dintre v i w. Cu acest algoritm, putem obine i drumurile minime dintre vrfurile grafului. Definim o nou matrice = (ij)ij = 1,u ale crei ij P(X) (deci

ij sunt mulimi de noduri). Vrem s gsim drumul minim dintre v = xi i w = x j. ij va reprezenta mulimea vrfurilor vecine vrfurilor w care se gsesc pe drumuri de la v la w. Iniial, ij = {xi} dac aij < i ij = dac aij = . Pasul 1. Se face k = 1. Pasul 2. dac aij < aik + akj , atunci ij = ij; dac aij = aik + akj , atunci ij = ij kj; dac aij > aik + akj , atunci ij = kj,

pentru i j, i k, j k. Pasul 3. Se repet pasul 2 pentru k = 2,u. La sfritul aplicrii algoritmului ij va reprezenta mulimea vrfurilor vecine cu w ce se gsesc pe drumurile minime de la v la w. Aceste vrfuri vecine sunt date n ordine invers orientrii drumului. Folosind Maple 6 obtinem urmatorul program pentru algoritmul RoyWarshall Exemplul 1. > with(linalg): > > n:=8: > a:=matrix(n,n,[[0,1,3,5,infinity,infinity,infinity,infini ty], > [infinity,0,2,infinity,infinity,infinity,13,infinity], > [infinity,infinity,0,infinity,5,11,14,infinity], > [infinity,infinity,2,0,6,8,infinity,15], > [infinity,infinity,infinity,infinity,0,3,infinity,9], > [infinity,infinity,infinity,infinity,infinity,0,2,6],[inf inity,infinity,infinity,infinity,infinity,infinity,0,4],[ 3

infinity,infinity,infinity,infinity,infinity,infinity,inf inity,0]]): > > print(a): 0 1 3 5 0 2 13 0 5 11 14 2 0 6 8 15 0 3 9 0 2 6 0 4 0 > d:=array(1..n,1..n):for i from 1 to n do for j from 1 to n do d[i,j]:={}:od:od:for i from 1 to n do for j from 1 to n do if a[i,j]<infinity then d[i,j]:={i}:fi:od:od: { 1 } { 1 } { 1 } { 1 } { } { } { } { } { } {2} {2} { } { } { } {2} { } { } { } {3} { } {3} {3} {3} { } { } { } { 4 } { 4 } { 4 } { 4 } { } { 4 } { } { } { } { } { 5 } { 5 } { } { 5 } { } { } { } { } { } { 6 } { 6 } { 6 } { } { } { } { } { } { } { 7 } { 7 } { } { } { } { } { } { } { } { 8 } > c:=array(1..n,1..n):for i from 1 to n do for j from 1 to n do c[i,j]:={}: od:od: __

> for k from 1 to n do > for i from 1 to n do > for j from 1 to n do a[k,j]:=a[k,j]: d[k,j]:=d[k,j] : if j<>i and j<>k then > > if a[i,j]<a[i,k]+a[k,j] then c[i,j]:=d[i,j] else if a[i,j]=a[i,k]+a[k,j] then c[i,j]:=d[i,j]union d[k,j] else if a[i,j]>a[i,k]+a[k,j] then c[i,j]:=d[k,j]end if:end if:end if:

> if i=k and j=k then a[i,j]=a[i,j] else b[i,j]:=min(a[i,j],a[i,k]+a[k,j]):a[i,j]:=b[i,j]:fi:fi:od : a[i,k]:=a[i,k]:d[i,k]:=d[i,k]: > > od: > for i from 1 to n do > for j from 1 to n do if j<>i then d[i,j]:=c[i,j] else d[i,i]={xi} end if:od:od: > for i from 1 to n do > for j from 1 to n do if a[i,j]=infinity then d[i,j]:={}:fi: od:od: > od: > i1:=1:j1:=8: > print(`Matricea distantelor minime este:`);

Matricea distantelor minime este:


>

> print(a);

1 0

3 2 0 2

5 0

8 7 5 6 0

11 10 8 8 3 0

13 12 10 10 5 2 0

17 16 14 14 9 6 4 0

> print(`Distanta minima intre x1 si x8 este:`); Distanta minima intre x1 si x8 este: > print(a[i1,j1]):

17

> print(`Matricea care ajuta la determinarea drumurilor minime este:`): Matricea care ajuta la determinarea drumurilor minime este: > print(d);

{ 1 } { } { } { } { } { } { } { }

{1} {2} { } { } { } { } { } { }

{ 1, 2 } {2} {3} {4} { } { } { } { }

{1} { } { } {4} { } { } { } { }

{3} {3} {3} {4} {5} { } { } { }

{5} {5} {5} {4} {5} {6} { } { }

{6} {6} {6} {6} {6} {6} {7} { }

{ 5 , 6, 7 } { 5 , 6, 7 } { 5 , 6, 7 } { 6, 7 } { 5 , 6, 7 } { 6, 7 } {7} {8}

> p:=0:m:=array(1..n): for j from 1 to n do m[j]:=0 od: > for i from 1 to n do for j from 1 to n do if member(j, d[1,i])=true then p:=p+1:fi:od:m[i]:=p:p:=0:od: print(m): > [ 1, 1, 2, 1, 1, 1, 1, 3 ] > nrd:=1:v:=1:w:=1: > for i from 1 to n do nrd:=nrd*m[i]:od:print(`Numarul maxim de drumuri este:`):print(nrd): > Numarul maxim de drumuri este:

6
> vf:=table():q:=0:nod:={}: > for i from 1 to n do for j from 1 to n do if member(j,d[i1,i])=true then nod:=nod union {j}:fi:od:q:=q+1:vf[q]:=nod:nod:={}:od:print(vf): table([1 = { 1 }, 2 = { 1 }, 3 = { 1, 2 }, 4 = { 1 }, 5 = { 3 }, 6 = { 5 }, 7 = { 6 }, 8 = { 5, 6, 7 } ]) > mnod:=array(1..n,1..n):sw:=array(1..n,1..n):for i from 1 to n do for j from 1 to n do mnod[i,j]:=0:sw[i,j]:=0:od:od: > k:=j1:t2:=table():M:=0:nr:={j1}:r:=1:nm:=table(): > for j from 1 to n do for i from 1 to n do if member(i,vf[j1-j+1])=true then mnod[j1j+1,i]:=1:fi:od:od:for j from 1 to n do for i from 1 to n do sw[i,j]:=mnod[j,i]:od:od:print(sw):

1 0 0 0 0 0 0 0

1 0 0 0 0 0 0 0

1 1 0 0 0 0 0 0

1 0 0 0 0 0 0 0

0 0 1 0 0 0 0 0

0 0 0 0 1 0 0 0

0 0 0 0 0 1 0 0

0 0 0 0 1 1 1 0

> vec:={}:r:=i1:t4:=table():P:=1:h:=0:t5:=table():t8:=table ():Q:=0: > > ncol:=array(1..n):for i from 1 to n do ncol[i]:=0:od: for i from 1 to n do for j from 1 to n do if mnod[j,i]=1 then h:=h+1:ncol[i]:=h :fi :od:h:=0:od:for i from 1 to n do if ncol[i]>1 then Q:=Q+1 :t8[Q]:=i:fi:od: print(ncol):print(t8):print(Q): [ 4, 1, 1, 0, 2, 2, 1, 0 ]

table([1 = 1, 2 = 5, 3 = 6]) 3
> for j from 1 to n do for i from 1 to n do if mnod[i,j]=1 then r:=i:vec:=vec union {r}:next: fi:od:t4[P]:= vec:P:=P+1:vec:={}:od:print(vec):print(t4):

{ }
table([1 = { 1, 2, 3, 4 }, 2 = { 3 }, 3 = { 5 }, 4 = { }, 5 = { 6, 8 }, 6 = { 7, 8 }, 7 = { 8 }, 8={ } ])

> ind:=table():nq:=0:for i from 1 to n do if sw[i1,i]=1 then nq:=nq+1:ind[nq]:=i:fi:od:print(ind):print(nq): table([1 = 1, 2 = 2, 3 = 3, 4 = 4])

4
> P:=1:r:=1:t5:=table():A:={}: > for z from 1 to nq do for y from 1 to Q do l:=Q-y: if l>0 then for h from 1 to ncol[t8[l]] do for j from 1 to ncol[t8[l+1]] do for i from 1 to n do if sw[r,i]=1 then r:=i: vec:=vec union {r}:fi:od:if r<j1 then sw[i1,ind[z]]:=0:fi:t5[P]:= vec:if member(i1,t5[P])=true

and member(j1,t5[P])=true then A:=A union {t5[P]}:P:=P+1:fi:sw[t8[l+1],t4[t8[l+1]][j]]:=0:vec:={}:r :=1:od:for j from 1 to n do for i from 1 to n do sw[i,j]:=mnod[j,i]:od:od:sw[t8[l],t4[t8[l]][h]]:=0:od: sw[i1,ind[z]]:=0:fi:od:od:print(`drumurile minime sunt`):print(A): drumurile minime sunt
{ { 1 , 2 , 3 , 5 , 6 , 7 , 8 } , { 1 , 2 , 3 , 5 , 6 , 8 } , { 1 , 3 , 5 , 6 , 8 } , { 1 , 2 , 3 , 5, 8 } , { 1, 3 , 5 , 8 } , { 1, 3, 5, 6, 7, 8 } }

> > >

Curs nr. 6

DRUMURI OPTIME INTR-UN GRAF (continuare)

Algoritmul lui Dijkstra (pentru determinarea distanelor minime ntre dou vrfuri fixate). Spre deosebire de algoritmul lui Floyd, care determin distana i drumul minim dintre orice dou vrfuri ale unui graf dat, acest algoritm determin distana dintre dou vrfuri date u i v. n esen, algoritmul Dijkstra i propune s descopere minimul distanei dintre un vrf dat , considerat ca surs, ctre alte vrfuri n ordinea acestor distane minime, cu alte cuvinte, mai nti, ctre cel mai apropiat nod. Presupunem c am selectat cteva vrfuri n graful ntre care cunoatem distanele minime. Aceast mulime include mereu vrful surs n cazul nostru . Pentru un vrf neselectat v, vom considera lungimea celui mai scurt drum special, care este un drum ce pornete din vrful surs, trece doar prin nodurile selectate, iar la ultimul pas, sare din regiunea selectat (din mulimea vrfurilor selectate) ctre vrful v. Dac este un vrf selectat, voi nota cu d(u) lungimea celui mai scurt drum de la sursa ctre . Dac u nu este selectat, atunci d(u) este lungimea celui mai scurt drum special de la la u. La nceput singurul vrf selectat va fi u, deci d(u) = 0. Dac exist un arc de la u la u, atunci d(u) este chiar lungimea arcului (u,u). Observaie: Dac u este singurul vrf selectat, atunci singurele drumuri speciale sunt arcele ce pleac din u, deci d(u) = lungimea arcului (u,u), dac avem un astfel de arc. 1

d(u) =

l (u , u ' ), daca exista arc int re u si u ' , in caz contrar

Presupunem c S X este mulimea vrfurilor selectate. Fie v un vrf neselectat, astfel nct distana de la v la orice alt vrf neselectat s fie cea mai mic. Vrful v va fi selectat i atunci avem: 1) d(v) este cea mai mic distan de la u la v. 2) Vom adapta valoarea distanei (u) pentru toate vrfurile u care au rmas neselectate, innd cont c v este acum selectat. Aceast adaptare o vom face astfel: Vom compara d(u) cu d(v) + l(v,u). Dac d(v) + l(v,u) < d(u) se nlocuiete d(u) cu d(v) + l(v,u). Dac nu exist arc ntre v i u nu vom modifica d(u).

Justificarea algoritmului Dijkstra. Atenie ! Lungimile arcelor trebuie s fie pozitive, altfel acest algoritm nu merge. Fie S mulimea nodurilor selectate cu |S|= k. Vom face inducie dup k; vom face notaiile: i) ii) pentru fiecare nod selectat u, d(u) este cea mai mic distan de la u la u, iar drumul cel mai scurt este format doar din noduri selectate. pentru fiecare nod neselectat u, d(u) este cea mai mic distan a unui drum special de la u la u (poate fi dac un astfel de drum nu exist). Pentru k = 1, u este singurul nod selectat iar d(u) = 0 i satisface condiia i). Pentru orice alt nod u vom defini d(u) ca fiind lungimea arcului (u,u) dac exist i infinit n caz contrar, fiind astfel ndeplinit condiia ii). Presupunem c sunt ndeplinite condiiile i) i ii) dup ce am selectat k noduri i fie v al (k+1) lea nod selectat. Afirmm c i) rmne adevrat, deoarece d(v) este cea mai mic distan a unui drum ntre u i v. Dac nu s-ar ntmpla acest lucru, din condiia ii) a ipotezei de inducie cnd avem k noduri selectate, d(v) este cea mai mic distan a unui drum special de la u la v, i deci trebuie s fie un drum nespecial scurt ctre v. De aici avem c drumul trebuie neaprat s ias din mulimea de noduri selectat, ca n final s ajung n k. 2

Oricum, v este al (k+1) lea nod selectat, ceea ce nseamn c n aceast situaie d(u) poate s nu fie mai mic dect d(v), sau n plus vom selecta pe u ca fiind al (k+1) lea nod. Din condiia ii) a ipotezei de inducie, d(u) este lungimea minim al unui anumit drum ctre u. Atunci condiia i) este adevrat pentru (k+1) noduri, ceea ce nseamn c i) este adevrat i cnd includem pe v n mulimea de noduri selectate. Mai trebuie artat c relaia ii) este adevrat cnd includem pe v n mulimea de noduri selectate S. Considerm un nod u rmas neselectat dup ce v a fost indus n S. Pe un drum special ctre u, trebuie s existe un penultim nod care s poat fi v sau alt nod w. Mai nti, presupunem c penultimul nod este v. Atunci lungimea unui drum de la u la v este d(v) plus lungimea arcului (v,u). Dac penultimul nod este w, din ipoteza de inducie i), cel mai scurt drum de la u la w este format doar din acele noduri care au fost selectate naintea lui v i deci v nu apare n drum. Atunci lungimea celui mai scurt drum special ctre u nu se modific atunci cnd includem pe v n mulimea nodurilor selectate. Reamintim c, atunci cnd am selectat vrful v, se modific i d(u) ca fiind cea mai mic dintre vechea distan d(u) i d(v) + l(v,u), q.e.d. Dac drumul (x1,x2,x3,...,xn) are valoarea minim, atunci orice parte a sa (xb,...,xl) are, n mulimea drumurilor ce unesc pe xb cu xl valoare minim. Dem. Presupunem contrariul. Dac 1 = (xb,...,xl) nu este drum de valoare minim ntre xb i xl , vom considera un drum 2 cu valoare minim ntre xb i xl pe care l vom pune n locul lui 1 obinnd astfel ntre xm i xn un drum de valoare mai mic. Algoritmul Bellman Kalaba. (de determinare a drumului minim pornind de la matricea D). Fie G = (X,U) un graf cruia i atam matricea D = (dij) a distanelor directe. Fie vi valoarea minim a drumurilor in (i=1,u) existente de la vrful xi la vrful xu. vi = min i vn = 0. Conform principiului optimalitii, avem c: (*) vi = minji(vj + dij) j = 0,u , i = 0,u-1 i vn = 0

Problema gsirii valorilor minime ale drumurilor de la xi la xn (i x, i ...n 1) , .........la rezolvarea sistemului (*). Vom da o demonstraie inductiv.
K = 1 Vi1 = din i = Qu 1 Vn1 = 0

K = 2 Vi 2 = min (V j1 + d ij ), i = u 1, j = , u , Vu2 = 0.
j =i

La paxel K Vi k = min (V jk 1 + d ij ), i = u 1, j = u , Vnk = i


j i

Se

observ
k 1 j

Vi k Vi k 1 , i = 1, u .

ntr-adevr,

dac

avem

d ij + V

> Vi

k 1

, j , j i, atunci val. minim ar fi Vi k = d ii + Vi k 1 = Vi k 1 ,

Numerele Vi k formeaz un ir monoton descresctor, i u , K 1, u 1 , ajungem la un minim dup cel mult n-1 pai. Deci algoritmul ia sfrit atunci cnd gsim un K a.. Vi k = Vi k +1 , i = 1, u . Acest lucru nu asigur c: 1) Drumurile pariale, n drumul de lungime minim sunt minime. 2) Valoarea drumului minim ntre vrfurile x1 i xn este Vi k = Vi k +1 Putem determina i nodurile care fac parte din drumul minim astfel. La ultima iteraie presupunem c aceasta este a-K-a .........., avem: Vi k = d ij + V jk 1 = d ij + V jk i pe celelalte drumuri avem: Vi k > d ij + V jk . Deci arcul (xi ,xj) aparine drumului de valoare minim dac i numai dac V jk = Vi k d ij . Algoritmul lui Ford (de det. a distanei minime) ntre 2 vrfuri xp i xf - Fie xi X un vrf arbitrar. Vom nota cu li lungimea unui drum arbitrar de la vrful xp la xi. Pentru nceput vom lua pentru xp , lp = 0 i li = 0 pentru i p - Vom considera toate arcele ( xi x j ) V i vom calcula diferena l j l i pe care o vom compara cu l ( xi , x j ) ( An2 operaii i comparaii) Dac l j l i > l ( xi , x j ) , atunci se nlocuiete lj cu l j = l i + l ( xi , x j ) < l j . Deci vom face urmtoarele modificri la pasul K l j , dac l j li l ( xi , x j ) lj = li + l ( xi , x j ), dac l j l i > l ( xi , x j ) Vom continua acest procedeu pn cnd pentru orice arc ( xi , x j ) U avem
l j li l ( xi , x j )

Dac am ajuns n aceast situaie putem avea cazurile: 1) l f = deci nu avem drum de la xp la xf , deoarece un astfel de drum plecnd din xp cu valoarea lp finit, trebuie s aib un ultim vrf xi cu marca lj finit i atunci marca xf urmtor s-ar putea reduce, deci nu ar mai fi . 2) lf este finit i reprezint valoarea drumului minim de la xp la xf

Vom arta c exist un drum de la xp la xf de lungime lf i c nu exist un altfel de lungime mai mic.

Existena
Fie x f1 ultimul vrf care a servit la reducerea lui lf , x f 2 ultimul vrf care a servit la reducerea lui
l f1 s.a.m.d.

Obinem

l f l f1 = l ( x f1 , x f ), l f1 l f 2 = l ( x f1 , x f 2 )

Continund procedeul obinem un ir descresctor de numere pozitive: l f > l f1 > l f 2 > ... > 0. Dup un numr finit de pai vom gsi un vrf xr a.. l f r 1 l f r = l ( x f r , x f r 1 ) i
l sk l p = l ( x p , x sk .

Dac adunm aceste egaliti i inem cont c l0 = 0, vom obine: l s = l ( x p , x s ) + l ( x sk , x s ) + ... + l ( x s , x s ) . Deci am gsit drumul ( x p , x s , x s ,..., x s ) de lungime ls Unicitatea: Presupunem c mai avem un drum ntre x p i x s , = ( x p , xi1 ,..., xir , x s ). Deoarece reducerea mrcilor s-a terminat avem: li1 l p l ( x p1 , xi1 ), li li1 l ( xi1 , xi2 )...li2 ...lir lir 1 l ( xir 1 , xir ), l s lir l ( xir , x s ) Dc facem suma acestor inegaliti termen cu termen avem c l ( ) l a Observaie: Algoritmul ne d i un procedeu de gsire a drumului de lungime minim. Algoritmul: Pa1 i = 1 l p = 0, l i = 0, i p.
l j , l j li l ( xi , x j ) Pa2 i = 2 l j = li + l ( xi , x j ), l j l i > l ( xi , x j ) K = {3,...n} Dac l j l i l ( xi , x j ), i, j

Dac l f = , atunci nu avem drum STOP Dac l f < , atunci lf este val. de. minim. K K + 1 i se trece la pasul 2. Algoritmii Ford i Bellman Kalaba pot fi modificai astfel nct s determinm drumurile de lungime maxim dintre dou vrfuri, cu condiia ca ...aful dat s nu conin circuite. Algoritmii Ford. (pt. det.dr. maxim) 1) Lum l p = 0 i l i = pentru i P 2) Pentru orice arc ( xi , x j ) U calculm toate diferenele lj - li Dac l j l i l ( xi , x j ) , atunci lj rmne nesdruibat i continum procedeul. Dac l 'j li < l ( xi , x j ), nlocuim pe lj cu l j = l i + l ( xi , x j ) > l i
l j , dac l j l i l ( xi , x j ) deci l 'j = li + l ( xi , x j ), dac l j l i < l ( xi , x j ) Vom continua algoritmul pn cnd, pentru orice arc (xi, xj), avem lj - li l(xi, xj)

Sunt posibile situaiile: i) l s = nu exist drum de la vrful xp la xs, deoarece orice vrf care nu se afl pe un drum ce pleac din xp rmne cu marca infinit. Lema: Orice vrf care poate fi atins printr-un drum de la vrful xs va avea o marc finit. x X 1 avem Demonstraie: Fie X 1 = {x | x X | x s }, atunci pentru l x l s = < l ( x s , x) l x = l ( x s , x) va fi finit. Fie X 2 = {x X | x X 1} Oricrui vrf x X 2 . i va corespunde un vrf I X 1 , cu l x l y = < l ( x, y ), deci lx se va modifica i va deveni l x = l ( y , x ) + l y continund procedeul, vom defini l xi pentru toate vrfurile xi, ce aparin drumului care pleac din xp, l xi < finite Rezult c orice vrf z care nu aparine drumului ce pleac din x0 are l2 infinit. Acest lucru se ntmpl deoarece pentru a obine o valoare finit pentru marc dintr-o marc infinit, acest vrf ar trebui s fie marcat de la un alt vrf cu marc finit iar acestea sunt numai x0 i toate vrfurile ce se gsesc pe drumul care pleac din xp. ii) ls este finit, atunci reprezint valoarea drumului maxim de la xp la xn. Demonstraie: Existena unui astfel de drum de la xp la xs. Fie xst ultimul vrf care a permis creterea mrcii vrfului xs, deci
l s l st = l ( x st , x s ), l st > 0, l st < l s ), x st 1 ultimul vrf care a permis creterea mrcii

vrfului

x st , deci

l st l st 1 = l ( x st 1 , x st ) 0 < l st 1 < l st sau continund procedeul

obinnd un ir descresctor de numere pozitive; l s > l st > l st 1 > ... > o, deci exist un vrf x s1 astfel nct l s2 l s1 = l ( x1 , x s2 ) i l s1 l p = l ( x p , x s1 ). inem cont de faptul c l0 = 0 i adunm aceste inegaliti. Obinem c l s = l ( xo , x s1 ) + l ( x s1 , x s2 ) + ... + l ( x sk , x s ), deci drumul ( x p , x s1 ,..., x st ) are valoarea maxim ls. Unicitatea Vom arta c orice drum de la vrful xp la xs are valoarea cel mult ls. Fie = ( x p , x j ,..., x jk , xs ) nu da astfel de drum. Avem inegalitile:
l ji l p l ( x p1 , x j1 ) l j2 l j1 l ( x j1 , x j2 )

---------------------l jk l jk 1 l ( x jk 1 , x jk )
l s l jk l ( x j k , x s )

Facem suma termenilor i obinem l ( ) l s Alg. Bellman-Kalaba pentru determinarea drumului de valoare maxim. Fie 6 = ( X ,U ) ...... i matricea l ( xi , x j ), ( xi , x j ) U 0 , i= j C = (ci j )i, j = 1, u ci j = , ( x , x ) U i j

Vi o = ci i = o, u 1 n Pasul 1: 0 Vu = 0 Vi1 = max(V j0 + cij ), i = 0, u 1, j = 0, u Pasul 2: (1) Vu1 = 0 2 Vi max (V j1 + cij ) i = 0, u 1, j = 0, u j i (2) 2 Vu = 0 Vi k = max{V jK 1 + Cij ) i = 0, u 1, j = 0, u j +i (K) k Vu = 0
Vi k +1 = max{V jk + Cij ), i = 0, u 1, j = 0, u j i (K+1) VuK +1 = 0 Dac Vi k = Vi K +1 , i = 0, u ne oprim gsind drumul de valoare maxim V0k = V0k +1 . Pentru determinarea efectiv a acestuia vom proceda ca la (B-K) min. Algoritmul lui Dautzing (1) (de determinare a drumurilor de valoare minim pornind de la matricea de .... Fie G = ( X ,U ) graf cu | x |= n, X = {x1 ,..., xn } . Acest algoritm este mai general verificnd dac avem i circuite pe care funcia distana l : U ia i valori negative. Obs. Dac un graf admite un circuit de lungime total negativ, atunci ntre orice 2 vrfuri ale circuitului distana este negativ i poate fi facut orict de mic dac parcurgem acest circuit de un numr suficient de mare. Deci nu putem gsi cea mai mic distan ntre vrfurile circuitului. t Fie X t = {x1 , x2 ,..., xt } t u . Vom nota cu d ij distana minim de la xi la xj n

subgraful lui G,Gt, generat de mulimea X, pentru orice i, j {1,2,.., t ) . 2 2 Pasul 1: Definim d12 = a12 , d 21 = a21 2 2 Dac a 2 d12 + d 21 < 0 ne oprim, deoarece circuitul (x1, x2, x1) este negativ
t t Dac s-au determinat distanele minime d ij1 vom calcula d ij astfel:
t t d it = min (d ij1 + a jt ), i = 1, t 1 j =1,t 1 t t 1 d ti = min1(d tj + d ji ), i = 1, t 1 j =1,t t t Pentru orice i = 1, t 1 verificm dac d it + d ti > 0 .
t t Dac i a d it + d ti < 0 ne oprim pentru c am gsit un circuit negativ ce conine vf xi i xt. Dac nu exist un astfel de i calculm t t t t d ij = min(d ij , d it + d tj ) pentru i, j = 1, t 1, i i j.

u Algoritmul se sfrete cnd t= n iar d ij vor fi distanele minime cutate.

t Este clar c d ii = 0, i = 1, t i t = 1, u Observaie: Dac nu avem n graf arce (xi,xj) a.. l(xi,xj)<0 nu mai facem verificarea pentru existena circuitelor negative.

Curs nr. 7
REELE DE TRANSPORT. ALGORITMUL FORD-FULKERSON

REELE DE TRANSPORT
Alg. Ford-Fulkerson Fie G = ( X , U ) un graf orientat cu X = {xo , x1 ,..., xn } . G definete o reea de transport dac ndeplinete urmtoarele condiii: i) G este conex i fr bucle; ii) Exist un vrf unic xo X n care nu intr nici un arc, deci c:U + iii) iv) Exist un vrf unic x n X din care nu pleac nici un arc, deci + x n = . Pentru orice arc u = ( xi , x j ) U s-a definit o funcie pe mulimea arcelor

U cu valori reale i positive c : U + . Numrul c(u) se numete capacitatea arcului (u), vrful xo se numete intrarea reelei, vrful x u se numete ieirea reelei. Reeaua va fi notat G = ( X , U , c ) o funcie

: U + dac sunt ndeplinite condiiile:


a) (u ) 0, u U ; b) (u ) c(u ), u U (condiia de mrginire a fluxului); c)
u ( x i )

(u ) = (u ),
u + ( x i )

i = 1, u 1 (condiia de conservare a fluxului).

Din condiia de conservare a fluxului obinem c fluxul care iese din xo , o , este egal cu cel care intr n xn , n . Fie G = ( X ,U , c ) o reea de transport i A X cu proprietatea c xo A dar xn A . Mulimea ( A) a arcelor ce au extremitatea final n A, iar cea iniial n X-A se numete tietur a reelei. Capacitatea tieturii din tietur:

xo = este suma capacitilor arcelor

c ( ( A) ) =

u ( A )

c(u).

Observaie:

ntr-o reea de transport G = ( X ,U , c ) orice drum care leag intrarea xo cu ieirea xn conine cel puin un arc al unei tieturi arbitrare ( A) . xi i x j dintr-un drum de la xo la xn , astfel nct xi A , x j A i (xi , x j ) ( A) Deoarece printr-o tietur xo A i xn A rezult c avem dou vrfuri vecine

rezult c pentru a ajunge n xn trece cel puin printr-un arc dintr-o tietur arbitrar

( A) .
Deoarece

Definiie. Fie G = ( X ,U , c ) o reea de transport. Se numete flux maxim n reeaua de transport G, un flux , astfel nct fluxul n care intr n xn s aib valoare maxim. Un arc u U al unei reele de transport G = ( X ,U , c ) se numete saturat dac (u ) = c(u ) . Un flux ntr-o reea de transport se numete complet, dac orice drum de la xo la xn conine cel puin un arc saturat. Observaie. Un flux maxim este complet, dar un flux complet nu este obligatoriu i maxim, deoarece el poate fi mrit considernd lanuri de la xo la xn care nu conin arce saturate (lanuri nesaturate).

o = n , avem c n c( ( A) ) .

Metoda compensaiilor successive


Aceast metod ne ajut s determinm un flux compatibil cu o reea de transport dat G = ( X ,U , c ) , altul dect cel nul (acolo unde este posibil.). Fie G = ( X ,U , c ) reea de transport, matricea C = c ij reprezint capacitatea arcului (x i , x j ) sau

( ) i, j = 0, n , c

ij

c (x i , x j ), (x i , x j )U . c ij = 0 , (x i , x j )U Matricea C va fi modificat ultima: eliminm linia n i coloana o, reprezentnd fluxul n la intrarea din xn i o la ieirea din xo , flux ce va fo aflat n urma aplicrii

c ij = 0 dac nu exist arcul (x i , x j )

algoritmului. Notm apoi linia O n locul liniei n i obinem o matrice C M n () .

cij = c ij i = 1, n 1 , j = 1, n
Vom aduga matricei C o coloan n partea dreapt Ln +1 = (l1 , l 2 ,..., l n ) i o linia

cnj = c oj , j = 1, n.

jos C n +1 = (c1 , c 2 ,..., c n ) astfel:

l = n c , i = 1, n i ij j =1 n c j = cij , j = 1, n j =1
Vom aduga apoi acestei noi matrice nc o coloan linie (jos)

= (1 ,..., n ) astfel: i = i = 0 pentru li = ci i = 0 si i = li ci , li < ci = l c , = 0 , l > c i i i i i i Elementele i 0 determin pentru vrful xi, cu ct capacitatea arcelor care

= (1 ,..., n ) i nc o

pleac din xi este mai mare dect cea a arcelor care intr n xi.. Elementele i 0 determin pentru vrful xi, cu ct capacitatea arcelor care intr n xi este mai mare dect cea a arcelor care pleac din xi..

li = cij = c j
i =1 n i =1 j =1 n j =1

l j j = min(li , ci ) = c j j ,
n n n j =1 j =1 j =1 j =1 j =1

deci
Fie
o

j =1

= j .
j =1
o

i 0 primul element nenul, deci coloana . Pentru arcele ce din xi li se va

micora surplusul de capacitate prin diminuarea capacitii arcelor care intr n vrfurile adiacente cu xio , a cror capacitate pentru arcele care intr este mai mare dect a arcelor care ies din aceste vrfuri. Se face acest lucru pn cnd

i = 0 dup care se trece la urmtoarea


o

component nenul a vectorului pn cnd =(0,0,...,0). Dac un element ik 0 nu poate fi ................ se va ncerca acumularea valorii rmase
k k

'i parcurgnd elementele nenule ai j 0 din linia ik n ordinea cresctoare a


i'' va fi anulat astfel:
k

lungimii drumurilor care leag vrful xik de vrful n care predomin capacitatea arcelor care intr n ele. ' Dac ik 0 nu a putut fi compensat, valoarea rmas
k1

se parcurg elementele Ci ' , j 0 din linia ck n ordinea cresctoare a indicelui j i se procedeaz ca mai sus. 3

Acest blocaj arat c fluxul care trece prin reea este prea mare. Compensarea n punctele de blocaj se realizeaz dezechilibrnd reeaua astfel: a) se compenseaz elementul ik 0 ct este posibil utiliznd surplusul de capacitate al arcelor care intr n vrfurile adiacente cu xik b) se compenseaz cantitatea pariale a lui notm C i
k1
' k1

'i rmas n .............. compensrii


k

i cu primul element diferit de 0 al liniei ik pe care-l


k

,j

Dac 'ik Ci ' , j , atunci Ci ' , j := Ci ' , j 'ik iar ik := 0 . Dac 'ik > Ci ' j Ci ' j := 0 iar 'ik := 'ik Cik jo .
k1

k1

k1

k1

Noua valoare a lui

'i se compar cu urmtoarele elemente nenule din linia ik


k
k1

deci matricea C. Pentru un astfel de element nenul Ci ' j se repet algoritmul ca n cazul

Ci

' k1

. Dac ik nu poate fi nici acum anulat, se reia algoritmul pn la anularea lui ik .


n
1

Anularea se va produce sigur ntr-un numr finit de pai deoarece ik Cik .


j =1

c)

Se observ c mereu avem (u ) c (u ) . ntr-adevr, aceast metod compenseaz surplusul de capacitate a arcelor care pleac din vrfurile unde acest surplus exist prin diminuarea surplusului de capacitate a arcelor care intr n vrfurile adiacente cu vrfurile unde avem surplus, acest surplus provocnd dezechilibru reelei. Atunci cnd = 0 , se oprete algoritmul. Dac avem soluie nenul, adic se echilibreaz reeaua, elementele matricei C obinute n urma algoritmului reprezint valoarea fluxului pe fiecare arc. Dac nu avem soluie nenul, atunci C=0.

Se trece pa pasul urmtor calculndu-se din nou elementele vectorilor Ln+1 , Cn+1 , , i se repet algoritmul.

Curs nr. 8
Algoritmul Ford-Fulkerson Flux maxim n reele de transport
Fie G = ( X ,U , c ) o reea de transport. Problema determinrii fluxului maxim cu componente raionale ntro reea cu capacitile numerelor raionale, se reduce la cazul cnd componentele fluxului i capacitile sunt numere naturale, deoarece putem amplifica componentele fluxului i capacitile arcelor cu o aceeai cantitate pozitiv. Deci, n cele ce urmeaz c (u ) 0, ( ) 0 . Fie un drum de la xo la xn. Dac nu exist arc saturat n acest drum, putem mri fluxul n cu respectarea condiiilor de mrginire i conservare a fluxului. Vom considera (u ) = c(u ) (u ) > 0 pentru orice u arc al drumului i fie m = min (C (u ) (u )) .
u

Dac avem un lan de la xo la xn, vom nota cu + arcele din avnd acelai sens cu sensul de parcurgere de la xo la xn i cu - arcele orientate invers. Fie m = min (C (u ) (u )), m = min ( u ) si m = min ( m , m ) . + +
u u

n + m > n , pstrndu-se condiiile (m) i (c).

Pe fiecare arc al drumului vom mri fluxul cu m. Obinem un flux mrit

Pentru m>0 mrim fluxul cu m pe fiecare arc u

i-l micorm cu m; pe

fiecare arc u obinem tot un flux pozitiv ce verific condiia (m) i (c) cu n + m > n . Definiie. Un drum pentru care m=0 se numete saturat, iar un lan pentru care m=0 se numete saturat. Algoritmul Ford-Fulkerson Fie G = ( X ,U , c ) reea det. pe care am definit un flux . Dac nu avem nici un lan nesaturat care pleac din xo i ajunge la xn, fluxul n este maxim n xn i este egal cu capacitatea minim a unei tieturi. Dem. Pasul 1. Se obine un flux complet pornind de la fluxul iniial compatibil cu capacitatea arcelor reelei. Se ia un drum nesaturat de la xo la xn, i se mrete fluxul pn la saturarea cu cel puin un arc. Se repet ............ pn cnd nu mai avem drumuri nesaturate, deci am obinut un flux complet.

Se consider toate lanurile elementare de la xo la xn. Parcurgnd un astfel de lan, cutm un arc u oarecare ................ din proprietile: u + i (u ) = 0 . Un astfel de lan este saturat i-l vom elimina. Vom parcurge doar lanurile nesaturate. Un astfel de lan nesaturat l vom satura mrind cu m + pentru u i micornd cu m pentru u pn cnd obinem m =0 . Un lan nesaturat de la xo la xn l determinm prin urmtorul procedeu de marcaj. Notm xo cu [+]. Dac vrful xi a fost marcat, vom nota cu [+xi] un vrf xj, dac (xixj)U i dac (xixj) este nesaturat. [-xi] este vrful xj nemarcat cu proprietatea c arcul (xixj) este traversat de un flux strict pozitiv. Dac vrful xn a fost marcat, atunci avem un lan de la xo la xn nesaturat pe care-l putem satura dup cum am descris mai sus. Dac vrful xn nu a fost marcat, atunci rezult c nuj avem lan nesaturat de la xo la xn. Fie A mulimea vrfurilor nemarcate. Este clar c xnA i x n A , deci A definete o tietur -(A). n aceast situaie avem ln =
u ( A )

(u ) = c(u ) = c( ( A))
u ( A )

egalitatea pentru n flux maxim, deci obligatoriu tietura va fi de capacitate minim. Deci, dac nu avem lanuri nesaturate de la xo la xn n reea obinem un flux maxim. Algoritm. 1. Se obine un flux compatibil cu capacitile arcelor reelei, care poate fi iniial nul. 2. Se obine un flux complet: vom considera arcele nesaturate. Dac fluxul nu e complet, vom considera un drum format din arce nesaturate, se mrete fluxul pe arcele acestui drum pn la saturarea a cel puin un arc. Se repet pn cnd toate drumurile de la xo la xn sunt saturate. 3. Se obine un flux maxim prin procedeul de mai sus. 4. Algoritmul are un numr finit de pai deoarece capacitile i compoziia fluxului sunt numere pozitive, Folosind Maple 6 obtinem urmatorul program: > with(linalg): > > n:=10: > a:=matrix(n,n,[[[0,0],[0,12],[0,3],[0,20],[0,0],[0,0],[0,0] ,[0,0],[0,0],[0,0]],

n aceast situaie obinem valoarea maxim a fluxului. Deoarece u c ( A) pentru orice tietur i flux dat, n cazul nostru avem

> [[0,0],[0,0],[0,0],[0,0],[0,0],[0,6],[0,5],[0,0],[0,0],[0,0 ]], > [[0,0],[0,0],[0,0],[0,0],[0,4],[0,4],[0,0],[0,0],[0,0],[0,0 ]], > [[0,0],[0,0],[0,0],[0,0],[0,5],[0,0],[0,0],[0,0],[0,10],[0, 0]], > [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,5],[0,3],[0,0 ]], > [[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,3],[0,3],[0,0],[0,0 ]],[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[ 0,13]],[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0, 0],[0,10]],[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0] ,[0,0],[0,12]],[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[ 0,0],[0,0],[0,0]]]): > > print(a): [ 0, 0 ] , [ 0, 12 ] , [ 0, 3 ] , [ 0, 20 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 6 ] , [ 0, 5 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 4 ] , [ 0, 4 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 10 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 3 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 3 ] , [ 0, 3 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 13 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 10 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 12 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] > > for r from 1 to n do L:=array(1..n):for i from 1 to n do L[i]:=0:od:C:=array(1..n):for i from 1 to n do C[i]:=0:od: > for i from 1 to n do L[i]:=0:od:L[1]:=1: > i:=1:for j from 1 to n do if a[i,j][2]>0 then L[j]:=i:fi:od:print(L): > dif:={}:for i from 1 to n do if L[i]<>0 then dif:=dif union {i}:fi:od:print(q):print(dif): > for k from 1 to n do for i from 2 to n do if member(i,dif)=true then for j from 1 to n do if a[i,j][2]>0 then if L[j]=0 then L[j]:=i:fi:fi:od:for j from 1 to n do if a[j,i][1]>0 then if L[j]=0 then L[j]:=i:fi:fi:od:fi:od:for i from 1 to n do if L[i]<>0 then if

member(n,dif)=false then dif:=dif union {i}:fi:fi:od:od:print(L): > if L[n]<>0 then lnt:=table():var:=[n]:q:=1:t:=0:for j from 1 to n do for i from 1 to n do lnt[q]:=var[1]:od:t:=var[1]:if abs(var[1])>1 then var:=[L[abs(t)]]:q:=q+1:fi:od:print(lnt):m:=q:print(m): > lant:=array(1..m):for i from 1 to m do lant[i]:=lnt[mi+1]:od:print(lant): > v1:={}:v2:={}:q:=0:for i from 1 to m do if lant[i]>0 then if i+1<=m then q:=i:v2:=v2 union {a[abs(lant[q]),abs(lant[q+1])][2]}:fi: else q:=i:v1:=v1 union{a[abs(lant[q+1]),abs(lant[q])][1]}:fi:od:print(v1):pr int(v2):n1:=nops(v1):n2:=nops(v2): > m1:=infinity:m2:=infinity:for i from 1 to n2 do m2:=min(m2,op(i,v2)):od:print(m2):for i from 1 to n1 do m1:=min(m1,op(i,v1)):od:print(m1): > for i from 1 to m do if lant[i]<0 then if i+1<=m then q:=i:a[abs(lant[q+1]),abs(lant[q])][1]:=a[abs(lant[q+1]),ab s(lant[q])][1]m1:a[abs(lant[q+1]),abs(lant[q])][2]:=a[abs(lant[q+1]),abs( lant[q])][2]+m1:fi:fi:od:print(a): > for i from 1 to m do if lant[i]>0 then if i+1<=m then q:=i:a[abs(lant[q]),abs(lant[q+1])][1]:=a[abs(lant[q]),abs( lant[q+1])][1]+m2: a[abs(lant[q]),abs(lant[q+1])][2]:=a[abs(lant[q]),abs(lant[ q+1])][2]-m2:fi:fi:od:fi:od:print(a):print(L): [ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ]

4 { 1, 2, 3, 4 } [ 1, 1, 1, 1, 3, 2, 2, 5, 4, 7 ] table([1 = 10, 2 = 7, 3 = 2, 4 = 1]) 4 [ 1, 2, 7, 10 ] { } { 5, 12, 13 } 5

[ 0, 0 ] , [ 0, 12 ] , [ 0, 3 ] , [ 0, 20 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 6 ] , [ 0, 5 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 4 ] , [ 0, 4 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 10 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 3 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 3 ] , [ 0, 3 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 13 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 10 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 12 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ]

[ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ] 3 { 1, 2, 3, 4 } [ 1, 1, 1, 1, 3, 2, 6, 5, 4, 9 ] table([1 = 10, 2 = 9, 3 = 4, 4 = 1]) 4 [ 1, 4, 9, 10 ] { } { 10, 12, 20 } 10


[ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 5, 7 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 3 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 20 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 4 ] [ 0, 5 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 6 ] [ 0, 4 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 5, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 3 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 5 ] [ 0, 3 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 10 ] [ 0, 3 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 5, 8 ] [ 0, 10 ] [ 0, 12 ] [ 0, 0 ]

[ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ] 3 { 1, 2, 3, 4 }

[ 1, 1, 1, 1, 3, 2, 6, 5, 5, 7 ] table([1 = 10, 2 = 7, 3 = 6, 4 = 2, 5 = 1]) 5 [ 1, 2, 6, 7, 10 ] { } { 3, 6, 7, 8 } 3


[ 0, 0 ] , [ 5, 7 ] , [ 0, 3 ] , [ 10, 10 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 6 ] , [ 5, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 4 ] , [ 0, 4 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 3 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 3 ] , [ 0, 3 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 5, 8 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 10 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 2 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ]

[ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0 ] 4 { 1, 2, 3, 4 } [ 1, 1, 1, 1, 3, 2, -10, 5, 5, 8 ] table([1 = 10, 2 = 8, 3 = 5, 4 = 3, 5 = 1]) 5 [ 1, 3, 5, 8, 10 ] { } { 3, 4, 5, 10 } 3

[ 0, 0 ] , [ 8, 4 ] , [ 0, 3 ] , [ 10, 10 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 3 ] , [ 5, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 4 ] , [ 0, 4 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 3 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 0 ] , [ 0, 3 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 8, 5 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 10 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 2 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ]

[ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 ] 4 { 1, 2, 4 } [ 1, 1, -5, 1, 4, 2, -10, 5, 5, 8 ] table([1 = 10, 2 = 8, 3 = 5, 4 = 4, 5 = 1]) 5 [ 1, 4, 5, 8, 10 ] { } { 2, 5, 7, 10 } 2


[ 0, 0 ] , [ 8, 4 ] , [ 3, 0 ] , [ 10, 10 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 3 ] , [ 5, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 1 ] , [ 0, 4 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 5 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 2 ] , [ 0, 3 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 0 ] , [ 0, 3 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 8, 5 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 7 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 2 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ]

[ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 ] 4 { 1, 2, 4 }

[ 1, 1, -5, 1, 4, 2, -10, 6, 5, 8 ] table([1 = 10, 2 = 8, 3 = 6, 4 = 2, 5 = 1]) 5 [ 1, 2, 6, 8, 10 ] { } { 3, 4, 5 } 3


[ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 8, 4 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 3, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 12, 8 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 3, 1 ] [ 2, 3 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 3, 3 ] [ 0, 4 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 5, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 3, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 5, 0 ] [ 0, 3 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 10, 0 ] [ 0, 3 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 0, 0 ] [ 8, 5 ] [ 5, 5 ] [ 10, 2 ] [ 0, 0 ]

[ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 ] 4 { 1, 2, 4 } [ 1, 1, -5, 1, 4, 3, -10, -10, 5, 9 ] table([1 = 10, 2 = 9, 3 = 5, 4 = 4, 5 = 1]) 5 [ 1, 4, 5, 9, 10 ] { } { 2, 3, 8 } 2

[ 0, 0 ] , [ 11, 1 ] , [ 3, 0 ] , [ 12, 8 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 6, 0 ] , [ 5, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 1 ] , [ 0, 4 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 2, 3 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 5, 0 ] , [ 0, 3 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 0 ] , [ 3, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 8, 5 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 8, 2 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 2 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ]

[ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 ] 4 { 1, 2, 4 } [ 1, 1, -5, 1, 4, 3, 0, 0, 5, 0 ] [ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 ] 4 { 1, 2, 4 } [ 1, 1, -5, 1, 4, 3, 0, 0, 5, 0 ] [ 1, 1, 0, 1, 0, 0, 0, 0, 0, 0 ] 4 { 1, 2, 4 } [ 1, 1, -5, 1, 4, 3, 0, 0, 5, 0 ]


[ 0, 0 ] , [ 11, 1 ] , [ 3, 0 ] , [ 14, 6 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 6, 0 ] , [ 5, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 1 ] , [ 0, 4 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 4, 1 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 10, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 5, 0 ] , [ 2, 1 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 3, 0 ] , [ 3, 0 ] , [ 0, 0 ] , [ 0, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 8, 5 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 8, 2 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 12, 0 ] [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ] , [ 0, 0 ]

[ 1, 1, -5, 1, 4, 3, 0, 0, 5, 0 ]

> w1:={}:w2:={}:q1:=0:q2:=0:for i from 1 to n do if L[i]=0 then w1:=w1 union {i}:q1:=q1+1: else w2:=w2 union {i}:q2:=q2+1:fi:od:print(w1):print(w2):print(q1):print(q2): { 7, 8, 10 }

{ 1, 2, 3, 4, 5, 6, 9 } 3 7
> flux:=0:for i from 1 to q2 do for j from 1 to n do if member(j,w1)=true and a[w2[i],j][1]>0 then flux:=flux+a[w2[i],j][1]:fi:od:od:print(`fluxul maxim este:`):print(flux): fluxul maxim este:

28

10

Curs nr. 9 ARBORI Numrul ciclomatic al unui graf


Fie G = (X,U) un graf simplu i mulimea nr. reale. Vom nota cu S 0 (G ) = { f : X | f funcie} i S1 (G ) = { f : U | f funcie }. S0(G) i S1(G) au structur de spaii vectoriale. Presupunem c X = {x1 ,..., x n }, U = {a1 , a 2 ,..., a n } . Atunci dmi S 0 (G ) = n i dmi S1 (G ) = m Funciile din S0(G) i S1(G) le vom reprezenta sub form vectorial. De exemplu dac f S 0 (G ) atunci f = (f1,...,fn) unde fi = f(xi), iar pentru g S1 (G ).,.g = ( g1 , g 2 ,..., g n ) cu g i = g (ai ) . 1, i = j , O baz n S0(G) este mulimea de funcii ( 1 , 2 ,..., n ) unde i ( x j ) = iar n 0, i j 1, i = j , S0(G) avem (1 , 2 ,..., m ) unde i (a j ) = 0, i j Aceste baze sunt baze canonice n C0(G) respectiv C1(G). Definiie. Fie G un graf. Spunem c am dat o orientare grafului G dac pentru orice muchie a U, a = ( xi , x j ) am dat un sens de parcurs (de la xi la xj sau de la xj la xi). Vom considera ca sens pozitiv sensul de rotaie dat de arcele de ceasornic. Rezultatele care urmeaz sunt independente de orientarea dat grafului. Definiie. Fie G = (X,U) un graf fie (matrice de inciden) B M uxm () B = (bij ) i , j =1, n
j =1, m

1, dac vi d muchiei e j un sens de parcurs pozitiv bij 1, dac vi d muchieie j un sens de parcurs negativ 0, altfel

Matricea B este matricea unei aplicaii liniare B : S1 (G ) S 0 (G ) numit funcie de inciden. Fie g S1 (G) atunci B ( g ) = bij g (a j )
j =1 m

Se observ c fiecare coloan din B conine doar 2 valori nenule , +1 i 1, care arat c muchia corespunztoare coloanei are un vrf care d orientare pozitiv i unul care d o orientare negativ. Vom nota cu p numrul componentelor conexe ale grafului G. Propozitia 1. Fie B : S1 (G ) S 0 (G ) , atunci dmiK Im B = u p dmiK KerB = m u + p Demonstraie. Este suficient s artm c dim K Im B = n p . Facem inducie dup p

Pentru p = 1, avem c G este graf conex cu n vrfuri. Fie r linii oarecare din matricea B. Suma lor va fi un vector care va avea cel puin o component nenul pentru r < n. n caz contrar, am avea c din mulimea de vrfuri corespunztoare celor r linii nu mai pleac (..) nici o muchie, deci G nu este conex. Rezult c orice r linii, cu r < n, deci B nu sunt liniar dependente. Suma celor n linii din B are toate componentele nule, deci rang B = n-1=dmiImB. Dac avem p componente conexe, vom considera subm. din B, B1,B2,...,Bp, corespunztoare componentelor conexe i aplicm pentru fiecare component conex pasul de inducie (pune Lema 1). Definiie. (G ) = dmi Im f , (G ) = dmiKerf . (G ) s.n. nr. ciclomatic al grafului G i (G ) - nr. co-ciclomatic Fie G = (X,U) i un circuit n graful G. Vom da acest circuit prin enumerarea muchiilor sale. Presupunem c sensul pozitiv de parcurgere a acestui circuit este cel dat de sensul acelor de ceasornic. Definim funcia g S1 (G ) astfel : g ( a ) = 1, dac
a i este orientat n sens pozitiv i g ( a ) = 1, dac a i este

orientat n sens invers. Dac a g ( a ) = 0 Propoziia 2 Dac este un ciclu n graful G = ( X , U ) g KerB Demonstaie. : Deoarece rang B = n p i dmiS1 (G ) = n dmiKerB = m u + p Presupunem c aplicaiei g i corespunde vectorul coloan V . Elementul ( BV ) i se abine nmulind rndul i din matricea B cu vectorul x . Dac vrful Vi nu este vrf pentru nici o muchie din , atunci ( BV ) i = 0 . Dac xi este vrf pentru o muchie din , atunci el va fi vrf pentru exact dou muchii i atunci din rezult c elementul modul cum am definit funcia g
( Bv ) i = 0 Bv = 0 V KerB .

Deci numrul de cicluri dintr-un graf este egal cu m u + p. Arbori Un arbore este un graf conex i fr cicluri. O pdure este un graf pentru care fiecare component conex este un arbore. Obs. Noiunea de arbore se refer la 1 grafuri sau la grafuri neorientate, ambele fr muchii multiple. n studiul arborilor orientarea arcelor nu are importan. Prop. 3. Fie G = (X,U) un graf cu | X |= n 2 Sunt echivalente afirmaiile: i) G este arbore. ii) G este conex i minimal cu aceast proprietate. iii) G este fr cicluri i maximal cu aceast proprietate. Dac se adaug un arc ntre orice dou vrfuri neadiacente avem un ciclu unic. iv) G este fr cicluri i are n 1 arce. v) G este conex i are n 1 arce. vi) Pentru orice dou vrfuri distincte ale lui G exist un singur lan care le unete.

Demonstraie: i) ii) Fie e = ( x, y ) U o muchie din G. Din i) avem c G este conex. Fie graful G {e}. Dac acesta rmne conex rezult c avem drum ntre vrfurile x i y n G {e} ceea ce implic existena unui ciclu n graful G contradicii. ii) i) Artm c G nu are circuite. Presupunem c exist un circuit i e = uv o muchie din circuit . Fie d un drum arbitrar n G, dac e nu este muchie din acest drum, atunci d este din n G e. Dac e este muchie n d, atunci putem obine un drum n G e astfel: n loc de e n d punem drumul e , care determin n G e un drum cu aceleai extremiti ca i d n G, deci G e este conex, fab. i v) G fiind conex i fr cicluri p = 1 i m n +1 = 0 m = n 1 Analog i) iv). v) iii ) p = 1, m = n 1 (G ) = 0 i G este fr cicluri, dac se mai adaug o muchie, atunci avem un nou graf G i (G ' ) = 1 i deci ciclul este unic. iii) ii) Dac ar exista dou vrfuri nelegate prin nici un lan atunci nu am putea avea un ciclu prin adugarea unui arc ntre ele. Deci G este conex. Dac din G suprimm un arc, e = (x,y) iar graful G e este conex, atunci n G e exist, un lan de la x la y care mpreun cu e genereaz un ciclu n G, fab. ii) vi ) Dac avem vrfurile x i y legate prin dou lanuri distincte n graful G, atunci unul din ele conine o muchie e care nu o are cellalt i dac o suprimm graful G - e este conex, fab. vi) i) Rezult c G este conex i fr cicluri, pentru c existena unui ciclu ar nsemna c dou vrfuri din acel ciclu ar fi unite prin 2 lanuri distincte. Prop. 4. Orice graf conex G = (X,U) admite ca graf parial un arbore H = (X,V), numit arbore parial grafului G. Dem. Conform Prop.3. ii) acest arbore parial x obine suprimnd muchii din G cu condiia s se obin tot grafuri conexe. Det: i) Fie G un graf i v X a.. pentru orice alt vrf w X exist drum n graful de la V la W. Vrful v se numete rdcin ii) O arborescen este un arbore cu radcin. Fie G un graf neoriental i conex G = (X,U) cu |X| = n. Fie funcia l : U + a l (u ) - numit i costul muchiei u. Din prop.4 avem c G admite un arbore parial aceste este arbore minim (sau arbore de cost minim) dac sum lungimilor muchiilor sale este minim. Algoritmul lui KRUSKAL (1956) Se selecteaz muchia cea mai scurt muchie din graful G. Apoi dintre muchiile rmase se alege o muchie care nu formeaz cicluri cu cele deja alese i are lungimea cea mai mic pn se selecteaz n 1 muchiei. Algoritmul lui Kruskall se aplic pentru un graf neorientat arbitrar G = (X,U). Cnd G este conex tim c acest arbore exist. Cnd G nu este conex se descompune n componente conex e iar algoritmul va avea urmtoarea form: 3

1) Ordonm muchiile grafului n ordine cresctoare a costurilor sale. 2) O muchie va fi selectat daca are lungimea cea mai scurt dintre cele neselectate i care are capetele n componente conexe diferite (i se unete cu celelalte). Justificare: Fie 1 , 2 ,..., m muchiile grafului G (presupun a fi conex) ordonate a.. l ( 1 ) l ( 2 ) ... l ( m ) Vom demonstra prin reducere la absurd. Fie K arborele parial produs de acest algoritm i L arborele parial minim al grafului G. Vom arta c L = K Dac L K rezult c exist cel puin o muchie care se afl n unul dar nu este n cellalt. Fie i prima muchie cu aceast proprietate. Rezult c fiecare din muchiile 1 , 2 ,..., i 1 se gsesc fie toate n K i toate n L sau nici n R i nici n L. Cazul 1 i L dar i K . Dac prin aplicarea algoritmului muchia i nu este selectat, atunci i formeaz un ciclu cu muchiile din K deja selectate. Atunci muchiile din sunt din mulimea { 1 , 2 ,..., i 1 }. Dar cum aceste muchii se gsesc i n L i n K, dac {1 , 2 ,..., i 1 } K atunci se vor gsi i n L. Deoarece i L i i formeaz ciclul cu muchiile { 1 , 2 ,..., i 1 }, rezult c L contradicie. Cazul 2. i K dar i L. Presupunem c i = ( x, y ) U . Deoarece L este conex, exist n L un drum care unete pe x cu y, drum pe care-l vom nota cu . Deoarece nu utilizeaz muchia i , avem c { i ) formeaz un ciclu n graful G. i) Presupunem c i are cea mai mare lungime dintre toate muchiile din . Rezult c muchiile din se gsesc n mulimea { 1 , 2 ,..., i 1 }, deci K . Dar i K , deci K are un ciclu, fab. Deci i nu are cea mai mare lungime dintre muchiile drumului . ii) Fie e o muchie din drumul astfel nct l (e) > l ( i ) i presupunem c e = (z,w). Dac mutm muchia e din L i adugm muchia i nu vom forma un ciclu, deoarece a fost rupt prin eliminarea muchiei e. Va rezulta o mulime de muchii care au suma lungimilor mai mic dect lungimea lui L, deoarece l (e) > l ( i ) . Artm c aceste noduri sunt conectate cu altele i c nu pot forma un arbore. Vrfurile z i w rmn conectate n continuare. Vom avea un drum de la z la x, apoi urmeaz muchia i , apoi de la y la w. Deoarece (z,w) a fost singura muchie mutat, capetele sale rmn n continuare conectate. Deci noul set de vrfuri formeaz un arbore parial de lungime mai mic dect lungimea lui L, contradicie. Deci nu putem avea i K i i L, deci K = L. Algoritmul lui Prim (1957)

Algoritmul lui Kruskal selecteaz muchiile. Vom vedea n continuare un algoritm care selecteaz vrfurile dintr-un subgraf parial al lui G, Ki construit la pasul i al algoritmului. 1) Se alege un vrf oarecare x al grafului G i definim K1 = {x}. 2) Determinm cel mai apropiat vrf de x, notat y. Arborele K 2 = {X 2 , U 2 }, X 2 = {x, y},U 2 U ,U 2 = {( x, y )}. 3) Presupunem c la pasul i am obinut arborele Ki, atunci arborele Ki+1 se obine din Ki la care se mai adaug nodul yi, neselectat, cu proprietatea c este cel mai apropiat de Ki, ct i muchia de lungime minim care unete pe yi cu vrfurile din Ki Dup n pai arborele Kn va conine toate vrfurile grafului G, deci va fi un arbore parial al lui G. Algoritmul ia sfrit ca i n cazul alg. Kruskal se arat c arborele Kn este arbore parial minim. Aplicaii n informatic 1) Grmezi Vrfurile terminale ntr-un arbore se numesc pendante sau frunze. (Nici un drum de la rdcin la un alt vrf nu este mai mare ca [log 2 n] n cazul arborilor binari). Un arbore parial ordonat este un arbore binar n care vrfurile au primit cte o etichet. Aceste etichete pot reprezenta de exemplu valoarea unui element sau valoarea anumitor componente ale unui element. Etichetele sunt ordonate n funcie de prioriti. Eticheta unui vrf are prioritate mai mic dect cea a etichetelor ataate descendenilor acelui nod. Fie H = (X,U) un arbore a.. vrfurile sale au fost etichetate {1,2,...,n} cu 1 i rdcina, definit astfel: pentru orice i 2, n i U . Acest arbore este parial 2 ordonat. vrfurile lui sunt dispuse pe s+1 nivele, s = [log 2 n] , Nivelul i {0,....s} conine toate vrfurile aflate la distana i de radcina 1. Pe fiecare nivel i avem 2i vrfuri cu excepia ultimului nivel. H este un arbore parial ordonat. Def. O mulime total ordonat, ( H , ), H = {a1 , a 2 ,..., a n } formeaz o grmad binar dac pentru orice i {2,...., n} ai a i .
2

Acesteia i putem ataa arborele H descris mai sus punnd n fiecare nod i elementul ai Deci valoarea fiecrui vrf este mai mic sau egal dect cea a descedenilor si. n general, descendentul stng al nodului ai este a2i i cel drept, dac exist, este a2i+1. Fie H = {a1 , a 2 ,..., a n } o mulime. Ne propunem s organizm aceast mulime ca o grmad. Acest lucru l facem insernd un element ntr-o gramada deja existent. Pornim de la o grmad cu un singur element i continum pn introducem toate cele n elemente. 2) Probleme de sortare-cutare. Fie H = (X,E) un arbore binar i ( A, ) o mulime total ordonat finit. H este arbore de binar de sortare-cutare pentru A dac avem 5

dat o etichetare a vrfurilor (aplicaia E : X A, e bijectiv ) astfel nct pentru orice x X , orice y din subarborele stng al lui x are E ( y ) E ( x ) i orice z din subarborele drept al lui x are E ( z ) > E ( x ) . PROBLEME DE SORTARE Ne propunem s ordonm cresctor mulimea A comparnd cte dou elemente, A = {a1 , a 2 ,..., a n } . Vom construi un arbore binar de sortare-cutare. Elementul a1 va fi eticheta rdcinii. Elementul a2 se compar cu a1, dac e mai mic sau egal va fi descendent stng, dac este strict mai mare va fi descendent drept. Fie elementul ai . Se compar cu a1, dac este a1 va face parte din subarborele su stng, dac > a1, va face parte din subarborele drept al lui a1. Presupunem c a i a1 . Se compar ai cu descendentul stng. Dac e este mai mic va face parte din subarborele stng, dac e mai mare va face parte din subarborele drept al acestuia s.a.m.d. pn cnd am ajuns la elementul n. Ordinea este dat de parcurgerea arborelui obinut n inordine (fiul stng, rdcin, apoi fiul drept). n felul acesta pot determina minimul ca fiind cea mai din stnga frunz i maximul mulimii A, ca fiind cea mai din dreapta frunz. Problema ordonrii cresctor este o problem de sortare. Cea a determinrii max i min ....probleme de cutare. Alte probleme de cutare a) Apartenena la o submulime B, a unui element x A, B A Fie x A, x B ? Se asociaz mulimii B arborele, de sortare- cutare. Acesta se parcurge din rdcin comparnd elementul x cu valoarea asociat nodului curent, pn ajungem la concluzia c x B Dac x B , atunci x devine o frunz pentru arborele ataat. b) Inseria unui element. Se parcurge arborele pornind de la rdcin (n inordine) pn se ajunge ntr-o frunz, atand acest element frunzei ca fiu drept sau stng. c) tergerea unui element a. Se determin nodul x etichetat cu a. dac este frunz atunci se terge x din arbore. Dac x are doar un descendent y se face legtura dintre printele lui x cu y i tergem apoi pe x. Dac x are doi descendeni, cutm n subarborele drept al lui x nodul y n care se afl cel mai mic element b care este de fapt succesorul imediat al lui a. Se nlocuiete n x valoarea a cu b i tergem nodul y. tergerea lui y se face uor deoarece el este frunz sau are doar descendent drept. 3) Parcurgerea arborilor Se poate face n inordine: se parcurge mai nti fiul stng, rdcina i la urm fiul drept. Aceast parcurgere este inordine.......... - postordine se parcurge nti descendentul stng, apoi cel drept i la urm rdcina 6

preordine se parcurge nti rdcina descendentul stng i apoi cel drept.

4) Evaluarea expresiilor algebrice Orice expresie algebric poate fi memorat sub forma unui arbore binar. Operatorii care apar {+,*, /,} au o anumit prioritate n efectuarea calculelor. De exemplu s considerm expresia (b + (c d ) * e) * a . Arborele binar asociat va fi : (Nodurile arborelui vor fi etichetate fie cu operatori fie cu operanzi) Dac parcurgem acest arbore n nordine obinem: b+c-d*e*a n postordine bcd-e*+a* n preordine *+b*-cdea

Curs nr. 10 PROBLEME DE COLORARE

Definitia 1: Fie G=(X,v) un graf oarecare (neorientat). Numrul cromatic al unui graf oarecare G, notat (G ) , este numrul minim de culori necesare pentru colorarea vrfurilor grafului, astfel nct dou vrfuri adiacente s nu fie colorate cu aceeai culoare. Definiia 2: Fie ( Ai ), i = 1, p o partiie a mulimii de vrfuri X. Spunem c partiia
{ Ai}, i = 1, p este o colorare cu culori sau p-colorri a vrfurilor dac i numai dac orice dou vrfuri din Ai nu sunt adiacente. n aceast situaie graful se numete p-cromatic. Putem spune c (G ) este numrul minim p de culori pentru care avem o (G ) - colorare a grafului G. Vom nota cu N r (G ) nr. n r-colorrilor distincte a vrfurilor i eu t r = t (t 1) | (t 2)...(t r + 1), t C ()

Definiia 3. Polinomul P (G , t ) = N k (G )t k se numete polinomul .......asociat grafului


k =1

nt

G. El reprezint nr. t ....................... G , r t Fie q * atunci P(G,q) este numrul de colorri ale vrfurilor utiliznd q culori. Demonstraie: Orice K-colorare presupune utilizarea a k culori din cele maxim q culori k date, deci n total numrul lor este Aq = q(q 1)...(q k + 1) . Deci numrul total de culori al vrfurilor cu q culori este

N
k =1

(G )q k . Reciproc, orice colorare a vrfurilor grafului ag

n K q culori determin o partiie a lui n K- clase de colorare. Observaie 5: 1) Dac are n vrfuri, atunci N k (G ) = 0 pentru K > n i deci N n (G ) = 1, deci P(G, t ) este coeficientul termenului de grad maximum. 2) Dac G are 2 componente conexe C1 i C2 , putem avea pentru vrfurile din C1 i C2 colorri independente, deci Q(G, q) = Q(C1 , q) P(C2 , q). Propoziia 6: Fie G=(X1U) ..........S se arate c P(G, q ) =
V U

(1)

|V |

q C (V ) , unde C(V)

reprezint numrul de componente co...........le are graful parial al lui G,(X,V). Demonstraie. Dac X este mulimea vrfurilor X cu |X|=n, V={u1,...,u} atunci o qcolorare a grafului G este o funcie k X {1,..., q} cu q 1, q cu proprietatea c dac ( xi , x j ) U K ( x ) K ( y ) .

Fie M i = {K : X {1,..., q} | K ( x) = K ( y ) , pentru ui = {x, y} U } . Si atunci, numrul funciilor care verific proprietatea de mai sus este : P (G , q ) = q n | M 1 U M 2 U ... U M n | Folosim principiul inducerii i al excluderii avem:

| M 1 U M 2 U ... U M m |= | M i |
i =1

1i < j m

| M i I M j + ... + (1) m | I M i |
i =1

| M
i =1

| reprezint numrul tuturor funciilor care au aceeai valoare n {1,2,...,q} pentru

fiecare component conex a unui graf parial al lui G cu o singur muchie n aceast situaie sunt n-1 comp. conexe, deci

| A |= q
i =1 i

n 1

1i < j m

(M

I M j comp conex a unui

graf parial al lui G cu numai 2 muchii adiacente sau nu, deci avem n-2 comp. conexe. Rezult c

M i I M j = q n2 s.a.m.d., | I M i |= q
i =1

pentru c o msur comp. conex. Deci P (G, q ) = (1)|V | q C (V ) unde C(V) sunt comp. conexe ale grafului parial (X,V).
V U |V |

Exist algoritmi ce calculeaz polinomul cromatic al unui graf. Fie G=(X,U) un graf arbitrar l U , l = ( x, y ), x y o muchie a sa. Vom nota cu G-{l} graful obinut din G prin eliminarea muchiei: G {l} = ( X ,U {l}) i cu Gl graful obinut din G prin eliminarea a vrfurilor x i y i a muchiilor incidente cu aceste vrfuri i nlocuirea acestora cu un vrf unic n(x,y) care se va uni cu toate vrfurile din G sau erau adiacente fie cu x, fie cu y, fie cu ambele. Gl se numete contracia grafului G. Se observ G-{l} are o muchie mai puin dect G iar Gl are o muchie i un vrf mai puin dect graful G Propoziia 7. Cu notaiile mai sus, s se arate c P(G, q) = P(G {l}, q) P(Gl , q) Demonstraie. Dac funcia K X {l ,...q} este o q-colorare a grafului G, deoarece (*)1 Fie G = ( X ,U ), X = {x1 ...xn } un graf , A matricea sa de adiaceni. Vom nota cu m cea mai mic valoare proprie i cu M cea mai mare valoare proprie a sa. Propoziia 8. Dac G=(X,U) este graf B X , i GB este subgraful lui G generat de B, atunci a) M (G A ) M (G ) b) m (GB ) m (G ) c) d max (G ) M (G ) d min (G ) unde d max este cel mai mare grad al unui vrf din G i

d min este cel mai mic grad al unui vrf din G. Demonstraie. Presupunem c vrfurile din G au fost astfel numerotate a.. vrfurile din B s fie primele K vrfuri cu K<n, deci matricea A e adiacent AB a grafului GB poate fi considerat c fiind format din primele K linii i K coloane din matricea A. Alegem ............. astfel nct || WB ||= 1 i ABW = M ( AB )W i fie W dl1,u ( K ) vectorul obinut din W, completndu-l cu zerouri.
Atunci M ( AB ) = (W0 , ABW ) = (W , AW ) M ( A).

b) Analog i pentru m ( AB ) m ( A). c) Fie V = (1,1...1) t M u ( K ) i di gradul vrfului xi . Avem

1 n n 1 n ( aij ) = A n d i d min (G) n i =1 j =1 i =1

1 n n < v, Av > M ( ) , Dar ( aij ) = < v, v > n i =1 j =1 deci M (G ) d min (G) Fie Z M n ,1 ( K ) vector ......corespunztor

valorii

proprii

M Z = ( Z1 ,...Z n ) t i

Z j = max | Z i |
i =1,u

M Z j = a ji z i d j z j d max (G ) x j , deci M d max .


Definiia 9. Graful G se numete q-critic dac (G ) = q i pentru orice subgraf GB, B X , B X generat de b avem (GB ) < (G ) . Propoziia 10. Presupunem c G este un graf cu numrul cromatic (G ) 2 . Atunci G are un subgraf (G ) - critic, GB, i orice vrf din GB are gradul n GB cel puin (G ) 1 . Demonstraie. Exist subgrafuri n G al cror nr. cromatic este (G ) (de exemplu el nsui) i alte subgrafuri care au nr. cromatic mai mic (de exemplu, din acel subgraf scoatem un vrf). Fie GB subgraful lui G al crui numr cromatic este (G ) i are cel mai mic nr. de vrfuri. Este clar c GB este (G ) - critic. ntr-adevr, fie x B , atunci G B {x} este un subgraf al grafului GB i este colorat cu
i =1

(G ) 1 culori. Dac gradul vrfului x n GB ,dx(GB), satisface inegalitatea d x (G B ) < (G ) 1 , atunci putem extinde aceast colorare cu (G ) 1 culori la graful GB, care avea (GB ) = (G ) , contradicie. Deci d x (G B ) (G ) 1 . Propoziia 11. (Wilt 1967) cu cu notaiile de mai sus pentru orice graf G avem relaia (G) 1 + M (G) . Demonstraie. Din propoziia 10. Fie GB un subgraf (G ) - critic al lui G. Avem atunci c (GB ) = (G ) i d min (GB ) (G ) 1 . Obinem: (G) d min (GB ) + 1 1 + M (GB ) 1 + M (G) K(x)K(y), pentru orice ................ e=(x,y), rezult c aceasta este o q-

colorare pentru graful G-{e} i reciproc, deci P(G-{e},q)-P(G,q) respectiv numrul colorrilor K din G-{e}, cu e=(x,y), i K(x)=K(y). Fie K o colorare a grafului G-{e} cu e=(x,y) i K(x)=K(y). Ea produce o qcolorare K a grafului Ge astfel definim K(z)=K(x)=K(y) i K(t)=kt pentru orice tz. Reciproc, orice q-colorare k a grafului Ge induce o q-colorare k a grafului G-

{e} cu K(x)=K(y), dac definim K(x)=K(y)=k(z) i k(G)=k(t) pentru orice tx,y. Rezult c: P(G-{e},q)-P(G,q)=P(Ge,q) pentru orice q numr natural. Ambii membri ai acestei egaliti sunt polinoame, deci egalitatea este valabil pentru orice q. Algoritmul lui Zykov (pentru determinarea numrului cromatic al unui graf). Mai nti facem urmtoarea observaie. Dac G este un graf i G un subgraf generat al su, orice q-colorare a vrfurilor lui G induce o q-colorare a vrfurilor lui G, deci (G) (G), deci (G)(G), unde prin (G) am notat cardinalul maxim al unei clici aa (graf simplu neorientat i complet). n general egalitatea nu este satisfcut. n [ ] se arat c pentru orice q,rN cu rq exist un graf, astfel nct (G)=q i (G)=r. Fie G=(X,U) graf, si x,y dou vrfuri neadiacente. Deci .... 7 avem c orice colorare, k, a grafului G-{e} este o q-colorare a grafului G i reciproc. Tot din aceeai propoziie avem c orice colorare a grafului G-{e} cu e=(x,y), k(x)=k(y) induce o colorare a grafului Ge i reciproc. Rezult c ................................................ pe de o parte i c (Ge)(G{e}). Cum G-{e} este subgraf n g, avem (G)(G-{e}), deci (G-{e})=min((Ge), (G-{e})). Pasul 1. Considerm graful G cu x,y dou vrfuri neadiacente. Fie G{e} graful obinut din G prin introducerea arcului e=(x,y) i Ge contracia grafului G, care este de fapt i contracia grafului G{e}. Din cele de mai sus, (dac lum n locul grafului G-{e}, graful G), obinem:

(G)=min((G{e}), V(Ge))
Se consider separat grafurile G{e} sau Ge i se consider acest procedeu pn se obin grafuri care sunt clici. Pentru clici, numrul cromatic este egal cu

numrul de vrfuri. Atunci numrul cromatic va fi egal cu numrul maxim de vrfuri din G care pot forma o clic. Acest algoritm este destul de greu de utilizat practic, deoarece apar foarte multe grafuri care sunt analizate. Acest algoritm mai este cunoscut i sub numele de algoritmul legrilor i contraciilor. Un alt algoritm folosit n colorarea vrfurilor unui graf, este algoritmul greedy de colorare. Descrierea acestui algoritm este urmtoarea: 1) Se fixeaz o ordine de parcurgere a vrfurilor grafului. 2) Se atribuie primului vrf culoarea 1 i se parcurge mulimea vrfurilor astfel ordonat. Pentru un vrf se determin, cea mai mic culoare k, dintre cele date pn la momentul respectiv, care i se poate atribui, astfel nct acest vrf s nu poat fi adiacent cu nici un vrf care este colorat cu culoarea k. 3) Dac o astfel de culoare nu exist, se mrete mulimea culorilor cu o culoare distinct de cele deja existente, iar vrfului i se va atribui aceast culoare. Acest algoritm determin, n general, o q-colorare a grafului, care depinde de ordinea de parcurgere a vrfurilor grafului i nu numrului cromatic. Numrul cromatic va rezulta atunci cnd ordinea de parcurgere a vrfurilor grafului este dat de o permutare care are anumite proprieti, dup cum vom vedea n cele ce urmeaz. (Spunem c v<V v=xi , V=xI) Exp. [CC] pag. 138. Vom considera graful bipartit kn,n V={x1,x2,...,xn){y1,y2,...,yn), din care eliminm mediile (x1,y1),(x2,y2),...,(xn,yn). Deoarece graful este bipartit, avem (G)=2. Dac alegem urmtoarea ordine de parcurgere a vrfurilor {x1,y1,x2,y2,...,xn,yn}, conform acestui algoritm vom avea c k(x1)=1, k(y1)=1, k(x2)=k(y2)=2,... k(xn)=k(yn)=n i deci numrul de colorri corespunztor acestor permutri a vrfurilor este: (G)=n.

S presupunem c avem o k-colorare a grafului G i S1,S2,...,Sq sunt clasele de colorare. Fie Sn o permutare, astfel nct ordinea vrfurilor grafului G s fie X=(v1, v2,..., vn). Fie vSj. Notm cu P(v,j), acel vrf ySj (colorat cu culoarea j{1,...,q}) care are proprietatea c este cel mai mic n raport cu ordinea din X dat de permutarea astfel nct x,yU. Prop. 8. Cu notaiile de mai sus, dac pentru orice x,yU i pentru orice j<min(k(x),k(y)) cu proprieti c p(x,j)<p(y,j) implic vp(y,j)U, atunci pentru orice mulime MX-S1 astfel nct subgraful lui G, GM generat de mulimea M este subgraf complet, exist n Gy-S1. vp(M,1) cu proprietatea c GM{v} este subgraf complet n G (generat de mulimea M{v}). Dem. Prin inducie dup (M). Pentru M=1M={x}X-S1. Deoarece xS1 rezult c exist v=p(x,1), vS1, astfel nct vxU, deci M{v} este clic. Presupunem afirmaia adevrat pentru M=k i o demonstrm pentru

M=k+1, kX-S1-1.
Fie M subgraf complet n GX-S1 cu M2. Fie N=p(M,1)=UvS1 p(v,1)S1 i xo=min x. Rezult c exist yoM astfel nct xo=p(yo,1). Folosind ipoteza de inducie, pentru M\{yo}, (care este subgraf complet, deoarece provine dintr-un subgraf complet din care am eliminat un vrf ct i mediile incidente cu el, va exista un vrf zp(M\{yo},1) astfel nct M\{yo}{D} este clic. Avem dou cazuri: i)
ii)

zyoU, atunci M{z} este clic. zyoU. Vom considera voM\{yo} cu proprietatea c z=p{v,1). n mod clar, yovU (deoarece fac parte din clase diferite) i xo=p(yo,1)<p(v,1)=z. Dar yo p(v,1)=yozU, contradicie:

Consecina 1. (GX-S1)=(G)-1 Dem. Fie MX-S1, clic n GX-S1 cu un numr maxim de vrfuri, astfel nct

xp(M,1) cu proprietatea M{x} este o clic n G. Avem c (G)=|M|+1=(GX-S1)+....


Consecina 2. n condiia proprietii 8 avem c (G)=(G) Dem.

(GX-S1)=|M| i

deoarece |M| este maxim rezult c M{x} este cea mai mare clic, din G, deci

tim c (G)(G) i c (G)(G). Notm (G)=r i fie S1,S2,...,Sr clasele de colorare (corespunztor ordonrii vrfurilor date de permutarea ). Considerm X-S1 i subgraful lui G generat de aceast mulime de vrfuri, GX-S1. Se observ c n acest subgraf, clasele de colorare sunt S2,...,Sr, deci (GXS1)=

(G)-1, deci (G)= (G)=(G) q.e.d.


Algoritmul greedy de colorare

1. Se consider graful G=(X,U) cu |X|=n. 2. Fie o permutare a mulimii X i X={x1, x2,..., xn} aranjarea vrfurilor dat de . 3. Definim pentru i=1, k(x1)=1, (G)=1, S1={ x1}. 4. Pentru i=1. 5. Fie S=1. 6. Determinm cel mai mic vrf dat de ordonare, w, colorat cu culoarea j, deci p(xi ,j) astfel nct (xi ,w)U. 7. Dac exist un astfel de vrf, se face j=j+1 i k(xi )=j, sj={xi}, (G)=j i se repet la pasul 6 pn cnd gsim c nu exist atinge valoarea (G). p(xi ,j) sau pn cnd j

8. Dac nu exist un astfel de vrf, notm p(xi,j)=0 i se face Sj=Sj{xi }.

k(i )=j,

9. Se face i=i+1 i se repet de la pasul 5. n felul acesta, n urma aplicrii algoritmului obinem (G). Pentru a obine numrul cromatic, mergem la pasul.. 10. Dac pentru orice muchie i=(x,y)U i pentru orice j<min(k(x),k(y)) pentru care p(x,j)<p(y,j) avem p(y,j)U, atunci (G)= (G). n cazul n care nu exist nici o ordonare a vrfurilor care s satisfac aceast condiie, nu putem determina (G) cu acest algoritm i aplicm altul, de exemplu algoritmul legrilor i contraciilor. K(x)K(y), pentru orice ................ e=(x,y), rezult c aceasta este o q-colorare pentru graful G-{e} i reciproc, deci P(G-{e},q)-P(G,q) respectiv numrul colorrilor K din G-{e}, cu e=(x,y), i K(x)=K(y). Fie K o colorare a grafului G-{e} cu e=(x,y) i K(x)=K(y). Ea produce o qcolorare K a grafului Ge astfel definim K(z)=K(x)=K(y) i K(t)=kt pentru orice tz. Reciproc, orice q-colorare k a grafului Ge induce o q-colorare k a grafului G{e} cu K(x)=K(y), dac definim K(x)=K(y)=k(z) i k(G)=k(t) pentru orice tx,y. Rezult c: P(G-{e},q)-P(G,q)=P(Ge,q) pentru orice q numr natural. Ambii membri ai acestei egaliti sunt polinoame, deci egalitatea este valabil pentru orice q. Algoritmul lui Zykov (pentru determinarea numrului cromatic al unui graf). Mai nti facem urmtoarea observaie. Dac G este un graf i G un subgraf generat al su, orice q-colorare a vrfurilor lui G induce o q-colorare a vrfurilor lui G, deci (G) (G), deci (G)(G), unde prin (G) am notat cardinalul maxim al unei clici aa (graf simplu neorientat i complet). n general

egalitatea nu este satisfcut. n [ ] se arat c pentru orice q,rN cu rq exist un graf, astfel nct (G)=q i (G)=r. Fie G=(X,U) graf, si x,y dou vrfuri neadiacente. Deci .... 7 avem c orice colorare, k, a grafului G-{e} este o q-colorare a grafului G i reciproc. Tot din aceeai propoziie avem c orice colorare a grafului G-{e} cu e=(x,y), k(x)=k(y) induce o colorare a grafului Ge i reciproc. Rezult c ................................................ pe de o parte i c (Ge)(G{e}). Cum G-{e} este subgraf n g, avem (G)(G-{e}), deci (G-{e})=min((Ge), (G-{e})). Pasul 1. Considerm graful G cu x,y dou vrfuri neadiacente. Fie G{e} graful obinut din G prin introducerea arcului e=(x,y) i Ge contracia grafului G, care este de fapt i contracia grafului G{e}. Din cele de mai sus, (dac lum n locul grafului G-{e}, graful G), obinem:

(G)=min((G{e}), V(Ge))
Se consider separat grafurile G{e} sau Ge i se consider acest procedeu pn se obin grafuri care sunt clici. Pentru clici, numrul cromatic este egal cu numrul de vrfuri. Atunci numrul cromatic va fi egal cu numrul maxim de vrfuri din G care pot forma o clic. Acest algoritm este destul de greu de utilizat practic, deoarece apar foarte multe grafuri care sunt analizate. Acest algoritm mai este cunoscut i sub numele de algoritmul legrilor i contraciilor. Un alt algoritm folosit n colorarea vrfurilor unui graf, este algoritmul greedy de colorare. Descrierea acestui algoritm este urmtoarea: 4) Se fixeaz o ordine de parcurgere a vrfurilor grafului. 5) Se atribuie primului vrf culoarea 1 i se parcurge mulimea vrfurilor astfel ordonat. Pentru un vrf se determin, cea mai mic culoare k, dintre cele date pn la momentul respectiv, care i se poate atribui,

astfel nct acest vrf s nu poat fi adiacent cu nici un vrf care este colorat cu culoarea k. 6) Dac o astfel de culoare nu exist, se mrete mulimea culorilor cu o culoare distinct de cele deja existente, iar vrfului i se va atribui aceast culoare. Acest algoritm determin, n general, o q-colorare a grafului, care depinde de ordinea de parcurgere a vrfurilor grafului i nu numrului cromatic. Numrul cromatic va rezulta atunci cnd ordinea de parcurgere a vrfurilor grafului este dat de o permutare care are anumite proprieti, dup cum vom vedea n cele ce urmeaz. (Spunem c v<V v=xi , V=xI) Exp. [CC] pag. 138. Vom considera graful bipartit kn,n V={x1,x2,...,xn){y1,y2,...,yn), din care eliminm mediile (x1,y1),(x2,y2),...,(xn,yn). Deoarece graful este bipartit, avem (G)=2. Dac alegem urmtoarea ordine de parcurgere a vrfurilor {x1,y1,x2,y2,...,xn,yn}, conform acestui algoritm vom avea c k(x1)=1, k(y1)=1, k(x2)=k(y2)=2,... k(xn)=k(yn)=n i deci numrul de colorri corespunztor acestor permutri a vrfurilor este: (G)=n. S presupunem c avem o k-colorare a grafului G i S1,S2,...,Sq sunt clasele de colorare. Fie Sn o permutare, astfel nct ordinea vrfurilor grafului G s fie X=(v1, v2,..., vn). Fie vSj. Notm cu P(v,j), acel vrf ySj (colorat cu culoarea j{1,...,q}) care are proprietatea c este cel mai mic n raport cu ordinea din X dat de permutarea astfel nct x,yU. Prop. 8. Cu notaiile de mai sus, dac pentru orice x,yU i pentru orice j<min(k(x),k(y)) cu proprieti c p(x,j)<p(y,j) implic vp(y,j)U, atunci pentru orice mulime MX-S1 astfel nct subgraful lui G, GM generat de mulimea M este subgraf complet, exist n Gy-S1. vp(M,1) cu proprietatea c GM{v} este subgraf complet n G (generat de mulimea M{v}). Dem. Prin inducie dup (M).
10

Pentru M=1M={x}X-S1. Deoarece xS1 rezult c exist v=p(x,1), vS1, astfel nct vxU, deci M{v} este clic. Presupunem afirmaia adevrat pentru M=k i o demonstrm pentru

M=k+1, kX-S1-1.
Fie M subgraf complet n GX-S1 cu M2. Fie N=p(M,1)=UvS1 p(v,1)S1 i xo=min x. Rezult c exist yoM astfel nct xo=p(yo,1). Folosind ipoteza de inducie, pentru M\{yo}, (care este subgraf complet, deoarece provine dintr-un subgraf complet din care am eliminat un vrf ct i mediile incidente cu el, va exista un vrf zp(M\{yo},1) astfel nct M\{yo}{D} este clic. Avem dou cazuri: iii)
iv)

zyoU, atunci M{z} este clic. zyoU. Vom considera voM\{yo} cu proprietatea c z=p{v,1). n mod clar, yovU (deoarece fac parte din clase diferite) i xo=p(yo,1)<p(v,1)=z. Dar yo p(v,1)=yozU, contradicie:

Consecina 1. (GX-S1)=(G)-1 Dem. Fie MX-S1, clic n GX-S1 cu un numr maxim de vrfuri, astfel nct

xp(M,1) cu proprietatea M{x} este o clic n G. Avem c (G)=|M|+1=(GX-S1)+....


Consecina 2. n condiia proprietii 8 avem c (G)=(G) Dem.

(GX-S1)=|M| i

deoarece |M| este maxim rezult c M{x} este cea mai mare clic, din G, deci

tim c (G)(G) i c (G)(G). Notm (G)=r i fie S1,S2,...,Sr clasele de colorare (corespunztor ordonrii vrfurilor date de permutarea ). Considerm X-S1 i subgraful lui G generat de aceast mulime de vrfuri, GX-S1.

11

Se observ c n acest subgraf, clasele de colorare sunt S2,...,Sr, deci (GXS1)=

(G)-1, deci (G)= (G)=(G) q.e.d.


Algoritmul greedy de colorare

11. Se consider graful G=(X,U) cu |X|=n. 12. Fie o permutare a mulimii X i X={x1, x2,..., xn} aranjarea vrfurilor dat de . 13. Definim pentru i=1, k(x1)=1, (G)=1, S1={ x1}. 14. Pentru i=1. 15. Fie S=1. 16. Determinm cel mai mic vrf dat de ordonare, w, colorat cu culoarea j, deci p(xi ,j) astfel nct (xi ,w)U. 17. Dac exist un astfel de vrf, se face j=j+1 i k(xi )=j, sj={xi}, (G)=j i se repet la pasul 6 pn cnd gsim c nu exist atinge valoarea (G). 18. Dac nu exist un astfel de vrf, notm p(xi,j)=0 i se face Sj=Sj{xi }. 19. Se face i=i+1 i se repet de la pasul 5. n felul acesta, n urma aplicrii algoritmului obinem (G). Pentru a obine numrul cromatic, mergem la pasul.. 20. Dac pentru orice muchie i=(x,y)U i pentru orice j<min(k(x),k(y)) pentru care p(x,j)<p(y,j) avem p(y,j)U, atunci (G)= (G). n cazul n care nu exist nici o ordonare a vrfurilor care s satisfac aceast condiie, nu putem determina (G) cu acest algoritm i aplicm altul, de exemplu algoritmul legrilor i contraciilor. k(i )=j, p(xi ,j) sau pn cnd j

12

13

Curs nr. 11 PROBLEME HAMILTONIENE


Denumirea de graf hamiltonian provine de la numele matematicianului Hamilton, care n 1859 a propus un joc constnd din gsirea unui ciclu elementar care s treac prin toate vrfurile unui dodecaedru regulat, marcate cu numele unor orae din toat lumea. Un graf orientat G=(X,U) se numeste graf hamiltonian dac exist un circuit elementar care trece prin toate vrfurile grafului. Un astfel de circuit se numete circuit hamiltonian. n cazul grafurilor neorietate, un ciclu elementar care trece prin toate vrfurile grafului se numete ciclu hamiltonian, un graf posednd un astfel de de ciclu numindu-se hamiltonian. Dac graful orientat G are n vrfuri, un drum hamiltonian al lui G este un drum elementar de lungime n-1, adic un drum elementar care trece prin toate vrfurilre grafului. n cazul grafului neorientat G un lan hamiltonian se definete n mod analog, ca un lan elementar care trece prin toate vrfurile grafului. Problemele hamiltoniene i gsesc aplicaii la optimizarea unor procese concrete de distribuire sau colectare, la determinarea succesiunii optime de prelucrare a unor piese pe o main, etc. Exemplu: Voiaj nchis n jurul lumii. Vom lua pe globul pmntesc 20 de orae a, b, c, K , t ; presupunem c aceste orae sunt vrfurile unui docaedru regulat ( poliedru cu 12 fee pentagonale i cu 20 de vrfuri) reprezentnd Pmntul. Vom propune trecerea o singur dat i numai o singur dat, prin fiecare dintre aceste orae i revenim la punctul de plecare folosind numai muchiile dodecaedrului. Aceast problem revine la determinarea unui circuit hamiltonian pentru graful simetric din figura 6.

figura 6. Metoda folosit de Hamilton este: cltorul ajungnd la extremitatea unei muchii are de ales ntre muchia care o ia spre dreapta, operaie pe care o notm cu D, sau muchia

care o ia spre stnga, operaiei pe care o vom nota cu S1, sau s rmn pe loc, operaie pe care o vom nota cu 1. Se definete apoi un produs ntre aceste operaii; DS1 este operaia care const n a merge nti pe muchia din dreapta apoi pe cea din stnga; SSD sau S2D este operaia care const n a merge de dou ori la stnga i apoi o dat la dreapt etc. Dou operaii vor fi egale dac plecnd din acelai punct de sosire. Produsul nu este comutativ (adic DS SD) ns este asociativ (adic SSD =S(SD)). Avem formulele: D5=S5=1 DS2D=SDS SD2S=DSD DS3D=S2 SD2S=D2 Se poate scrie: 1=D5=D2D3=(SD3S)D3=(SD3)2=[S(SD3S)D]2=... ...=(S2D3SD)2=[S2(SD3S)DSD]2=[S3D3SDSD]=... ...=SSSDDDSDSDSSSDDDSDSD. Aceast secven comport 20 de litere i nu se poate izola nici o secven parial care s fie egal cu 1; ea reprezint deci un circuit hamiltonian. Un alt circuit se obine citind secvena n sens invers i un raionament simplu ne arat c nu sunt alte circuite hamiltoniene. Voiajul poate s nceap din diferite puncte ale circuitului circular indicat. Hamilton i-a fixat dinainte 5 orae prin care s treac, de exemplu a, b, c, d , e nu a reinut dect voiajurile care nceapeau cu muchia [a, b] i simbolurile DSD i a obinut 4 soluii: DSDSDSSSDDDSDSDSSSDD DSDSSSDDDSDSDSSSDDDS DSDSDDDSSSDSDSDDDSSS DSDDDSSSDSDSDDDSSSDS. Exemplu: Voiaj deschis n jurul lumii. Dac n problema precedent nu se ma i cere s se revin la punctul de plecare, numrul voiajurilor este mult mai mare. Trebuie s se determine toate drumurile hamiltoniene ale grafului din fgura 6.. Vom indica toate vrfurile care indic numai drumurile hamiltoniene care ncep cu D, deoarece celelalte se pot obine din aceste schimbnd literele D i S ntre ele: DDDSDSDSSSDDDSDSDS DSDSSSDDDSDSDSSSDD DSDDDSSSDSDDDSSSDS DSSSDDDSDSDSSSDDDS DSDSSDDDSDSSSDDSDS DDDSSSDSDSDDDSSSDS DSDDDSSSDSDSDDDSSS DSDSDDDSSSDSDSDDDS DDDSDDSDSDSDSSDSSS DDSDSDSSSDDDSDSDSS DDDSSDSDDDSSSDSDSD DSDSDSSSDDDSDSDSSS DDDSDDSDSDSSSDDDSD DSSSDSDSDDDSSSDSDS DDSSSDSDSDDDSSSDSD DSDSDSSSDDDSDSSDDD DSSSDSDSSDDSDSDDDS

DDDSSSDSDSDSDDSDDD DSDDDSSSDSDSDDSDDD DDDSDDSDSDSDSSSDDD DSDSSSDDSDSSDDDSDS DSDSDDDSSSDDSDSSSD DSSSDSDDSSSDDDSDSD DDDSSSDSDSDSDDDSSS DSSSDSDSSDDDSDSSSD DSSSDSDDDSSDSDSSSD DSSSDSDDDSSSDSDDDS (secvenele grupate corespund la operaii egale). Exemplu: Cursa calului pe tabla de ah. (Euler) Vom propune s deplasm un cal pe tabl de ah astfel ca n drumul su s trec o singur dat pe fiecare ptrel. Acest problem, care revine la determinarea unui drum hamiltonian al unui graf simetric, a interesat mai muli matematicieni, mai ales pe Euler, de Moivre, Vandermonde etc. Nu vom putea s dm toate soluiile i metodele folosite pentru rezolvare sunt numeroase. O regul care pare s fie verificat de practic, dar care nu este justificat de teorie, este urmtoarea: vom plasa de fiecare dat calul acolo unde el domin cel mai mic numr de ptrele nc neutilizate. O alt metod const n a cuta un drum nchis pe o jumtate de tabl, s-l dublm prin simetrie s-l racordm. Aceast regul este legat de specificul tabelei de ah i nu poate fi extins la un graf mai general. n cercetarea operaional, determinarea unui drum hamiltonian este cheia a numeroase probleme de ordonanare. Cnd se caut un ordin optim pentru efectuarea unui anumit numr de aciuni, care se reprezint prin punctele x1 , x 2 ,K , x n , se duc arcele (xi , x j ), cnd nu se pierde nimic dac xi se efectueaz nainte de x j i atunci ordonanarea cutat este, n general, indicat prin unul dintre drumurile hamiltoniene ale grafului. Exemplu: Problema crilor (S. Johnson). Un tipograf dispune pentru realizarea a n cri de dou maini, una pentru imprimat, alta pentu legat. Fie a k timpul necesar pentru imprimarea celei de a k -a cri i bk timpul pentru legat. Se nelege, c o carte trebuie mprimat nainte de a fi legat i, prin urmare, maina de legat poate sta mai mult sau mai puin timp. n ce fel trebuie s se lucreze pentru terminarea lucrului ct mai repede posibil? Se vede imediat c nimic nu se schimb dac presupune c n fiecare main crile intr n aceeai ordine. O ordine optim va fi atunci definit de o permutare (i1 , i2 ,K, in ) sau de scven de operaii xi1 , xi2 ,K , xin . Pe de alt parte, se poate arta c ntr-o anumit ordine optim, cartea (i ) va fi plasat naintea crii ( j ) dac: min {a i , b j } min {a j , bi }.

De fiecare dat cnd aceast inegalitate va avea loc, vom duce arcul (xi , x j ) ; pe graful obinut vom cuta un drum hamiltonian i dac el este unic, atunci va indica ordinea optim cutat. Teorema de existen 3

Pn n prezent nu se cunoate o condiie necesar i suficient de existen a ciclurilor (sau lanurilor, drumurilor, circuitelor) hamiltoniene, valabil pentru orice graf, de aceea s-au propus numeroase condiii fie necesare, fie suficiente, pentru existena acestor cofiguraii hamiltoniene. n continuare vom prezenta teorema lui Chvtal i corolarele lui Ore i Dirac relativ la existena circuitelor hamiltoniene n 1-grafurile complete i tare conexe. Teorema 1. Dac G este un graf neorientat cu n vrfuri, n 3 , pentru care irul gradelor vrfurilor sale aranjate n ordine cresctoare d 1 d 2 ... d n verific proprietatea n d k k < implic d n + k n k , 2 rezult c graful G este hamiltonian. Demonstraie: Teorema va fi demonstrat prin reducere la absurd. Vom presupune, prin reducere la absurd, c exist un graf G1 cu n vrfuri pentru care gradele vrfutilor verific condiia din enunul teoremei i care nu este hamiltonian. Vom adugm muchii ntre vrfurile garfului G1 care nu sunt legate prin muchii, att timp ct putem face acest lucru, fr ca graful obinut s devin hamiltonian. Se obine n acest fel un nou graf nehamiltonian G=(X,U), pentru care irul gradelor vrfurilor sale verific n continuare condiia din enunul teoremei, deoarece prin adugare de muchii gradele vrfurilor cresc i care are n plus proprietatea urmtoare: dac se adaug o muchie ntre oricare dou vrfuri neadiacente ale lui G, apare un ciclu hamiltonian. Fie dou vrfuri neadiacente a i b ale lui G pentru care suma gradelor d ( a ) + d (b) este maxim i d ( a ) d (b) . Adugnd muchia [a, b] duce la apariia unui cilclu hamiltonian, rezult c n graful G exist un lan hamiltonian care l unete pe a cu b: [ y1 = a, y 2 , y 3 ..., y n 1 , y n = b]. Notm cu S = {i /[s, y i +1 ] U } i T = {i /[b, y i ] U }. Mulimile de indici S i T sunt disjuncte, deoarece dac exist un indice i S T , n graful G ar exista ciclu hamiltonian: [b, y i , y i 1 ,..., y 2 , a, y i +1 ,..., y n 1 , b] care este desenat in figura 7.

Figura 7.

Dac j S obinem c j T sau b, y j U i deoarece d ( a ) + d (b) este maxim, rezult c d ( y j ) d ( a ) . Deci vor exista n graful G cel puin S vrfuri de grad inferior sau egal cu gradul vrfului a . Vom forma irul gradelor vrfurilor lui G astfel nct aceste S vrfuri s fie aezate naintea vrfului a , ceea ce este posibil deoarece au grade inferioare sau egale cu a . n acest caz

S = d (a) i

1 T = d (b) . ns S T { ,2,..., n 1}, deoarece n S T , deci


n . 2

obinem d S S = d (a) , ntru-ct

d (a) + d (b) = S + T = S + T < n . Dar d ( a ) d (b) , de unde deducem c d (a ) <


Dac notm k = d (a ) , obinem c d k k <

Dac aplicm condiia gradelor fiind cresctor, deducem c i d n k +1 , d n k + 2 ,..., d n sunt superioare sau egale cu n k , deci graful G conine cel puin k + 1 vrfuri de grad mai mare sau egal cu n k . Dar vrful a are gradul k , rezult c exist unul din aceste vrfuri pe care l vom nota c . Acest vrf nu va fi adiacent cu vrful a , deci vom obine: d ( a ) + d (c) d (a ) + d (b) < n deoarece d ( a ) + d (b) valoarea maxim, deducem c d (c) < n k , ceea ce contrazice inegalitate d (c) n k . Vom prezenta n continuare dou consecine ale acestei teoreme, care au fost gsite anterior de O.Ore i respectiv G.Dirac: Corolarul 1.1. Dac G este un graf simplu cu n vrfuri, n 3 , astfel nct pentru orice dou vrfuri neadiecente x i y , s avem: d ( x) + d ( y ) n , rezult c G este hamiltonian. Demonstraie: Vom aranja vrfurile grafului G n ordinea cresctoare a gradelor. Dac un vrf n x k are proprietatea c d k = d ( x k ) k < , atunci exist cel mult k vrfuri adiacente cu 2 x k , deci cel puin n k 1 vrfuri neadiacente cu x k . Conform ipotezei corolarului, aceste vrfuri neadiacente cu x k au gradul superior sau egal cu n k , de unde rezult c d n k n k . Din teorema anterioar rezult c G este graf hamiltonian. Corolarul 1.2. Dac G este un graf simplu cu n vrfuri, n 3 , astfel nct pentru n orice vrf x gradul su d ( x ) , rezult c G este hamiltonian. 2 Demonstraie: 5

n . 2 din enunul teoremei, rezult c d n k n k . irul

Vom apica corolarul anterior, pentru oricare dou vrfuri avem d ( x) + d ( y ) n . n cazul grafurilor orientate exist numeroase condiii suficiente, relative la gradele vrfurilor, care asigur c un 1-graf s fie hamiltonian. De exemplu, teorema lui Meyniel afirm c orice 1-graf fr bucle, cu n vrfuri, tare conexe, care are proprietatea c d + ( x) + d + ( y ) + d ( y ) 2n 1 pentru oricare dou vrfuri neadiacente x , y , este hamiltonian. Urmtorul rezultat se refer la existana circuitelor hamiltoniene n 1-grafurile complete i tare conexe, rezultat datorat lui P.Camion, care apare i ca o consecin a teoremei lui Mayniel, i vom da o demonstraie direct. Teorema 2. Orice 1-graf complet i tare conex este hamiltonian. Demonstraie: Vom presupune c = (a1 , a 2 ,..., a h , a h +1 = a1 ) este circuit elementar de lungime h maxim. S presupuem c exist un vrf b care nu se gsete printre vrfurile care definesc circuitul . n acest caz, dac a i + (b) , rezult c b + (a i 1 ) , deoarece n caz contrar putem prelungi circuitul prin intercalarea vrfului b ntre ai 1 i ai , ceea ce contrazice ipoteza c este un circuit avnd un numr maxim de arce. Graful fiind complet, rezult c a i 1 + (b) i astfel, din aproape n aproape, gsim c a i + (b) pentru orice i = 1,2,..., h . Dac ns b + (a i ) deducem n mod analog c a i +1 + (b) , deoarece este un circuit cu un numr maxim de arce i gradul fiind complect deducem c b + ( ai +1 ) . Prin repetarea acestui raionament, vom obine c b + (a i ) pentru orice i = 1,2,..., h . Deci vrfurile neutilizate de circuitul pot fi mprite n dou clase B1 i B2 , astfel nct dac b B1 , toate arcele care l leag pe b cu vrfurile circuitului sunt dirijate ctre acestea, iar dac b B2 toate arcele care l leag pe b cu vrfurile circuitului sunt dirijate ctre b . n cazul n care nu este un circuit hamiltonian, B1 B2 . Obinem de asemenea c B1 i B2 , deoarece G este tare conex. Aceeai condiie de tare conexitate a lui G implic existena a dou vrfuri b1 B1 i b2 B2 i a unui arc (b2 ,b1 ) de la b2 la b1 .

Figura 8. n acest caz putem forma circuitul elementar (a1 , a 2 ,..., a n , b2 , b1 , a1 ) care conine h + 2 arce (figura 8), ceea ce contrazice ipoteza c este circuit elementar de lungime maxim, astfel teorema este demonstrat. 3. Cicluri hamiltoniene optime
n! lanuri hamiltoniene, 2 deoarece primul vrf al lanului poate fi ales n n moduri, al doilea n n 1 moduri, .a.m.d., rezultnd n final n! posibiliti de alegere a vrfurilor. ns fiecare lan poate fi parcurs n dou sensuri diferite, rezultnd dou permutri distincte ale celor n vrfuri, de aceea numrul n! al permutrilor celor n vrfuri trebuie mprit la doi. Acest numr 6! crete foarte repede odat cu n . n timp ce pentru graful K 6 exist = 360 lanuri 2 16! hamiltoniene, pentru K 16 acest numr este egal cu 1013 lanuri hamiltoniene. n 2 mod analog se poate obine c numrul ciclurilor hamiltoniene ale grafului K n este egal (n 1)! pentru orice n 3 . cu 2 Dac fixm cele dou extremiti ale lanurilor, vor exista ( n 2)! lanuti hamiltoniene cu extremitile fixate, corespunztoare permutrilor celor n 2 vrfuri intermediare ale acestor lanuri. Acest lucru face imposibil enumerarea configuraiilor hamiltoniene ale grafului complet K n pentru valorile ale lui n care apar n probleme reale. Dac toate muchiile u ale grafului complet K n au asociat o lungime l(u ) 0 , care poate avea i intrepretarea unui cost, ciclu hamiltonian minim este ciclu hamiltonian al grafului K n pentru care suma lungimilor muchiilor sale este minim. Acest ciclu

Graful neorientat i complet cu n vrfuri, K n , conine

hamiltonian minim nu este intotdeauna unic. La fel se definete lanul hamiltonian minim, iar n cazul orientat circuitul, respectiv drumul hamiltonian minim. Exemplu: Vom considera o problem de prelucrare a n piese, p1 , p 2 ,..., p n pe o main, astfel nct la trecerea de la prelucrarea piesei p i la prelucrarea piesei p j se consum un anumit timp, t ij 0 . Se cere s se determine acea succesiune de prelucrare a celor n piese, astfel nct timpul total de nefuncionare al mainii s fie minim. Exemplului de mai sus i putem asocia un graf orientat ale crui vrfuri reprezint cele n piese, lungimea arcului de la vrful care reprezint piesa p i la vrful care reprezint piesa p j fiind egal cu t ij . Problema de gsire a succesiunii optime de prelucrare a celor n piese se reduce astfel la problema gsirii drumului hamiltonian minim n graful asociat acestei probleme. Dac vrfurile unui graf G reprezint n localiti, iar lungimle muchiilor reprezint distanele ntre aceste localiti, problema ciclului hamiltonian minim este problema numit i voiajorul comercial. Acest voiajor trebuie s viziteze toate cele n localiti ntorcndu-se de unde a plecat, astfel nct distana parcurs s fie minim. Problema colectrii corespondenei de la un numr dat de cutii potale cu minimizarea lungimii traseului este tot o problem de ciclu hamiltonian minim, respectiv de circuit hamiltonian minim n cazul n care matricea distanelor dintre cutii nu este simetric, n ora putnd exista strzi cu un sens unic. n cazul grafurilor neorientate, distingem trei tipuri de probleme de trasee hamitoniene minime i anume: Lan hamiltonian minim; Lan hamiltonian minim cu extremitile fixate, i1 i i 2 ; Ciclu hamiltonian minim. Vom nota un lan hamiltonian minim prin LHM i prin LHM(X, A) vom intelege un lan hamiltonian minim relativ la graful cu mulimea vrfurilor X i matricea lungimilor muchiilor A. Dac lanul hamiltonian are extremitile i1 i i 2 fixate, l vom nota prin LHM i ,i ( X , A) . Un ciclu hamiltonian minim n graful complet cu mulimea 1 2 vrfurilor X i matricea lungimilor A va fi notat CHM sau CHM(X,A). Din punct de vedere al rezolvrii aceste trei probleme sunt echivalente ntre ele ( vom arta acest lucru), adic un algoritm pentru rezolvarea uneia oarecare dintre ele este n acelai timp un algoritm pentru rezolvarea celorlalte dou, cu mici modificri ale mulimi X a vrfurilor grafului sau ale matricei lungimilor A. Vom presupnem c tim s rezolvm prima problema, adic tim s gsim un LHM. Vom modifica datele pentru problema a doua schimbnd matricea A astfel: adunm la elementele liniilor i1 i i2 , ca i la elementele coloanelor i1 i i2 un acelai numr k , mai mare ca lungimea oricrui lan hamiltonian din graful G cu matricea lungimilor A. De exemplu, pentru k putem alege suma elementlor matricei A. Observm c prin aceast transformare elementele situate pe poziiile (i1 ,i2 ) i (i2 ,i1 ) se vor mri cu 2k , iar elementele care nu se gsesc pe liniile sau coloanele cu indicii i1 sau i2 rmn neschimbate. Elementele de pe diagonala principal a matricei A

vor rmne neschimbate, egale cu zero, deoarece ele nu au nici o semnificaie pentru problema considerat. Vom arta c un LHM pentru graful G cu matricea lungimilor modificat, pe care o notm Ai1 ,i2 este un LHM i ,i ( X , A) . Pot apare trei situaii, dup cum LHM(X, Ai1 ,i2 ) are
1 2

ca extremiti: 1. pe i1 i i2 ; 2. una dintre extremiti este i1 sau i2 , iar cealalt extremitate este diferit de i1 i i2 ; 3. ambele extremiti sunt diferite de i1 i i2 . Vom arta c situaiile 2. i 3. nu sunt posibile, ele contrazicnd ipoteza de minimalitate a lanului hamiltonian, din nodul de alegere a constantei k . n cazul 1. dac vom nota lungimea unui LHM(X, Ai1 ,i2 ) prin l , acelai lan hamiltonian n graful cu matricea lungimilor A va avea o lungime l 1 , astfel nct: l = l 1 + 2k deoarece acest lan conine numai dou nuchii care se leag de i1 i i2 , a cror lungime a fost mrit cu cte k uniti. n cazul 2. avem urmatoarea situaie: l = l 1 + 3k , deoarece i1 i i2 pot fi vrfuri vecine n lanul hamiltonian LHM(X, Ai1 ,i2 ) sau nu, ns n ambele cazuri lungimile muchiilor adiacenta cu aceste vrfuri cresc n total cu

3k uniti.
n cazul 3. va exista realaia:

l = l 1 + 4k , indiferent dac i1 i i2 sunt vrfurile vecine sau nu n lanul hamitonian considerat, deoarece lungimea muchiei [i1 ,i2 ] din matricea A a fost mrit cu 2k , iar lungimile muchiilor avnd o singur extremitate i1 sau i2 au crescut cu k . Vom demonstra c numai cazul 1. este posibil. Presupunem c LHM(X, Ai1 ,i2 ) are lungimea l i ne
gsim n cazul 2., lungimea lui pentru maricea A va fi l 1 , astfel nct l = l 1 + 3k . Vom considera un LHM i1 ,i2 (X, Ai1 ,i2 ) oarecare, de lungime L. Observm c lungimea lui L1 pentru matricea A verific egalitatea L = L1 + 2k , de unde rezult c L < l sau: L1 + 2k < l 1 + 3k , adic L1 l 1 < k , inegalitate adevrat, deoarece k a fost ales mai mare dect lungimea oricrui lan hamiltonian n graful G cu matricea A. Deci k > L1 L1 l 1 , lungimile muchiilor fiind numere ne-negative. Am ajuns deci la o contradicie i anume c LHM(X, Ai1 ,i2 ) nu este minim, deoarece oricare alt lan hamiltonian cu extremitile i1 i i2 are o lungime strict mai mic. Analog se trateaz i cazul 3., deci am demonstrat astfel LHM(X, Ai1 ,i2 ) este un LHM i1 ,i2 (X,A). 9

Vom arta n continuare c dac tim s rezolvm problema a dou, putem rezolva i problema 1. Dac adugam la graful G dou noi vrfuri, x n +1 i x n + 2 , deci X 1 = X {x n +1 , x n + 2 } i dac definim lungimea muchiilor [x n +1 , xi ] cu i = 1,..., n ca fiind egale cu a , iar lungimea muchiilor x j , x n + 2

cu j = 1,..., n fiind egal cu b ,

iar a, b 0 . Muchiei [x n +1 , x n + 2 ] i vom asocia o lungime oarecare c 0 . Dac gsim n graful cu mulimea de vrfuri X1 un LHM xn +1 , xn + 2 , atunci suprimnd-i extremitile i muchiile adiacente lor se obinem un LHM n graful G cu mulimea de vrfuri X. Vom presupunem c lanul hamiltonian astfel obinut n graful G nu ar fi minim, l-am putea nlocui printr-un LHM, obinnd un lan hamiltonian cu extremitile x n +1 i x n + 2 n graful cu mulimea de vrfuri X 1 mai scurt dect cel minim, ceea ce este absurd. Deci primele probleme sunt echivalente din punct de vedere al rezolvrii. Vom arta c tiind s rezolvm problema 2. putem rezolva i problema 3. astfel: Vom aduga un nou vrf x n +1 , la mulimea X de vrfuri a grafului iniial cu matricea lungimilor A. Alegem un vrf oarecare x p n mulimea X i vom defini ca fiind egal cu lungimea muchiei x p , xi
i = 1,2,..., n i i p , iar lungimea muchiei

lungimea muchiei [x n +1 , xi ]

[x

n +1

, x p o vom alege zero. Aceasta

pentru

revine la completarea matricei lungimilor A cu nc o linie i o coloan, cu a n +1,i = a i ,n +1 = a i , p pentru i = 1,2,..., n . Pentru graful obinut determinm un

LHM x p , xn +1 . Vom presupunem c pentru

acest lan hamiltonian vrful vecin cu x n +1 este x j , vom suprima muchia x n +1 , x j i o vom nlocui prin muchia x j , x p care are aceeai lungime. Astfel se obine un ciclu hamiltonian n graful iniial G. Se demonstreaz, prin reducere la absurd, c acesta este un CHM(X,A), deci ultima problema se rezolv ca o problem 2., dar intr-un alt graf. Vom arta n continuare c dac rezolvm prima problem se poate reduce la rezolvarea ultimei probleme, ceea ce va demonstra echivalena celor trei probleme. Pentru aceasta vom aduga la gradul G cu mulimea vrfurilor X un nou vrf x n +1 , pe care l legm cu vrfurile din X prin muchii avnd toate o aceeai lungime a 0. Gsind un CHM n graful cu mulimea de vrfuri X 1 = X {x n +1 }, prin suprimarea muchiilor care l unesc pe x n +1 cu cele dou vrfuri din X se obine un LHM n graful iniial. Demonstraia minimalitii lanului hamiltonian astfel obinut se face prin reducere la absurd, deoarece din orice lan hamiltonian n X se obine un ciclu hamiltonian n X1 de lungime mai mare cu 2a , prin legarea extremitilor sale cu noul vrf x n +1 , prin muchii de lungimea a . i n cazul grafurilor orientate pentru drumuri i circuite hamiltoniene cele trei probleme se pot enuna iar demonstraia lor va fi analoag cu cazul neorientat. 10

Problemele hamiltoniene sunt probleme NP-complete, adic probleme pentru care nu exist pn n prezent nici un algoritm de rezolvare care s implice un numr de operaii majorat de o limit superioar de natur polinomial. Deci pentru un graf oarecare cu n vrfuri i pentru orice algoritm disponibil n prezent pentru rezolvarea problemei hamiltoniene, nu exist nici un polinom n n de un grad fixat, care s reprezinte o margine superioar pentru numrul de operaii necesitate de acest algoritm. Din aceast cauz pentru rezolvarea acestor probleme au fost propui numeroi algoritmi aproximativi , care nu produc neaprat soluia optim, ns necesit un volum rezonabil de calcule. Pentru rezolvara primei probleme vom prezenta un algoritm de aproximare, iar pentru a doua problem vom presupune algoritmul lui Christofides, propus ntr-o alt variant i de Held i Carp. Vom determina cu algoritmul lui Kruskal un arbore parial de lungime minim pentru un graf neorientat i complet cu n vrfuri G , care are asociat o matrice ptratic A de ordinul n a lungimilor muchiilor. Dac arborele are vrfuri de gradul 1i de gradul 2, atunci el este un lan hamitonian, deci este chiar un LHM, deoarece mulimea lanurilor hamiltoniene ale unui graf este inclus n mulimea arborilor pariali ai grafului. Vom arta c dac un arbore parial al lui G are numai vrfuri de gradul 1 i de gradul 2, atunci el este un lan hamiltonian al lui G. Dac notm prin q numrul vrfurilor arborelui de grad 1, rezult c n q vrfuri sunt de gradul 2. Deoarece suma gradelor vrfurilor este egal cu dublul numrului de muchii, rezult c: q + 2(n q ) = 2(n 1) , deoarece un arbore cu n vrfuri are n 1 muchii. Deducem c q = 2 , deci arborele are exact dou vrfuri de grad 1 i n 2 vrfuri de gradul 2, deci el este un lan hamiltonian. Dac arborele parial minim nu este lan hamiltonian, vom descrie un algoritm de obinere a unui lan hamiltonian care pornete de la arborele parial minim, pe care l transform ntr-un lan hamiltonian, cu minimizarea la fiecare pas a creterii lungimii totale. Lanul hamiltonian obinut n urma aplicrii algoritmului care va fi descirs nu este intotdeauna un LHM al grafului G. Pentru a justificarea algoritmului, observm mai nti c un arbore parial al unui graf complet, arbore care nu este lan hamiltonian, se poate transforma ntr-un arbore parial care s conin vrfuri cu grade mai mici, prin urmtoarele operaii: Operaia A: Se unesc dou vrfuri terminare x i y printr-o muchie [x, y ] , ceea ce produce apariia unui ciclu unic. Pe acest ciclu va exista cel puin un vrf z de grad d (z ) 3 , deoarece n caz contrar arborele de la care am plecat are un lan hamiltonian, ceea ce contrazice ipoteza fcut. Dac vom suprima din acest ciclu o muchie [v, z ] adiacent cu un vrf z de grad mai mare ca 2, graful obinut este tot un arbore, care are un vrf sau dou vrfuri de grad mai mare ca 2 pentru care gradul s-a micorat cu cte o unitate, fr s mai apar alte vrfuri de grad mai mare ca 2. 11

Operaia B: Un vrf terminal y , legat de un vrf x cu d (x ) 3 se intercaleaz ntre alte dou vrfuri, z i t , legate printr-o muchie, astfel nct gradele vrfurilor z i t s fie cel mult 2. Pentru aceasta, se suprim muchiile [x, y ] i [z, t ] i se adaug muchiile [ y, z ] i [ y, t ]. Operaia C: Un vrf neterminal v , legat de un vrf x cu d (x ) 3 se leag printr-o muchie cu un vrf terminal y care are proprietatea c vrful v nu aparine lanului unic care l unete, n arborele parial considerat, pe x cu y . Apoi se suprim muchia [x, v] obinndu-se tot un arbore. S observm c lanul care l unete pe x cu y trece prin v , prin adugarea muchiei [v, y ] se formeaz un ciclu i graful obinut nu mai este arbore. n primul caz creterea costului arborelui este egal cu l[x, y ] l[v, z ] , n al doilea caz ea este egal cu l[ y, z ] + l[ y, t ] l[x, y ] l[z, t ] , iar n al treilea caz ea este egal cu l[v, y ] l[x, v] . S observm c prin operaiile A, B sau C numrul vrfurilor de grad mai mare ca 2 ale arborelui se micoreaz cu cel puin o unitate. Dup aplicarea repetat a acestui procedeu vom obine un arbore care conine numai vrfuri de gradul 1 sau 2, deci care este un lan hamiltonian. Pentru ca lanul hamiltonian obinut s aib o lungime ct mai mic, vom alege transformrile fcute asupra arborelui, astfel nct la fiecare etap s se minimizeze creterea lungimii arborelui. Pentru aceasta vom proceda in felul urmtor: 1) Vom alctui lista vrfurilor terminale y1 , y 2 ,..., y p ale arborelui, adic a vrfurilor de grad 1. Pentru fiecare vrf yi vom considera pe rnd toate vrfurile y j cu j > i . Pentru un j ales, vom determina cea mai lung muchie a lanului care l unete pe yi cu y j , adiacent cu un vrf de grad mai mare ca 2, apoi vom determina creterea lungimii corespunztoare eliminrii acestei muchii i a adugrii muchiei y i , y j cu operaia A. Pentru fiecare vrf terminar vom calcula apoi creterea minim a lungimilor, corespunztoare legrii sale prin muchii cu celelalte vrfuri terminale, de indice mai mare. 2) Pentru toate vrfurile terminale y , legate de vrfuri de grad mai mare ca 2, vom determina minimul creterii lungimii arborelui prin operaia B. 3) Pentru toate vrfurle neterminare v , legate de vrfuri x de grad mai mare ca 2, vom demonstra minimul creterii lungimii arborelui prin legarea lor cu vrfuri terminale y i suprimarea muchiei [v, x] prin operaia C. 4) Dintre minimele calculate la 1), 2) i 3) vom alege cea mai mic valoare i vom efectua asupra arborelui operaia care realizeaz aceast cretere minim a lungimii. Dac exist mai multe operaii care realizeaz aceeai cretere minim, vom alege acea transformare care produce scderea gradului a dou vrfuri de grad superior lui 2 cu cte o unitate, dac o

12

astfel de transformare exist, adic produce scderea gradului unui numr maxim de vrfuri ale arborelui. Aplicm transformarea care realizeaz minimul creterii lungimii arborelui, de tipul A, B sau C. Dac arborele obinut are numai vrfuri de gradul 1 sau 2, adic este un lan hamiltonian, ne oprim. Dac nu, se reia algoritmul de la punctul 1). Deoarece la fiecare iteraie algoritmul produce scderea cu o unitate a gradului cel puin unui vrf de grad mai mare ca 2, rezult c numrul de iteraii ale acestui algoritm pn la obinerea unui lan hamiltonian este majorat de (d ( x) 2) , iar d ( x) 3 .
x

Vom aplicm acest algoritm pentru K 8 , care are vrfurile notate 1,2,...,8 , iar lungimile muchiilor sunt trecute n urmtoarul tabel, la intersecia liniei i cu coloana j (i < j ) gsindu-se lungimea muchiei [i, j ] : 2 3 4 5 6 7 8 2 7 15 10 8 9 21 23 45 35 14 7 5 8 11 17 13 22 12 32 21 15 42 38 19 31 36 18

Vom presupunem c vrem s gsim un LHM1,3. Vom transforma aceeast problem de tip lan hamiltonian minim cu extremiti fixate, i1 i i2 , ntr-o problem de tip lan hamiltonian minim, adunnd o constant, suficient de mare, de exemplu k = 300 la liniile i coloanele cu indicii 1 i 3 ale matricei lungimilor muchiilor, ceea ce are ca efect modificarea tabelului de mai sus, care va devini: 2 3 4 5 6 7 8 302 607 315 310 308 309 321 323 45 35 14 7 5 308 311 317 313 322 12 32 21 15 42 38 19 31 36 18 Arborele minim, corespunztor acestui tabel al lungimilor, este desenat n figura 3. Acest arbore nu este un lan hamiltonian, deoarece vrfurile 2 i 4 au grade mai mari ca 2.

13

figura 9. Vom aplica algoritmul descris, prin operaia A gsim minimul creterii lungimii egale cu 3, care corespunde adugrii muchiei [3,5] i eliminrii [3,4] . Operaia B nu se poate aplica, deoarece nu exist dou vrfuri vecine de grad mai mici ca 3. Prin operaia C, care poate fi aplicat relativ la vrful neterminal 8, care este legat de vrfurile 2 i 4 de grade mai mare ca 2, gsim minimul creterii lungimii arborelui egal cu 4, care corespunde adugrii muchiei [8,5] i eliminrii muchiei [4,8] . Deci minimul creterii lungimii prin operaiile A, B sau C se atinge prin adugarea muchiei [3,5] i eliminarea muchei [3,4] , oinndu-se arborele din figura 10, pentru care vrful 4 a devenit de grad 2. Pentru acest arbore sunt posibile i operaii de intercalare a unui vrf ntre alte dou vrfuri vecine de gradul 1 sau 2. Efectunnd calculele, se obine minimul creterii lungimii egal cu 6, care corespunde adugrii mchiei [1,6] i eliminrii muchiei [1,2] printr-o operaie de tipul A. Fcnd aceast transformare, se obine arborele din figura 11. pentru vrful 2 i-a micorat gradul cu o unitate.

figura 10.

figura 11.

Pentru acest arbore sunt posibile cele trei tipuri de operaii, ns minimul creterii lungimii se atinge pentru operaia de tipul C care const n adugarea muchiei [7,8] i eliminarea muchiei [2,8] , cu creterea lungimii de 13 uniti. Vom obine arborele din figura 12., care conine numai vrfuri de gradul 1 sau 2, deci care este un lan hamiltonian de lungime egal cu 85.

14

figura 12. Prin aplicarea algoritmuluilui Christofides, vom arta c acest lan hamiltonian este chiar un LHM1,3. Direct ar trebui s calculm lungimile a 6!= 720 lanuri hamitoniene cu extremitile 1 i 3 i s alegem minimul acestor lungimi. 4. Algoritmul lui Christofides

Pentru rezolvarea problemei determinrii unui lanului hamiltonian minim cu extremitile fixate, i1 i i2 a fost conceput algoritmul lui Christofides. Vom defini un vector p cu componentele p(i ) , unde i = 1,2,..., n , care sunt numere reale ne-negative, alese arbitrar. Dac modificm matricea A a lungimilor muchiilor, definnd: ' aij = aij + p(i ) + p( j ) pentru orice i, j = 1,..., n i i j se obine o nou matrice A a lungimilor muchiilor care are proprietatea c nu produce schimbri n ordonarea dup lungime a lanurilor hamiltoniene de extremiti finite i1 i i2 . Cu alte cuvinte, dac dou lanuri hamiltoniene de extremiti i1 i i2 avem lungimile l 1 i l 2 astfel nct l 1 l 2 , atunci aceleai lanuri, relativ la matricea A au lungimile l '1 i l '2 , care verific inegalitatea l '1 l '2 . Avem:

l '1 = l1 + p(i1 ) + p(i2 ) + 2 p(i ) , (1) l = l 2 + p(i1 ) + p(i2 ) + 2 p(i ) (2)


' 2 i i1 ,i2 i i1 ,i2

Dac (2)-(1), rezult c: l 2 l 1 = l l . Proprietatea de mai sus de datorete faptului c lungimea fiecrui muchii se mrete cu suma numerelor asociate prin vectorul p extremitilor sale, iar n p(i )
' 2 ' 1

unde i i1 ,i2 nu conteaz ordinea n care lanul hamiltonian ntlnete celelalte n 2 vrfuri ale grafului G. 15

Pe aceasta proprietatea se bazeaz algoritmul lui Christofides de determinare a unui LHM i1 ,i2 . Algoritmul lui Christofides const n urmtoarele: Se determin un arbore parial minim al grafului dat, cu matricea lungimilor modificat prin adugarea unei constante suficient de mari la liniile i coloanele cu indicii i1 i i2 . Dac acest arbore are numai vrfuri de gradul 1 sau 2, atunci el este un LHM i1 ,i2 .

n caz contrar, vom defini vectorul p cu componente p(i ) astfel: p(i ) = 0 dac vrful de indice i are gradul 1 sau 2; p(i ) = k (d (i ) 2) dac gradul vrfului i , notat d (i ) este mai mare ca 2. k este o constant care se alege n mod arbitrar, avnd ns o valaore nu prea mare fa de datele problemei ( acest lucru l vom vedea ntr-un exemplu). Vom modifica matricea A a lungimilor, folosind componentele vectorului de penalizare dup formula dat i vom determina din nou un arbore minim pentru noua matrice a lungimilor muchiilor. Dac acest arbore este un lan hamiltonian, el este un LHM i1 ,i2 i ne oprim. n caz

contrar, pe baza gradelor vrfurilor acestui arbore, definim un nou vector p , obinem o nou matrice a lungimilor i un nou arbore minim, .a.m.d. Observm c vectorul p produce penalizarea acelor vrfuri care au un grad mai mare ca 2, deci care fac ca arborele s nu fie un LHM i1 ,i2 . Vom mrii lungimea muchiilor adiacente cu aceste vrfuri, se poate ca n noul arbore minim s nu mai fie selectate toate aceste muchii, deci arborele minimse poate apropria de un lan hamiltonian. n aplicarea metodei de penalizare putem da diferite valori constantei de penalizare k , valori care pot diferi de la pas la pas. Se poate ntmpla ca s obinem pe parcursul acelai arbori care nu sunt lanuri sau ca aceste iteraii s nu se sfreasc niciodat, algoritmul neavnd n toate cazurile posibile un numr finit de pai. Dificultatea aplicrii algoritmului const n aceea c nu cunoatem aprioric valorile constantei de penalizare care s ne conduc cel mai rapid la soluie. Justificarea algoritmului se bazeaz pe proprietatea anterioar, care afirm c prin politica de penalizare lanurile hamiltonieine minime cu extremitile fixate sunt aceleai i dup penalizarea anumitor vrfuri. Cnd, arborele minim devine lan hamiltonian, el va fi chiar soluia problemei. Vom aplica acest algoritm pentru gsirea unui LHM1,3 n graful cu lungimile muchiilor reprezentate n tabelul 1. Prin modificarea corespunztoare a matricei lungimilor se obine tabelul 2 i arborele minim din figura 8. Fie constanta de penalizare k = 4 , pe care o vom menine pe parcursul aplicrii algoritmului lui Christofides. Pentru arborele din figura 8. obinem d (4) = 3 i d (2) = 4 , deci vectorul de penalizare va fi: p = (0,8,0,4,0,0,0,0) , care va modifica tabelul lungimilor muchiilor, obinndu-se tabelul 3. 2 3 4 5 6 7 8 310 607 319 310 308 309 321 331 57 43 22 15 13 312 311 317 313 322 16 36 25 19 16

42

38 31

19 36 18

Tabelul 3. 2 3 4 5 6 7 8 302 607 315 310 308 309 321 323 45 35 14 7 5 308 311 317 313 322 12 32 21 15 42 38 19 31 36 18 Tabelul 4.

Pentru aceste noi lungimi, arborele minim este reprezentat n figura 10. Numai vrful 2 are gradul mai mare ca doi. Vectorul de penalizare nou va fi: p = (0,4,0,0,0,0,0,0) , care va produce modificarea lungimilor muchiilor care conin vrful 2, obinndu-se tabelul 4. Pentru acest tabel se obine arborele minim din figura 13.

figura 13. Pentru acest arbore d (8) = 3 , deci vectorul de penalizare va fi: p = (0,0,0,0,0,0,0,4) , ceea ce va genera noul tabel al lungimilor, 2.5. Unul din arborii minimi pentru acest tabel coincide cu arborele minim pentru tabelul 2.3 i el este vectorul de penalizare va fi: reprezentat n figura 10. Deoarece d ( 2) = 3 , p = (0,4,0,0,0,0,0,0) , n noul tabel al lungimilor muchiilor este 6.

3 4 5 6 7 8 314 607 319 310 308 309 325 335 61 47 26 19 21 312 311 317 313 326

17

16 42 38 31

36 23 40 22

25

23

Tabelul 5. 3 4 5 6 7 8 318 607 319 310 308 309 325 339 65 51 30 23 25 312 311 317 313 326 16 36 25 23 42 38 23 31 40 22 Tabelul 6.

Pentru aceste noi lungimi ale muchiilor exist doi arbori minimi. Unul dintre acetia este lanul hamiltonian din figura 11, care astfel am artat c este un LHM1,3. Dac aplicarea algoritmului lui Christofides comport prea multe etape, putem transforma unul dintre arborii obinui pe parcurs, care are un numr mic de vrfuri de grad mai mare ca 2 ntr-un lan hamiltonian, cu algoritmul anterior de transformare a unui arbore ntr-un lan hamiltonian cu minimizarea creterii lungimii. Astfel, dac pentru oricare din cei 3 arbori obinui n cursul aplicrii algoritmului lui Christofides i reprezentani n figurile 8., 10., 12. aplicm algoritmul menionat, se obine lanul hamiltonian minim cu extremitile 1 i 3 din figura 11.

18

Curs nr. 12 PROBLEME HAMILTONIENE (continuare)


GRAFURI ORIENTATE

1. Dac G este un graf orientat i fr circuite i T ' este matricea sa conex terminal triangularizat, atunci primul element diferit de zero din fiecare linie a acestei matrici i ultimul element diferint de zero din fiecare coloan sunt elemente arc. Rezolvare: ' ' a) Fie t ij 0 primul element de pe linia xi' . Dac t ij nu este element ' arc, atunci exist un vrf x m pe drumul de la xi' la x 'j . n matricea ' ' ' T ' , t im 0 precede pe t ij din linia xi' ceea ce contrazice faptul c t ij ' este primul element diferit de zero de pe aceast linie, deci t ij reprezint un arc. ' b) Presepunem c t ij este ultimul element diferit de zero de pe coloana ' j . Din definiia matricei triunghiulare, t ij este primul element de pe ' linia i considerat la punctul precedent. Dac elementul t ij nu este primul element de pe linie, el poate fi adus pe primul loc ntr-o linie printr-o schimbare a liniilor i coloanelor ntre ele. 2. Dac G este un graf de ordinul N , orientat fr circuite, atunci el conine un drum hamiltonian, dac numrul elementelor diferite de zero din T este egal cu
N ( N 1) . 2

Rezolvare: Un drum hamiltonian este un drum care trece prin fiecare vrf al grafului, folosind fiecare vrf o singur dat. Dac graful este de ordinul n , lungimea unui drum hamiltonian, n ipoteza c acesta exist, este egal cu n 1. Vom presupunem c matricea T are zero. Matricea T poate fi triangularizat (adic elementele sale de sub i de
1

N ( N 1) elemente diferite de 2

pe diagonala principal sunt nule). Fie T matricea conex terminal ' ' triangularizat ale crui linii corespund n ordine, la vrfurile x1' , x 2 ,K , x N , i ale crei elemente situate deasupra diagonalei principale sunt toate diferite de zero. Dup rezultatul problemei anteriore, fiecare element diferit de zero din T ' este element arc, iar succesiunea de arce corespunztoare la primul element diferit de zero din fiecare linie este un drum hamiltonian. 3. Un graf orientat i fr circuite nu poate avea dect un singur drum hamiltonian. Rezolvare: ' ' Singura succesiune a vrfurilor x1' , x 2 ,K , x N ce conduce la un drum ' ' ' ' hamiltonian este de forma (x1' , x 2 ), (x 2 , x3' ),K , (x N 1 , x N ). Orice alt succesiune a tuturor vrfurilor conine cel puin o inversiune a indicilor, cci dac presupunem c mai exist un drum hamiltonian atunci succesiunea de vrfuri corespunztoare conine cel puin un arc de forma (xi' , x 'j ) cu j < i . De ' aici, linia x 'j precede linia xi' n T ' , deci t ij = 1 adic exist cel puin un drum de la x 'j la xi' ceea ce este incompatibil cu existena n graf a arcului (xi' , x 'j ) , cu care ar forma un circuit. 4. Pentru graful G de ordinul N , orientat i fr circuite, se cere s se determine un drum hamiltonian. Rezolvare: Pentru determinarea unui drum hamiltonian n graful G de ordinul N , orientat i fr circuite, se cunoate urmtorul algoritm: a) construim matricea terminal T ; b) dac elementele diagonalei principale din matricea T sunt toate nule i numrul elementelor diferite de zero din T este
N ( N 1) , G are un drum hamiltonian; 2

c) aranjm succesiunea punctelor de atingere ale vrfurilor n ordinea descresctoare i obinem drumul hamiltonian. 5. Pentru graful G reprezentat n figura 1a. s se determine un drum hamiltonian. Rezolvare:

figura 1a. Vom scrie matrcea boolean B i matricea conex terminal T corespunztoare grafului dat:
0 1 1 B= 0 1 0 0 0 0 0 1 0 0 1 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0 0 1 1 T= 1 1 1 0 0 0 1 1 0 0 1 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 1 0

Deoarece pe diagonala principal din matricea T , toate elementele sunt egale cu zero (deci, graful nu admite circuite) i numrul elementelor diferite de zero este 15 =

N ( N 1) , rezult c graful dat admite un drum 2

hamiltonian. Folosind punctul c) din algoritmul prezentat n problema anterioar, gsim dup aranjarea vrfurilor grafului n ordinea descresctoare a puterilor de atingere, urmtorul drum hamiltonian: d H = (4,5,2,6,3,1) . 6. Fie 5 produse Pi (i = 1,K,5) , care vor trebui prelucrate corespunztor unei relaii de ordine stabilite datorit necesitilor produciei. Relaiile de ordine sunt urmtoarele: - produsul P2 precede produsele P1 , P4 i P5 ; - produsul P3 precede produsele P2 i P4 ;
3

- produsul P4 precede produsele P1 i P5 ; - produsul P5 precede produsele P1 . Se cere s se cerceteze dac e posibil prelucrarea produselor innd cont de relaiile de ordine stabilite; dac acest lucru este posibil, se cere s se determine succesiunea n care s poate face prelucrarea. Rezolvare:

figura 2a. Vom defini un graf G, ca n figura 2a, care are 5 vrfuri corespunztoare produselor date, iar aplicaia definit de relaiile de ordine date. Problema va reveni la a determina un drum hamiltonian n acest graf care nu are circuite. Matricea terminal corespunztoare este:
P1 P2 P3 0 0 0 1 0 0 T= 1 1 0 1 0 0 1 0 0
10 =

P4 P5 0 0 1 1 1 1 0 1 0 0

P1 P2 P3 P4 P5

N ( N 1) , graful G are un drum hamiltonian; succesiunea vrfurilor 2

Deoarece elementelor diferite de zero din matricea T

este

grafului, dat de ordinea descresctoare a puterilor de atingere, determin


4

drumul hamiltonian d H = (P3 , P2 , P4 , P5 , P1 ) , care ne d i ordinea de prelucrare a produselor. 7. Prelucrarea unui produs oarecare impune s treac prin 6 secii folosind benzile de transport existente ntre aceste secii benzi ce sunt reprezentate prin arcele grafului G din figaura 3a.

. figura 4a. Presupunnd c nu exist o ordine preferenial n prelucrarea produsului n cele 6 secii, s se cerceteze dac sistemul de benzi existente poate asigura transportul produsului prin cele 6 secii existente; dac acest lucru nu se poate realiza, care este numrul minim de benzi ce vor trebuie construite, astfel nct problema transportului n cele 6 secii s fie posibil. Rezolvare: i aceast problem va reveni la cercetarea drumurilor hamiltoniene pentru graful considerat. Din matricea terminal:
1 2 3 4 5 6 0 0 0 0 0 0 1 1 0 1 0 0 1 2

T=

1 1 1 0

0 0 0 0 5

0 1 0 0

0 0 0 0

0 1 0 0

0 1 1 0

3 4 5 6

se observ c condiia din problema 2. nu este ndeplinit, deci asigurarea transportului cu numrul existent de benzi nu se poate face . Dac n triangularizarea matricei T vom alege o asemenea ordine nct numrul zerourilor care se aeaz imediat deasupra diagonalei principale s fie ct mai mic (alegnd dintre liniile cu aceeai putere de atingere cele corespunztoare coloanelor cu mai puine zerouri), vom obine matricea T ' :
4 5 2 6 3 1 0 1 0 1 1 1 4 0 0 0 1 0 1 5

T' =

Adugarea acelor (5,2) i (6,3) , ceea ce corespunde la instalarea benzilor ntre seciile 5,2 i 6,3 , asigu transportul produsului ntre cele 6 secii, care va trebui organizat n ordinea: 4,5,2,6,3,1 . 8. Pentru graful G de ordinul n orientat ce conine circuite se cere s se determine drumurile hamiltoniane. Rezolvare: Determinarea drumurilor hamiltoniene ntr-un graf G, folosind descompunerea grafului n componente tare conexe: a) determinm componentele tare conexe ale grafului dat. b) determinm matricea conex a grafului condensat; c) determinm drumul hamiltonian al grafului condensat, dac acesta exist; d) pstrnd ordinea componentelor tare conexe indicat de drumul hamiltonian al grafului condensat, determinm drumurile hamiltoniene din fiecare component conex; e) racordnd drumurile gsite cu ajutorul arcelor dintre componentele tare conexe, obinem drumurile hamiltoniene pentru graful dat. 11. Fie graful G reprezentat n figura 6a. Folosind descompunerea grafului G n componente tare conexe, s se determine drumurile hamiltoniene existente n graful dat G.
6

0 0 0 0

0 0 0 0

0 0 0 0

1 0 0 0

1 0 0 0

1 0 1 0

2 6 3 1

Rezolvare:

figura 6a. Componentele tare conexe ale grafului G sunt date de mulimile: {2,3,6}, {1,4} , {5,7}, iar matricea conex a grafului condesat va fi:
C (2) C (1) C (5) 0 1 1 C (2) * B = 0 0 1 C (1) 0 0 0 C (5)

Drumul hamiltonian al grafului condensat este dat de succesiunea vrfurilor: C (2) , C (1) , C (5) ; n fiecare component conex, avem urmtoarele drumuri hamiltoniene: (3,6,2) , (2,3,6) , (6,2,3) , (1,4) , (4,1) , (7,5) , (5,7) . Racordnd drumurile gsite cu ajutorul arcelor dintre componentele tare conexe, gsim drumurile hamiltoniene: (3,6,2,1,4,7,5) , (3,6,2,1,4,5,7) 12. Fie graful G reprezentat n figura 7a.

figura 7a. Folosind descompunerea grafului G n componente tare conexe, s se determine drumurile hamiltoniene existente n graful dat G. Rezolvare: Graful G admite componentele tare conexe: C (1) = {1,3,4}, C (2) = {2}, C (5) = {5,6,8} i C (7 ) = {7} a cror ordine a fost stabilit de succesiunea vrfurilor din drumul hamiltonian al grafului condensat, determinat de matricea:
C (1) 0 0 0 0 C (2) 1 0 0 0 C (5) 1 1 0 0 C (7 ) 1 1 1 0
C (1) C (2) C (5) C (7 )

B* =

Scriind drumurile hamiltoniene pentru fiecare conex, se obin urmtoarele drumuri hamiltoniene (1 3 4 2 5 6 8 7) , (3 4 1 2 5 6 8 7) , (4 1 (1 3 4 2 6 8 5 7) , (3 4 1 2 6 8 5 7) , (4 1 3
Cu MAPLE 6 avem urmatorul program: > with(linalg): > n:=6: >

component tare pentru graful G: 3 2 5 6 8 7) , 2 6 8 5 7) .

> A:=matrix(n,n,[[0,0,0,0,0,0],[1,0,1,0,0,1],[1,0,0,0,0,0],[1 ,1,1,0,1,1],[1,1,1,0,0,1],[1,0,1,0,0,0]]): > > for k from 1 to n do > for i from 1 to n do > for j from 1 to n do if i<>k and j<>k then b[i,j]:=max(A[i,j],min(A[i,k],A[k,j])):A[i,j]:=b[i,j]:fi: > od: > od:od: > > print(`Matricea drumurilor este:`);

Matricea drumurilor este:

> print(A);

0 1 1 1 1 1

0 0 0 1 1 0

0 1 0 1 1 1

0 0 0 0 0 0

0 0 0 1 0 0

0 1 0 1 1 0

> C:=array(1..n):for i from 1 to n do C[i]:=0;od:ind:=0: > for j from 1 to n do for i from 1 to n do if A[i,j]=1 then ind:=ind+1:fi:C[j]:=ind:od:ind:=0:od:print(C):B:=convert(C, multiset):L:=[]:for i from 1 to n do for j from i+1 to n do if B[i][2]>B[j][2] then L:=B[i]:B[i]:=B[j]:B[j]:=L:fi:od:od:print(B):H:=array(1..n) :for i from 1 to n do H[i]:=B[i][1]:od:print(`Drumul hamiltonian este:`):print(H); > > > > > [ 5, 2, 4, 0, 1 , 3 ]

[ [ 4, 0 ], [ 5, 1 ], [ 2, 2 ], [ 6, 3 ], [ 3, 4 ], [ 1, 5 ] ]
Drumul hamiltonian este:

[ 4, 5 , 2 , 6 , 3 , 1 ]
9

> > > >

10

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