Sunteți pe pagina 1din 7

Inițiere în Algoritmi Lecția 12 Grafuri. Noțiuni.

Reprezentări

Lecția 12. Grafuri. Noțiuni. Reprezentări

La această lecție vei afla:

 Ce este un graf
 Care sunt elementele din care se formează graful și cum le putem combina
 Cum putem reprezenta un graf pentru a-l transmite în program

Ce este un graf?

Un grup de turiști merge în excursie prin o regiune


montană. Fiecare este echipat corespunzător, inclusiv cu un
dispozitiv de comunicare, care îi permite să comunice cu alți
membri ai grupului, la distanță mică. În timpul excursiei grupul
se dispersează, astfel încât unele dispozitive nu mai pot
comunica între ele:

Putem să marcăm fiecare dispozitiv cu un cerc (disc).


Dispozitivele care pot comunica între ele ( razele de acțiune se
intersectează, cum este indicat în imagine) le vom conecta cu
linii. Dispozitivele care nu pot comunica direct între ele nu vor fi
conectate!

Acum liniile care conectează dispozitivele indică care dintre ele


pot comunica direct! Putem elimina cercurile imaginare care indică
zonele de extindere a undelor din imaginea inițială – relațiile dintre
dispozitive sunt păstrate de liniile trasate anterior. Mai numerotăm
și dispozitivele!

Acum putem elimina și dispozitivele din imagine – toată


informația despre dispozitive și posibilitățile de comunicare între ele
rămâne accesibilă într-o schemă unde dispozitivele au fost înlocuite
prin cercuri, iar posibilitățile de comunicare directă – prin linii.
Acesta și este un graf – un mod de reprezentare a elementelor
unei mulțimi și a relațiilor între ele prin elemente grafice: cercuri și
linii. (sau oricare alte figuri semnificative)
Inițiere în Algoritmi Lecția 12 Grafuri. Noțiuni. Reprezentări

O definiție mai strictă, acceptată în matematică și informatică este următoarea:


Un graf G este o pereche V, E, unde V este o mulțime de elemente numite vârfuri, iar E este
o submulțime din mulțimea tuturor perechilor neordonate de vârfuri {u, v} din V.
Perechile neordonate de vârfuri {u, v} din E formează mulțimea muchiilor grafului G.

Noțiunea de pereche neordonată {u, v} presupune că


legătura între vârfurile din pereche este realizată în ambele
direcții: de la u spre v și de la v spre u.
În graful din imagine V este formată din mulțimea de
vârfuri {1, 2, 3, 4, 5} iar E – din mulțimea perechilor
neordonate {{1, 2} {1, 5} {3, 2} {4, 2} {4, 3} {4, 5}}
Graful în care relațiile dintre vârfuri sunt valide în ambele direcții se numesc grafuri neorientate.
În mai multe situații reale relațiile între vârfuri există într-o singură direcție. Să observăm un fragment de
hartă rutieră, în care interscțiile sunt vârfuri, iar sebmentele de rdum între interscții – muchii:

Între unele intersecții mișcarea este permisă într-un singur sens. În aceste cazuri direcția de mișcare
este indicată prin un vârf de săgeată asociat muchiei. Asemenea muchii direcționate se mai numesc
arce.
Dacă mișcarea este permisă în ambele sensuri pe o porțiune de drum, arcele se dublează, formând o
pereche orientată în direcții opuse.
Graful, în care sunt indicate direcțiile care determină relațiile dintre noduri se numește graf
orientat. Deplasarea pe muchiile orientate într-un asemenea graf este permisă doar în
direcția indicată de săgeată.

În continuare vom discuta despre noțiunile aferente unui graf, importante pentru cursul nostru!
Inițiere în Algoritmi Lecția 12 Grafuri. Noțiuni. Reprezentări

Care sunt elementele din care se formează graful și cum le putem combina?

Fie v – un vârf din graful G.


Vecinii vârfului v sunt toate vârfurile, conectate cu v
prin o muchie. În imaginea alăturată vecinii vârfului 2 sunt
vârfurile 1, 3, 4 și 7; vecinii vârfului 5 – vârfurile 1 și 4;
vârful 6 nu are nici un vecin.
Varfurile 1 și 4 nu sunt conectate direct. Dar,
deplasarea din 1 în 5 apoi deplasarea din 5 în 4 permite să
se ajungă din 1 în 4 prin câteva vârfuri intermediare.

O secvență de vârfuri v 1 , v 2 , ... v k se numește cale în graf, dacă între oricare două vârfuri v i , v i +1 din
secvență există o muchie. Calea se numește ciclu, dacă primul și ultimul vârf din secvență coincid. În
imagine secvența 1, 7, 2, 3, 4 formează o cale; secvența 2, 3, 4, 2 – un ciclu.
Graful se numește conex, dacă între oricare pereche de vârfuri ale lui există cel puțin o cale. O
submulțime a W a mulțimii vârfurilor V din graf, se numește componentă conexă, dacă a) între orice
două vârfuri din W există cel puțin o cale și b) nu există nici o muchie care să conecteze un vârf din W cu
un vârf din afara mulțimii W.
Graful se numește arbore, dacă este conex și nu conține cicluri.

Graf conex Graf neconex Arbore

Ponderea este o caracteristică numerică, asociată unei


