Sunteți pe pagina 1din 27

II GRAFURI TARE CONEXE

DRUMURI HAMILTONIENE
DISTANTE MINIME
ALGORITMI MATRICEALI
Daca notiunea de conexitate intr-un graf orientat este
definita cu ajutorul conceptului de lant, notiunea de tare
conexitate se va defini cu ajutorul conceptului de drum.
Definitia 1 Un graf G = (V,U) se numeste tare conex
daca are proprietatea ca pentru oricare doua varfuri distincte
x,y exista un drum de la x la y si un drum de la y la x.
Altfel zis, oricare doua varfuri din graful orientat sa se
afle pe un circuit.
Matricea drumurilor unui graf tare conex are toate
elementele egale cu unu.
Definitia 2 Se numeste componenta tare conexa a
unui graf orientat

G = (V,U), un subgraf G'=(V',U') cu

proprietatea ca este tare conex si maximal in raport cu aceasta


proprietate, adica zV\V' subgraful lui G generat de V'{z}
nu mai este tare conex.
Fie R o relatie binara definita pe multimea V a grafului
orientat G = (V,U), astfel: xRy daca x=y sau exista un drum

de la x la y si un drum de la y la x. Aceasta relatie este o


relatie de echivalenta (Exercitiu!).
Clasele de echivalenta corespunzatoare relatiei R sunt
componentele tare conexe ale lui G.
Exemplul 1 Sa consideram urmatorul graf orientat G
care nu este tare conex.

6
1

Fig.1
Componentele tare conexe sunt: C1={1,2,3,4};C2={5};
C3={6}.
Propozitia 1

Fie C1 si C2 doua componente tare

conexe distincte si varfurile x,y din C1, x',y' din C2. Daca exista
un drum dx,x', atunci nu va mai exista un drum dy',y.
2

Demonstratie: Sa presupunem ca ar exista un drum


dy',y in graf. Atunci, conform ipotezei, vor exista drumurile
dx,x',y' si dy,'y,x. Prin urmare, varfurile x si y' s-ar gasi pe un
circuit (contradictie!).

Descrierea unui algoritm matriceal pentru identificarea


componentelor tare conexe
Pentru determinarea componentelor tare conexe
intr-un graf orientat G=(V,U), se poate utiliza matricea
drumurilor asociata grafului. Daca matricea D

are toate

elementele de pe diagonala principala egale cu 1, atunci toate


varfurile lui G se afla in circuite. Sa notam cu S(xj) multimea
varfurilor lui G care sunt extremitati finale ale unor drumuri
care pleaca din xj, iar cu P(xj) multimea tuturor varfurilor din
G care sunt extremitati initiale ale unor drumuri care sosesc in
varful xj.
Se observa ca multimea S(xj) consta din acele varfuri
xk cu proprietatea d[xj,x k] =1, adica varfurile corespunzatoare
coloanelor din matricea D care contin elemente egale cu unu
pe linia j. Analog, multimea P(xj) consta din acele varfuri x k
cu proprietatea ca d[xk,xj] = 1, adica varfurile corespunzatoare
liniilor din D care contin elemente egale cu unu pe coloana j.
Componenta tare conexa corespunzatoare varfului xj
va fi (S(xj)P(xj)) {xj}.
3

Matrice latine. Drumuri hamiltoniene


A. Kaufmann si J. Malgrange au introdus in calculul
operational conceptul de matrice latina. Matricele latine
participa la relatia de definire a unui graf. Secvente de varfuri
ale unui graf orientat pot fi caracterizate de anumite
proprietati.
Definitia

Varfurile unui graf orientat care au

aceeasi proprietate P si care se succed intr-o anumita ordine


compatibila cu ordinea din graf se numeste secventa.
Operatia ce se poate realiza cu secventele, care au
aceeasi proprietate P, este concatenarea.
Prin concatenarea a doua secvente, cu aceeasi
proprietate P,

s1 = xi1 , xi2 ,..., xim , s 2 = x j1 , x j2 ,..., x jn , se

obtine secventa s1 * s 2 = x i1 , x i2 ,..., xim , x j2 , x j3 ,..., x jn , daca


au loc urmatoarele doua conditii:
1)

xim = x j1

2)

s1*s2 are proprietatea P.

Daca una din cele doua conditii nu este indeplinita,


atunci se va considera s1*s2 = .
Conventii: * s = ; s * = ; * = .
Exemplul 2 Se considera urmatorul graf orientat:

4
Fig. 2

Proprietatea P consta in faptul ca varfurile din


