Documente Academic
Documente Profesional
Documente Cultură
De exemplu, graful G = (V, E) unde V = {1, 2, . . ., 10} i E = {12, 23, 34, 45, 56,
51, 69, 68, 710, 79, 810, 92, 10 1, 74, 83} poate fi reprezentat de
10
5
2
9
dou grafuri sunt izomorfe dac exist o bijecie ntre mulimile lor de vrfuri care induce
o bijecie ntre mulimile lor de muchii).
Variaii n definiia unui graf
a)
Dac n definiia unui graf, se consider E(G) o multimulime pe
P2(V(G)), adic este dat o funcie
m : P2(V(G)) N,
se obine noiunea de multigraf. Un element e P2(V(G)) cu m(e) > 0 este muchie a
multigrafului, simpl dac m(e) = 1, multipl dac m(e) > 1. Oricrui multigraf M i se
poate asocia un graf G(M), numit graful suport al lui M, obinut prin nlocuirea fiecrei
muchii multiple cu o singur muchie cu aceleai extremiti.
b)
Dac n definiia unui graf se consider E(G) ca o multimulime pe
mulimea prilor nevide cu cel mult dou elemente ale lui V(G), atunci G se numete graf
general sau pseudograf. O muchie e E(G), e = {v} se numete bucl n vrful v. Pictural
pseudografurile se reprezint la fel ca i grafurile.
Pentru evitarea confuziilor, uneori grafurile aa cum le-am definit se mai
numesc i grafuri simple.
c)
Un digraf este o pereche D = (V(D), A(D)) unde V(D) este o
mulime finit nevid (mulimea vrfurilor digrafului D), iar A(D) V(D) V(D) este
mulimea arcelor digrafului D. Dac a = (u, v) este arc n D, notm a = uv i spunem c u
i v sunt adiacente; a este incident din u; a este incident spre v; u domin pe v; a este
incident cu u spre exterior ; a este incident cu v spre interior ; u este extremitatea iniial
a lui a i v este extremitatea final a lui a.
Pictural, digrafurile se reprezint la fel ca i grafurile, adugnd curbei care unete
dou cerculee un sens pentru a preciza perechea de vrfuri corespunztoare arcului
desenat.
O pereche de arce de forma vw i wv se numete pereche simetric de arce. Dac D
este un digraf, inversul su D este digraful obinut din D prin nlocuirea fiecrui arc vw cu
opusul su wv.
Dac D este un digraf, atunci nlocuind fiecare arc cu mulimea de vrfuri care l
formeaz, obinem, n general, un multigraf M(D). Graful suport al acestui multigraf se
numete graful suport al grafului D. Dac M(D) este graf atunci D se numete graf
orientat (poate fi gndit ca obinut prin orientarea fiecrei muchii a grafului M(D)).
Un digraf complet simetric este un digraf n care fiecare pereche de vrfuri este
unit prin exact o pereche de arce simetrice. Un turneu este un digraf n care orice dou
vrfuri sunt unite prin exact un arc.
d)
Grafurile infinite se obin prin nlturarea condiiei de finitudine a
mulimii de vrfuri i (sau) muchii. Un graf G local finit este un graf finit n care NG(v)
este finit pentru orice vrf v.
Grade
Dac G = (V, E) este un graf i v V un vrf al su, atunci valena sau gradul lui v
n G, notat dG(v) sau pG(v), este
|{e | e E, e incident cu v}|.
Un vrf de grad 0 se numete izolat; un vrf de grad 1 se numete pendant. Dac toate
vrfurile lui G au aceeai valen p atunci G se numete graf p valent sau p regulat. Un
graf 0 valent se numete graf nul. Un graf 3 valent se numete graf trivalent sau cubic.
Un exemplu de graf trivalent este graful lui Petersen:
Concepte analoage se pot defini i pentru digrafuri. Dac v este un vrf al digrafului
D atunci valena interioar sau gradul interior notat pin(v) sau pD sau d D , este numrul
arcelor incidente cu v spre interior; valena extrerioar sau gradul exterior notat pout(v)
sau
pD+ sau d D+ , este numrul arcelor incidente cu v spre exterior.
Subgrafuri
Un subgraf al grafului G = (V(G), E(G)) este un graf H = (V(H), E(H)) care
satisface: V(H) V(G) i E(H) E(G).
Dac V(H) = V(G) atunci H se numete graf parial al lui G.
A V(G) atunci [A]G = (A, P2(A) E(G)) se numete subgraf indus n G de
mulimea de vrfuri A. subgraful [V(G) \ A]G se noteaz G A i este subgraful lui G
obinut prin ndeprtarea vrfurilor din A; n particular, dac A = {v}, atunci G {v} se
noteaz G v.
Dac E E(G) atunci EG = (V(G), E) este graful parial secionat de E n G.
G E este prin definiie E(G) \ EG, iar G e = G {e} (e E(G)).
Concepte similare se pot defini n mod analog pentru multigrafuri, grafuri generale
sau digrafuri.
Operaii cu grafuri
Dac G = (V(G), E(G)) este un graf, atunci:
complementarul su este graful G cu V( G ) = V(G) i
E( G ) = P2(V(G)) \ E(G).
graful reprezentativ al muchiilor lui G este graful L(G) cu V(L(G)) =
E(G) i E(L(G)) = {ee | e, e E(G), e i e adiacente n G}.
graful total al grafului G este graful T(G) cu V(T(G)) = V(G) E(G) i
E(T(G)) = {xy | x, y V(G) E(G), x i y adiacente sau incidente n G}.
graful obinut din G prin inseria unui vrf (z) pe o muchie (e = vw)
este graful G = (V(G) {z}, E(G) \ {vw} {vz, zw}) (z V(G), e E(G)).
Dou grafuri obinute prin inserii succesive de vrfuri pe muchiile aceluiai
graf se numesc homeomorfe.
graful obinut din G prin contracia muchiei e = vw E(G) este graful
G | e = (V(G) \ {v, w} {z}, E([V(G) \ {v, w}]G) {yz | yv sau yw E(G)}).
Dac H se poate obine prin contracii succesive de muchii din graful G, se
spune c G este contractibil la H.
Fie G = (V(G), E(G)) i G = (V(G), E(G)) dou grafuri.
Dac V(G) = V(G) atunci reuniunea celor dou grafuri i intersecia
lor se definesc G G = {V(G), E(G) E(G)), G G = (V(G), E(G)
E(G)).
Clase de grafuri
Graful complet de ordin n: Kn cu |V(Kn)| = n i E(Kn) = P2(V(Kn)).
Graful nul de ordin n: Nn = K n .
Circuitul de ordin n: Cn cu V(Cn) = {1, . . ., n} i E(Cn) = {12, 23, . . ., n 1n, n1}.
Drumul de ordin n: Pn = Cn e (e E(Cn)).
Exemplu (n = 5)
K5
N5
C5
P5
Un subgraf complet al unui graf G se numete clic a lui G. Cardinalul maxim al unei clici
a lui G se numete numrul de clic sau numrul de densitate al lui G i se noteaz (G)
(evident (G) = ( G )).
Un graf bipartit este un graf G cu proprietatea c V(G) se poate partiiona n dou
mulimi independente n G. Dac S i T satisfac S T = V(G), S T = i S, T sunt
independente i nevide n G, atunci graful bipartit G se noteaz G = (S, T; E(G)).
Remarcm c () e E(G) are o extremitate n S i cealalt n T. Dac () v S i () w
T vw E(G), atunci graful bipartit G = (S, T; E(G)) se numete graf bipartit complet i
se noteaz Ks,t unde s = |S| i t = |T|. Exemplu: K3,3 este graful
Un graf G = (V(G), E(G)) se numete planar dac poate fi scufundat n plan astfel
nct fiecrui vrf s-i corespund un punct al planului, iar muchiilor le corespund curbe
simple ce unesc punctele corespunztoare vrfurilor lor i n plus aceste curbe se
intersecteaz (eventual) numai n vrfuri. Un graf care nu-i planar se numete neplanar.
Exemple minimale de grafuri neplanare sunt grafurile K5 i K3,3.
Drumuri i circuite
Fie G = (V(G), E(G)) un graf. Se numete mers de lungime r de la v la w n G un
ir de vrfuri i muchii
(v =) v0,v0v1, . . ., vr 1, vr 1vr, vr (= w)
v i w se numesc extremitile mersului.
Dac muchiile mersului sunt distincte atunci mersul se numete parcurs n G de la
v la w. Dac vrfurile sunt distincte atunci mersul se numete drum de la v la w.
Dac v = w atunci mersul (parcursul) se numete nchis; dac ntr-un mers toate
vrfurile sunt distincte, cu excepia extremitilor, atunci mersul se numete circuit (sau
drum nchis). Un circuit este par sau impar dup cum lungimea sa (numrul muchiilor)
este par sau impar. Lungimea celui mai scurt circuit al grafului G (dac G are circuite) se
numete graia grafului G i se noteaz cu g(G); lungimea celui mai lung circuit al lui G se
numete circumferina lui G i se noteaz c(G).
Dac v i w sunt vrfuri ale lui G, lungimea celui mai scurt drum de la v la w n G
se numete distana n G de la v la w i se noteaz dG(v, w). Diametrul grafului G, notat
d(G) este d(G) = max {dG(v, w) | v, w V(G)}.
Definiiile de mai sus se extind, n mod evident, pentru digrafuri singura modificare
fiind aceea c se nlocuiesc muchiile cu arce.
Un graf este conex dac exist un drum ntre orice dou vrfuri ale sale; un graf
care nu este conex se numete neconex. Orice graf G poate fi unic exprimat ca o reuniune
disjunct de subgrafuri induse conexe i maximale cu aceast proprietate; aceste subgrafuri
se numesc componentele conexe ale grafului G (mai precis, se pot defini componentele
conexe ca subgrafurile induse de clasele de echivalen determinate pe V(G) de relaia de
echivalen definit prin vw dac exist n G un drum de la v la w).
Concepte analoage se pot defini i pentru digrafuri; dac D este un digraf atunci:
D este tare conex dac (v, w) V(D) V(D) exist un drum n D de la v la w;
D este unilateral conex dac (v, w) V(D) V(D) exist n D un drum de la v la
w sau de la w la v;
D este conex dac G(D), graful suport al lui D, este conex.
Un graf conex care nu are circuite se numete arbore. Un graf ale crui componente
conexe sunt arbori se numete pdure.
Dac G este un graf conex, un vrf v V(G) cu proprietatea c G v este neconex
se numete vrf (punct) de articulaie; mai general, o mulime A de vrfuri ale unui graf G
se mai numete mulime separatoare de vrfuri (mulime de articulaie) dac G A este
neconex. Fie p un numr ntreg pozitiv; un graf G cu mcar p vrfuri este p conex dac G
= Kp sau are cel puin p + 1 vrfuri i nu admite mulimi separatoare de vrfuri de cardinal
mai mic dect p. Evident, G este 1 conex dac i numai dac este conex. Un graf 2
conex se numete bloc.
Dac G este un graf conex, o muchie e E(G) cu proprietatea c G e este
neconex se numete punte n graful G; mai general, o mulime A de muchii ale unui graf
G se numete mulime separatoare de muchii dac G A este neconex. Un graf G cu
mcar p vrfuri este p muchie conex dac nu admite mulimi separatoare de muchii de
cardinal mai mic dect p.
urmtorului element. Dac l este adresa ultimului element w din A(i), atunci T(l, 1) = w i
T(l, 2) = 0.
b2) Se folosesc urmtoarele declaraii:
type pointer = ^elem;
elem = record
vrf : 1 . . n;
leg : pointer;
end;
i un tablou care conine trimiteri la nceputul fiecrei liste:
var
cap : array [1 . . n] of pointer;
p : pointer;
Graful nul de ordin n se iniializeaz astfel:
for i := 1 to n do cap[i] := nil;
Adugarea muchiei ij (deci n cazul grafurilor):
begin
new(p);
p^.vrf := j;
p^.leg := cap[i];
cap[i] := p;
new(p);
p^.vrf := i;
p^.leg := cap[j];
cap[j] := p;
end;
Notm c n descrierea dat am reprezentat listele A(i) ca stive cu elementele din
top la adresa cap[i] (i V). Aceste liste se pot organiza i sub forma unor cozi sau liste
dublu nlnuite, sau chiar liste circulare, n funcie de problema care se rezolv pe
(di)graful n cauz.
Sortare topologic. Dat G = (V, E) un digraf, s se determine o numerotare aciclic
a vrfurilor sale.
Vom presupune c V = {1, 2, . . . , n}, i c digraful este reprezentat prin listele sale
de adiacen A(v), deci cu ajutorul tabloului cap[v] v V.
Problema cere s determinm vectorul ord[v] v V, (ord[v] = numrul de ordine al
vrfului v) astfel nct
vw E ord[v] < ord[w].
Vom transforma i listele de adiacen astfel nct ele s fie ordonate cresctor (n
noua numerotare). Rezolvarea problemei este simpl i se bazeaz pe urmtoarea
Lem. G admite o numerotare aciclic dac i numai dac nu are circuite.
Demonstraie. Este evident c dac G admite o numerotare aciclic atunci G nu are
circuite (dac v,v1, v2, . . ., vk, v1 sunt vrfurile unui circuit atunci, cum G are o numerotare
aciclic, obinem ord[v1] < ord[v2] < . . . < ord[vk] < ord[v1], contradicie).
Reciproc, dac G nu are circuite atunci exist un vrf v0 V astfel nct d G (v0) = 0
(altfel, datorit finitudinii digrafului, se poate construi un circuit); punem ord[v0]:= 1,
considerm G := G v0 i repetm raionamentul.
Dimensiunea problemei este O(n + e). Vom construi un algoritm care s rezolve
problema n timp O(n + e). Acest lucru este posibil datorit unei utilizri judicioase a
structurilor de date. Idea algoritmului:
determinm gradele interioare ale vrfurilor;
vrfurile de grad interior 0 le memorm ntr-o stiv S0;
(a) considerm vrful din topul stivei S0 i-l numerotm;
(b) modificm gradele interioare ale vrfurilor din lista de adiacen a vrfului tocmai
numerotat;
(c) n modificarea anterioar crearea unui vrf de grad interior 0 va implica memorarea
lui n stiva S0;
(d) relum secvena (a) (c) pn cnd stiva devine vid.
Dac nu s-au numerotat toate vrfurile rezult c digraful conine circuite; n cazul
epuizrii vrfurilor, s-a rezolvat prima parte a problemei. Va trebui s sortm listele
(stivele) de adiacen aa nct ele s fie ordonate cresctor n noua numerotare. Vom
folosi un caz foarte simplu al sortrii cu glei (bucket sort) sau hash sort:
colectm n gleata k {1, . . ., n} toate vrfurile j cu proprietatea c jk
E (j i k sunt noua numerotare).
parcurgem gleile de la cea mai mare la cea mai mic (n 1) i golim
gleata curent i astfel: adugm i la stiva vecinilor fiecrui vrf j cules din
gleata i.
Dup terminarea acestui pas, n stiva vecinilor fiecrui vrf vom avea vrfurile
sortate cresctor n noua numerotare. Pentru a se putea folosi noua reprezentare a
digrafului va trebui, desigur inversat permutarea ord.
Descrierea algoritmului:
type pointer = ^elem;
elem = record
vrf: 1 . . n;
prec: pointer;
end;
var
cap : array [1 . . n] of pointer; {cap[i] = capul stivei vecinilor vrfului i}
gal : array [1 . . n] of pointer; {gleata i (capul ei) folosit pentru sortare}
top0 : pointer; {capul stivei S0}
p1, p : pointer;
v, i, j, nr : integer;
d : array [1 . . n] of integer; {vectorul gradelor interioare ale vrfurilor n
subdigraul curent}
ord : array [1 . . n] of integer; {ord[v] = numrul de ordine al vrfului v}
begin
nr := 0; {numrul vrfurilor numerotate}
top0 := nil;
for i := 1 to n do
10
begin
p := cap[i];
while p <> nil do { p nil }
begin
j := p^.vrf;
d[j] := d[j] + 1;
p := p^.prec
end
end;
for i := 1 to n do
if d[i] = 0 then
begin
new(p);
p^.vrf := i;
p^.prec := top0;
top0 := p;
end; {s-a creat stiva S0}
while top0 <> nil do {top0 nil}
begin
v := top0^.vrf;
top0 := top0^.prec;
nr := nr + 1;
ord[v] := nr;
p := cap[v];
while p <> nil do {p nil}
begin
j := p^.vrf;
d[j] := d[j] 1;
if d[j] = 0 then
begin
new(p1);
p1^.vrf := j;
p1^.prec := top0;
top0 := p1;
end;
p := p^.prec;
end;
end;
if nr < n then
write (digraful are circuite)
else
begin {hash sort}
for i := 1 to n do
gal[i] := nil;
for i := 1 to n do
11
begin
p := cap[i];
j := ord[i];
while p <> nil do
begin
k := ord(p^.vrf);
new(p1);
p1^.vrf := j;
p1^.prec := gal[k];
gal[k] := p1;
p := p^.prec;
end;
end;
for i := 1 to n do
cap[i] := nil; {construim noi liste de adiacen}
for i := n downto 1 do
begin
p := gal[i];
while p <> nil do
begin
k := p^.vrf;
new(p1);
p1^.vrf := i;
p1^.prec := cap[k];
cap[k] := p1;
p := p^.prec;
end;
end;
{inversare lui ord}
end;
end.
Descrierea acestui algoritm este tipic pentru anumite liberti Pascal pe care le
vom folosi peste tot n cele ce urmeaz n scopul mririi lizibilitii textului.