muchii. Poate indica distanța, costul, capacitatea în funcție de
condițiile problemei rezolvate sau situației modelate. Dacă în graful
alăturat vom considera ponderile asociate muchiilor ca fiind lungimile
traseelor între localități, atunci putem selecta cele mai optimale
planuri de călătorie, de exemplu cel mai scurt traseu din vârful 5 în
vârful 6 are lungimea 22 și e format de calea 5, 1, 6.
Inițiere în Algoritmi Lecția 12 Grafuri. Noțiuni. Reprezentări

Metode de reprezentare a grafurilor

Este foarte ușor să reprezinți un graf prin o imagine, schemă. Dar, acest mod de reprezentare nu
este pe înțelesul dispozitivelor digitale și, cu atât mai mult, pe înțelesul limbajelor de programare. Poți
transmite programului tău date numerice sau caracteriale, doar atât.
Deci, trebuie să găsim un mod de a reprezenta graful și proprietățile lui prin date numerice și
caracteriale.
Fiecare muchie în graf este descrisă de două vârfuri, pe care le conectează. Iar fiecare element al
unui tablou bidimensional este descris de doi indici. Ce-ar fi să folosim vârfurile grafului pe post de indici
a tabloului bidimensional care descrie un graf? Atunci elementul cu indicii [i][j] ar descrie muchia {i, j}!,
desigur , dacă aceasta există! Dar dacă nu? – atunci acest element va avea valoarea 0!.
Să încercăm o asemenea descriere
pentru graful din imagine.
Acum este foarte simplu să
reconstruin graful inițial după tabloul
bidimensional, astfel format:
Tabloul are dimensiunile 7 x 7. Prin
urmare gragul descris de tablou are 7
vârfuri. Prima linie a tabloului conține
elementele nenule în coloanele 5, 6, 7,
ceea ce înseamnă că vârful 1 este conectat
prin muchii cu vârfurile 5, 6, 7. Exact la fel determinăm conexiunile și pentru celelalte vârfuri.
Observă! Pentru un graf orientat, fiecare muchie este descrisă în tablou de două ori: dacă avem
muchia între vârfurile u și v, în tablou vor fi nenule și elementul cu indicii [u][v] și elementul cu indicii [v]
[u]. În graful orientat fiecare muchie direcționată este descrisă o singură dată: dacă avem muchia
direcționată de la u spre v, în tablou va fi diferit de 0 doar elementul [u][v].
Pentru un graf G cu n vârfuri tabloul bidimensional a[n][n] în care a[i][j] = 1 dacă în G există
muchia {i,j} și a[i][j] = 0 în caz contrar, se numește matrice de adiacență a grafului G.
În grafurile orientate a[i][j] = 1 dacă în G există muchia direcționată cu originea i și vârful j:
(i,j).

În grafurile cu ponderi a muchiilor a[i][j] = d(i,j) aici d(i,j) este ponderea muchiei {i,j}. La fel
pentru grafurile orientate.

Să încercăm un exercițiu invers – restabilirea grafului după conținutul matricei de adiacență care îl
descrie:
Inițiere în Algoritmi Lecția 12 Grafuri. Noțiuni. Reprezentări

Matricea de adiacență are dimensiunea 9. Prin urmare


graful va avea 9 vârfuri.
Valorile elementelor din tablou sunt simetrice față de linia
diagonală care unește colțul stâng-sus cu colțul drept-jos al
tabloului. Prin urmare toate a[i][j] sunt egale cu a[j][i]. Aceasta
înseamnă că graful este neorientat. Toate elementele nenule
sunt 1, prin urmare graful nu este ponderat.
Începem reconstrucția:

O altă formă de reprezentare a grafului, utilizată frecvent este lista de muchii.


Lista de muchii reprezintă o secvență de m perechi de
numere fiecare pereche descriind vârfurile care formează o
muchie distinctă. Pentru a obține mai simplu lista de muchii,
acestea pot fi prealabil numerotate:
Pentru graful din imaginea alăturată, lista de muchii va fi
următoarea (1, 6) , (6, 3), (3, 4), (7, 2), (4, 5), (5, 1), (1, 7) .
Inițiere în Algoritmi Lecția 12 Grafuri. Noțiuni. Reprezentări

Important!
 Dacă graful este unul ponderat, fiecare element al listei va conține 3 numere și nu 2. Cel de
al treilea element va fi ponderea muchiei.
 În grafurile orientate primul număr din perechea care descrie muchia direcționată reprezintă
originea iar cel de al doilea – vârful.
 Dacă în graf există vârfuri izolate, acestea vor fi descrise cu ajutorul buclelor – muchiilor în
care vârful de început coincide cu vârful de sfârșit.

Încă un exercițiu – restabilirea grafului după conținutul listei de muchii.


Fie lista de muchii
(1, 6, 10) (1, 7, 7) (1, 5, 12) (2, 6, 40) (2, 7, 8) (3, 4, 5) (3, 6, 15)
(4, 5, 18) (4, 6, 20) (5, 7, 5) (8, 8, 0)

Cea mai mare valoare a indicelui vârfului este 8. Prin urmare graful va avea 8 vârfuri.
Începem reconstrucția:
Inițiere în Algoritmi Lecția 12 Grafuri. Noțiuni. Reprezentări

Exercițiu:
Scrie un program, care va citi matricea de adiacență a unui graf și va afișa lista lui de muchii! În
calitate de teste folosește exemplele din această lecție.

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