secvente se afla pe drumuri elementare.
Fie secventele:
s1= 2 5 3
s2= 2 1 4
s3= 3 2 1 4
s4=3 1 4.
Se observa ca:
s1*s2= (nu are loc conditia 1)
s1*s3= (drumul (2 5 3 2 1 4) nu este elementar)
s1*s4= (2 5 3 1 4).
Concatenarea este o operatie asociativa, dar nu este
5

comutativa.
Tranzitiile din graf se vor dispune sub forma unui
tablou (matrice latina).
A(0)

1
2

2,1

3,1

3,2

4,1

4,2

1,4

1,5
2,5

4,3
5,3

Vom construi matricea A(1) pornind de la matricea A(0)


luand secventele fara primul element al lor tinand cont de
definitia concatenarii.
A(1)

1
2

5
5

3
3

Concatenarea celor doua tablouri se realizeaza similar

produsului a doua matrice prin

tehnica " linie-coloana",

astfel:
A(2)

143
1

142

153

253

214

215

321

314

315
325

421

432

431
5

531

415
425

532

Exemplu de calcul: Linia 1 din A(0) "inmultita" cu


coloana 1 din A(1) va conduce la secventa 1 4 1 care este un
circuit de lungime 2 si nu ne intereseaza de aceea am trecut (-).
In rest se obtin numai secvente vide ( ).
La acest pas, se vor obtine toate drumurile elementare
de lungime 2.
In continuare, se va efectua operatia intre A(2) si A(1)
pentru a obtine A(3) ce va indica drumurile elementare de
lungime 3.
7

A(3)

1
-

1432

1425

2143

1532
2531

2153
3

3142

4321

3214

3215

4215

4153
4253

4315
4325

5321

5314

Drumurile elementare de lungime 4, le vom intalni ca


elemente in tabloul A(4).
Pentru a calcula pe A(4) vom opera cu tablourile A(3) si
A(1).
A(4)

3
14253

25314

5
14325

31425

42531

41532

42153

43215

53142

53214

A(5)

In tabloul A(5) ar trebui sa se identifice drumurile


elementare de lungime 5. Se observa ca nu exista drumuri
elementare de lungime 5.
Prin urmare, exista drumuri hamiltoniene in graf (vezi
A(4)).
Reluati calculele si identificati circuitul hamiltonian
din graful considerat.

Algoritmi pentru calculul distantelor minime


Fie G = (V,U) un graf orientat si : U R+ o
functie care asociaza fiecarui arc din G un numar

real

nenegativ numit lungimea sa. In cazul de fata, prin lungimea


unui drum din G se intelege suma lungimilor arcelor sale, iar
distanta minima dintre doua varfuri oarecare ale lui G consta
in lungimea drumurilor scurte care au ca extremitati aceste
varfuri.
9

Algoritmul lui Roy-Floyd


Fie G = (V,U) un graf orientat cu V = {x1,x2,,xn},
etichetat. Vom defini matricea distantelor directe ale lui G ca
fiind matricea A(nxn) unde:

((x i , x j )) daca ( xi , x j ) U

a[i, j ] = 0 daca i = j
(1 i,j n)
daca ( x , x ) U
i
j

Fie A*(nxn) matricea distantelor minime dintre


varfurile grafului orientat G care se defineste astfel:

0 daca i = j

a [i, j ] = min i, j
(1i,j n)

altfel
*

unde mini,j reprezinta minimul dintre lungimile drumurilor cu


extremitatile i, j.
Rolul acestui algoritm este de a gasi matricea
distantelor minime A* pornind de la matricea distantelor
directe A.
for k=1 , n
for i =1 , n
if (ik)
for j = 1 , n
if (ji jk)
a[i,j] = min (a[i,j] , a[i,k]+a[k,j] )
10

Ciclurile for(i), for(j), vor recalcula elementele cu


indici diferiti intre ei ale unei submatrice cu n-1 linii si n-1
coloane, deci este necesar un numar de (n-1)2 (n-1) = (n-1)*
(n-2) operatii de adunare, respectiv comparatii. Intregul
algoritm (incluzand for(k)) va necesita un numar de
n(n-1)(n-2) operatii de adunare si tot atatea comparatii , adica
O(n3 ).
Observatie: Algoritmul respectiv se poate trata si in
limbaj operatorial .
Tk(A(k-1))=A(k) (k=1,n) unde,

min{ A ( k 1) (i, j ), A ( k 1) (i, k ) + A ( k 1) (k , j )}, i j k

A ( k ) (i , j ) =
A( k 1) (i, j ), daca i = k sau j = k

0, daca i = j
(1 i, j n)

Asadar, la aplicarea operatorului Tk, linia si coloana k


din matricea A(k) raman nemodificate, adica identice cu cele
din matricea A(k-1).
Elementele de pe diagonala principala a matricei A
sunt egale cu zero.
Acest algoritm, putin modificat, poate servi la
determinarea drumurilor de lungime minima dintre varfurile
grafului orientat G.
Vom defini o matrice D(nxn) ale carei elemente
reprezinta submultimi de varfuri ale lui G.
Initializarea matricei D va fi de forma urmatoare:
11

{x } daca a[i, j ] <


d [i, j ] = i
(1i,j n)
daca a[i, j ] =
Elementul

d[i,j] reprezinta submultimea varfurilor

vecine varfului xj aflate pe drumuri de la xi la xj. In ciclurile


dupa i si j, elementele d[i,j] se reactualizeaza astfel:

d[i, j] daca a[i, j] < a[i, k] + a[k, j]

d [i, j ] = d[i, j] d[k, j] daca a[i, j] = a[i, k] + a[k, j]


d[k, j] daca a[i, j] > a[i, k] + a[k, j]

(1i , j , k n)
Cunoscand varfurile vecine (in sens invers orientarii
drumului) pentru orice drum de lungime minima din graf,
acesta se poate reconstitui usor.
Exemplul 4 Sa consideram urmatorul graf:
2

2
4

1
Fig. 6
12

Vom calcula matricea distantelor minime A* si a


drumurilor minime D*.
A=A(0)

Matricea A=A(0)(matricea distantelor directe)


D(0)
1
2

1
x1

x1

x1

x2

x2

x2

x2

x3

x3

x3

x4

x4

x4

x5

x5

3
4
5

x6

6
Matricea initiala D(0)

Nota: casuta libera desemneaza faptul ca ea contine


multimea vida de varfuri.
13

Se va aplica operatorul T1 matricei A(0) . Deoarece


coloana 1 din matricea A(0) are toate elementele , A(1) =A(0),
D(1) = D(0).
Se aplica operatorul T2 matricei A(1) si se obtine:
A(2)

Matricea A(2)
Pentru a calcula, de exemplu, elementul

A(2)(1,3),

vom calcula min{ A(1)(1,3), A(1)(1,2)+A(1)(2,3)} (s-a aplicat


operatorul T2 , deci k=2). Linia si coloana 2 raman identice
cu cele din matricea A(1).
D(2)
1
2
3

1
x1

x1

x2

x2

x2

x2

x2

x2

x2

x3

x3

x3

x4

x4

x4

x5

x5

4
5

x6

6
14

Matricea D(2) se calculeaza prin actiunea operatorului


T2 asupra matricei A(1) si tinand seama de matricea D(1). De
exemplu, pentru a calcula elementul D(2)(1,3) se vor compara
elementele A(1)(1,3) cu elementul suma A(1)(1,2)+A(1)(2,3). Se
gaseste ca A(1)(1,3)> A(1)(1,2)+A(1)(2,3) (k=2). Prin urmare, se
va lua D(2)(1,3)=D(1)(2,3). Linia si coloana 2 din matricea D(2)
vor fi identice cu cele din matricea D(1). Diagonala principala,
evident, nu se va modifica.
Analog se vor calcula, in continuare, elementele
matricelor A(3),...,A(6), respectiv D(3),...,D(6).
A(3)

3
4
5
6

Matricea A(3). Se aplica operatorul T3(A(2)).


D(3)
1
2
3

1
x1

x1

x2

x3

x3

x2

x2

x3

x3

x3

x3

x3

x4

x4

x4

x5

x5

4
5
6

x6
15

Matricea D(3)
(Se va tine seama de matricea T3(A(2)) si D(2))
A(4)

10

Matricea A(4). Se aplica operatorul T4(A(3)).


D(4)

x1

x1

x2

x3

x3,x4

x4

x2

x2

x3

x3,x4

x4

x3

x3

x3,x4

x4

x4

x4

x4

x5

x5

2
3
4
5
6

x6
(3)

(3)

(Se va tine seama de matricea T4(A ) si D )


(5)

3
4
5
6

16

D(5)
1

1
x1

x1

x2

x3

x3,x4

x5

x2

x2

x3

x3,x4

x5

x3

x3

x3,x4

x5

x4

x4

x5

x5

x5

3
4
5
6

x6

Matricea D(5)
A(6)

Matricea A(6). Se aplica operatorul T6(A(5))=A(5)=A*.


D(6)

x1

x1

x2

x3

x3,x4

x5

x2

x2

x3

x3,x4

x5

x3

x3

x3,x4

x5

x4

x4

x5

x5

x5

2
3
4
5
6

x6
Matricea D(6)=D*
17

Se gaseste distanta minima de la x1 la x6 ca fiind


a*[1,6] = 9 . Drumurile de lungime minima de la x1 la x6 se
observa din matricea D* astfel:
Elementul d*[1,6] = x5. Se cauta in prima linie si a 5-a
coloana si se gaseste d*[1,5] ={ x3,x4}, adica drumurile de
lungime minima de la x1 la x6 se vor termina prin succesiunile
x3,x5,x6, respectiv x4,x5,x6.
Pentru prima succesiune de varfuri cautam in prima
linie si a treia coloana si gasim x2, iar in coloana a doua se
gaseste x1. Asadar un drum de lungime minima de la x1 la x6
este (x1,x2,x3,x5,x6) . Procedand analog cu a doua succesiune, se
obtine al doilea drum minim (x1,x2,x3,x4,x5,x6). Fiecare din cele
doua drumuri au lungimea 9.
In algoritmul descris se observa ca, dupa etapa de
initializare ( (n 2 ) ), se trece la recalcularea elementelor cu
indici diferiti intre ei pentru o submatrice de dimensiuni
(n-1)*(n-1). Este necesar un numar de (n-1)(n-2) operatii de
adunare, respectiv comparatii. In total se vor executa un numar
de n(n-1)(n-2) operatii de adunare si tot atatea comparatii.
Asadar, ordinul de complexitate al algoritmului este (n 3 ).
Algoritmul lui Yen
Acest algoritm este util in determinarea distantelor
minime a*[1,2], a*[1,3],...,a*[1,n] de la varful x1 la varfurile
x2, x3,,xn ale grafului orientat G = (V,U).
18

Descrierea algoritmului
p1. Se determina in matricea distantelor directe A,
minimul dintre distantele directe a[1,2], a[1,3], ,a[1,n].
Daca acest minim se realizeaza, de exemplu, pentru un indice
i0, adica

a[1,io] =

min{a[1,k] / k = 2,3,,n},

atunci

distanta minima este a*[1,i0] = a[1,io]. Este posibil ca indicele


i0 sa nu fie unic.
p2. Elementele din prima linie a matricei A se vor
transforma astfel:
Pentru orice i1, io, elementul a[1,i] se inlocuieste cu
min(a[1,i] , a[1,io]+a[io,i]). Din matricea obtinuta se suprima
linia si coloana de rang io, conservand rangurile initiale din
matricea A, pentru liniile si coloanele ramase.
Daca matricea obtinuta este de ordinul 2, atunci
elementul a[1,2] din aceasta matrice reprezinta distanta
minima de la varful x1 la varful xk unde k este rangul initial al
coloanei a doua din matricea curenta. In aceasta situatie
algoritmul se opreste deoarece au fost determinate distantele
minime a*[1,2] , a*[1,3] ,,a*[1,n].
In caz contrar, se va trece la primul pas, efectuandu-se
aceleasi operatii asupra matricei curente ca si asupra lui A
initial. In acest moment un element a[1,i] va fi elementul din
prima linie si coloana i a matricei obtinute, pentru care s-au
conservat rangurile initiale ale liniilor si coloanelor matricei A.
Complexitatea algoritmului va fi determinata de
19

numarul operatiilor de adunare si comparare folosite de


algoritm.
La pasul p1 sunt necesare cel mult n-2 comparari,
deoarece elementele a[1,i] = nu se vor lua in considerare.
La pasul p2 sunt necesare cel mult n-2 adunari si n-2
comparari. Se observa ca ordinul matricei A scade cu cate o
unitate la fiecare executie. In concluzie, vor fi necesare cel
n2

mult un numar de 2

q = (n 1)(n 2) comparari si

cel

q =1

n 2

mult un numar de

q =
q =1

(n 1)(n 2)
adunari .
2

Aplicand algoritmul lui Yen de n ori, vom determina


distantele minime de la x1 la toate celelalte varfuri, de la x2 la
celelalte varfuri, ..,de la xn la toate celelalte varfuri ale
grafului orientat, adica distantele minime intre oricare doua
varfuri ale grafului G.
Pentru aceasta sunt necesare cel mult n(n-1)(n-2)
comparari si n(n-1)(n-2) / 2 adunari, adica O(n3) .
Exemplul 5

Sa se determine distantele minime de la

varful x1 la celelalte varfuri ale grafului orientat G=(V,U), dat


in fig. 6.

20

A-Matricea distantelor directe


In matricea

distantelor directe A se observa ca pe

prima linie elementul minim este a[1,2] = 1, deci a*[1,2] =1


(io=2). Celelalte elemente ale primei linii se vor recalcula:
a[1,3]= min(a[1,3], a[1,2] + a[2,3] ) = 3;
a[1,4] = 6 ;a[1,5] = 9 ;a[1,6] = .
Se vor suprima linia si coloana de rang 2, obtinand
matricea in care se vor mentine vechile ranguri de linii si
coloane din A.
1

A(1)

21

Elementul minim, din prima linie,

este a*[1,3] =

a[1,3] = 3 .
Continuand rationamentul, se vor obtine urmatoarele
matrice:
1

A(2)

Se vede ca a*[1,4] = 5.

(3)

10

Elementul obtinut este a*[1,5] = 8.


1

(4)

22

In final, se obtine a*[1,6] = 9.


Algoritmul se opreste in acest moment. Distantele
minime gasite sunt: a*[1,2] = 1; a*[1,3] = 3; a*[1,4] = 5;
a*[1,5] = 8 ; a*[1,6] = 9. Acestea sunt elementele minime
diferite de zero de pe prima linie din matricea curenta.
Pentru determinarea drumurilor de lungime minima de
la varful x1 la varful x6 se va proceda astfel:
Daca (xk , xj) este ultimul arc al unui drum minim de
la varful xi la varful xj, atunci a*[i,j] = a*[i,k] + a[k,j],
deoarece, daca consideram un drum minim de la xi la xk pe
care sa-l prelungim cu arcul (xk ,xj), lungimea acestui drum de
la xi la xj este egala cu a*[i,k] + a[k,j] = a*[i,j], adica este
drumul minim de la xi la xj al carui ultim arc este (xk,xj).
Prin urmare, daca consideram indicii k= k1,k2,,ks
care satisfac relatia a*[i,j] = a*[i,k] + a[k,j], atunci arcele

( x k1 , x j ), ( x k2 , x j ),..., ( x ks , x j )

sunt

ultimele

arce

din

drumurile minime de la xi la xj.


Pentru fiecare din acesti

indici

se va repeta

procedeul, gasind ultimele arce care ajung in xk1 din drumurile


minime de la varful xi la varful xk1, luand in locul lui j pe k1
etc.
Daca nu exista nici un indice ki, j care sa verifice
egalitatea a*[i,j] = a*[i,k] + a[k,j], atunci rezulta ca arcul
(xi,xj) este singurul drum minim de la xi la xj. Continuand
23

rationamentul, se vor gasi toate drumurile minime de la xi la xj.


Pentru aplicatia considerata se vor regasi drumurile
minime: d1=(x1,x2,x3,x5,x6) si d2 =(x1,x2,x3,x4,x5,x6) .

Tematica propusa
1

Sa se arate ca un graf orientat G=(V,U) cat si

transpusul sau GT=(V,UT) cu UT={(x,y)/(y,x) U}, au aceleasi


componente tare conexe.
2 Sa se implementeze algoritmul matriceal pentru
identificarea componentelor tare conexe intr-un graf orientat.
3 Aratati ca un graf complet si tare conex este
hamiltonian.
4 Fie G=(V,U) un graf cu V={0,1,2,...,n-1} si A(nxn)
matricea sa de adiacenta. O astfel de matrice se poate
considera ca fiind matricea booleana a drumurilor de lungime
unu existente in G. Aratati ca numarul drumurilor netriviale de
lungime k de la varful i la varful j este dat de elementul
matriceal (Ak)i,j , iar existenta unor astfel de drumuri este data
de elementul matriceal (A(k))i,j (unde A(k) reprezinta puterea
booleana k a matricei A). De asemenea, daca (A(k))i,i=1
inseamna ca exista circuit de lungime k in graf, iar numarul
acestora este dat de elementul matriceal (Ak)i,i.
Determinati drumurile si circuitele ce exista in graful
24

orientat reprezentat prin matricea de adiacenta urmatoare:

5 Sa se implementeze in C algoritmii lui

Roy-Floyd

si Yen.
6 Aplicati algoritmul lui Yen pe graful ponderat cu
urmatoarea matrice a costurilor:

10

25

Verificati-va cunostintele:
-1 Gradul exterior al unui varf x dintr-un graf orientat
este definit prin:
a) + (x)
b) (x )
c) + (x)
d) + (x) .
-2 Cate grafuri orientate complete de ordin n 5 (n
numar natural ) exista?
n


n
2
a) 1 ; b) 2 ; c) ; d) 3
2

-3 Se considera urmatoarea matrice de adiacenta:

26

Graful orientat reprezentat prin acesata matrice este:


a) simetric
b) antisimetric
c) complet
d) tranzitiv

27

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