Documente Academic
Documente Profesional
Documente Cultură
Manual Grafuri
Manual Grafuri
Roger Bacon
Aceast lucrare cuprinde o selecie de probleme importante care pot fi
rezolvate cu ajutorul teoriei grafurilor. n acest scop am enunat probleme
teoretice mpreun cu aplicaii practice ale acestora, urmate de descrieri ale
unor metode de rezolvare.
Primul capitol ncepe cu o introducere n analiza algoritmilor, urmat de
prezentarea unor noiuni de baz din teoria grafurilor. Capitolul continu cu
tehnici de reprezentare a grafurilor, i se ncheie cu un algoritm de conversie
ntre tehnicile de reprezentare descrise. Se insist asupra acelor tehnici care
conduc la algoritmi eficieni din punctul de vedere al complexitii.
Urmtoarele capitole prezint probleme clasice din acest domeniu:
parcurgerea unui graf n lime i adncime, drumuri minime i maxime,
determinarea unui arbore parial de cost minim. Pentru fiecare problem snt
descrii algoritmi eficieni de rezolvare i aplicaii ale acestora.
Alte probleme tratate n cadrul acestei lucrri: reele de transport i
grafuri planare. Ultimul capitol este rezervat problemelor NP-complete, un
subiect foarte fierbinte la ora actual n informatica teoretic.
n ceea ce privete algoritmii descrii, nu am urmrit perfeciunea din
punctul de vedere al complexitii. Atunci cnd am avut de ales ntre un
algoritm excesiv de eficient i un altul avnd o complexitate acceptabil, am
preferat un algoritm care are o descriere simpl i uor de urmrit. n unele
cazuri am prezentat mai multe soluii, urmnd ca informaticianul s decid
ce algoritm alege n funcie de problema concret, volumul datelor de
intrare, simplitatea implementrii etc.
Pentru unele probleme enunate am detaliat algoritmi de rezolvare,
descrii astfel nct implementarea s fie imediat. Pentru alte probleme am
sugerat doar ideea de baz, rmnnd ca informaticianul s elaboreze un
algoritm de rezolvare a acestora.
Manualul prezint n anexa de la sfrit i alte tehnici de reprezentare a
grafurilor, precum i algoritmi simpli pentru rezolvarea unor probleme
bazai pe aceste tehnici de reprezentare. Am preferat s includ aceste
subiecte ntr-o anex, deoarece scopul acestui manual este de a prezenta cele
mai eficiente soluii pentru rezolvarea diverselor probleme care se bazeaz
pe teoria grafurilor.
Manualul poate fi folosit cu succes de elevii i studenii care se
pregtesc pentru concursuri de informatic, dar i de informaticienii care
trebuie s proiecteze aplicaii eficiente bazate pe teoria grafurilor.
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
1. Preliminarii
1.1. Algoritmi
Toi algoritmii descrii n cadrul acestei lucrri folosesc structuri
de date de tip graf. Unele descrieri snt nsoite de o analiz a
complexitii algoritmului respectiv. Pentru ca analiza s poat fi
urmrit mai uor de cititor, n cadrul acestei seciuni snt prezentate
noiuni de baz.
Definiia 1.1. Un algoritm este un set de instruciuni care trebuie
executate pentru a se obine un rspuns la o problem dat.
Un algoritm are urmtoarele proprieti (Knuth) (Burdescu, p 10):
finitudine: trebuie s se termine ntotdeauna dup un numr finit de
pai (instruciuni);
determinism: fiecare pas trebuie s fie exact precizat, n mod riguros
i neambiguu;
generalitate: trebuie s rezolve problema pentru orice date de intrare
din domeniul precizat;
efectivitate: fiecare instruciune trebuie s fie exact i de durat
finit.
Ultima proprietate trebuie nuanat, avnd n vedere faptul c
memoria oricrui calculator este limitat. Nu ntotdeauna operaiile
aritmetice se efectueaz exact, n unele cazuri obinndu-se o
aproximare a rezultatelor, cum snt de exemplu implementrile bazate
pe aritmetica n virgul mobil (Goldberg).
n cadrul acestei lucrri algoritmii snt descrii ntr-un limbaj de
tip Algol, un precursor al limbajului Pascal (cf Aho et al).
Avnd un algoritm care rezolv o problem dat, urmeaz s
determinm resursele acestuia. Concret, de ct memorie i timp avem
nevoie ca s obinem soluia problemei? n acest scop facem
urmtoarele simplificri: fiecare operaie elementar a algoritmului se
execut ntr-o unitate de timp, informaiile despre un obiect elementar
se memoreaz ntr-o locaie de memorie (Livovschi, Georgescu).
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
p
i
f i (n ) .
Grafuri neorientate
Definiia 1.9. Un graf neorientat este un cuplu G=(X,U), unde
X este o mulime de elemente numite vrfuri, i U este o mulime de
perechi neordonate de vrfuri numite muchii. O muchie (x,y) nu are
orientare, astfel c (x,y)(y,x).
O muchie este incident vrfurilor care snt extremiti ale sale.
Dou vrfuri snt adiacente dac ntre ele exist o muchie. Dou
muchii snt adiacente dac au o extremitate comun. Gradul unui vrf
x este numrul de muchii incidente cu acesta i se noteaz g(x).
Definiia 1.10. Un lan este o succesiune de muchii cu
proprietatea c orice muchie are un vrf comun cu muchia precedent
i cellalt vrf comun cu muchia succesoare.
n mod analog definim noiunea de ciclu corespunztoare noiunii
de circuit de la grafuri orientate.
Grafuri ponderate
Definiia 1.11. Un graf ponderat este un triplet G(X,U,c),
unde X i U au semnificaiile cunoscute, i c:UR+ este o funcie
cost care asociaz fiecrui arc (fiecrei muchii) o valoare (pondere).
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
10
0
1
0
3
1
2
1
3
2
4
3
0
3
2
3
4
4
2
11
Reprezentare implicit
Spre deosebire de reprezentrile descrise mai sus, care snt
explicite, n continuare vom vedea c legturile dintre vrfuri pot fi
deduse dintr-o hart descris ntr-un anumit mod.
Fie un labirint de form dreptunghiular, cu o hart cunoscut
avnd n linii i m coloane. n continuare prezentm dou posibile
reprezentri ale acestuia.
(1) Considerm mai nti un labirint n care pereii snt construii
din blocuri avnd forma unui ptrat de latur unitate. Descrierea este
foarte simpl, fiecare element aij avnd semnificaia:
aij
1, perete
0, drum de acces
12
13
14
15
Algoritm Conversie-Arce-Gamma;
Intrare. Lista U a arcelor unui graf: (xi, yi), i 0, 1, ..., m1.
Ieire. Listele de succesori, memorate n dou masive, H i S.
begin
Ordoneaz lista U a arcelor unui graf: (xi, yi), i 0, 1, ..., m1;
Prin parcurgerea listei U se determin n, numrul de vrfuri;
for (k 0, ..., n) do H[k] 0;
k 0; i 0;
while (k m) do begin
a x[k];
repeat
i i 1;
until (i m) or (x[i] a);
H[a1] i; k i;
end
for (k 1, ..., n) do
if (H[k] 0) then
H[k] H[k1];
for (i = 0, 1, ..., m1) do S[i] y[i];
end (algoritm).
Ideea algoritmului este urmtoarea. Dup ordonarea arcelor se
parcurge aceast list (while) cu scopul de a stabili repere pentru
poziiile pe care se vor memora succesorii fiecrui vrf. Concret,
pentru fiecare vrf a se completeaz H[a1], care reprezint de fapt
prima poziie ocupat de un succesor al lui a1.
Este posibil ca unele vrfuri s nu aib succesori, i de aceea
parcurgerea masivului H completeaz reperele i pentru aceste vrfuri.
n final se completeaz masivul S cu listele de succesori, concret cu
vrfurile finale ale arcelor.
Ordonarea arcelor se efectueaz ntr-un timp de ordin O(mlogm).
Lista de arce este parcurs ntr-un timp de ordin O(m)O(mlogm).
Lista H se iniializeaz i se corecteaz ntr-un timp de ordin O(n).
Rezult
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
16
17
18
dou ori (cte o dat pentru fiecare vrf al su vizitat), i fiecare vrf
este introdus n / extras din coad cel mult o dat.
S observm c algoritmul prezentat mai sus proceseaz vrfurile
grafului ntr-o ordine care depinde de modul cum snt descrise listele
succesorilor fiecrui vrf.
Prezentm n continuare o tehnic foarte simpl de implementare
a cozii, valabil numai pentru grafuri statice. Coada Q este un masiv
cu n elemente, i limitele u i v au semnificaia urmtoare:
u poziia primului element care va fi extras din coad;
v poziia unde va fi inserat urmtorul element n coad.
Operaiile asupra cozii se implementeaz astfel:
Operaie
Implementare
Q InitQueue(s);
not EmptyQueue(Q)
x DeQueue(Q);
EnQueue(Q,y);
Q[0] s; u 0; v 1;
(u v)
x Q[u]; u u 1;
Q[v] y; v v 1;
19
Figura 2.1. Graf cu dou componente conexe: {x0, x1, x3, x4} i {x2, x5, x6}.
Algoritm CompConexe;
Intrare. Un graf neorientat (X, ).
Ieire. Un masiv C: componentele conexe ale acestuia.
begin
for (each s X) do C[s] 0;
k 0;
for (each s X) do
if (C[s] 0) then begin
k k 1; u 0; v 1;
C[s] k; Q[0] s;
while (u v) do begin
x Q[u]; u u 1;
for (each y (x)) do
if (C[y] 0) then begin
Q[v] y; v v 1;
C[y] k;
end
end
end
end (algoritm).
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
20
21
Figura 2.2. Un graf bipartit: X1 = {x0, x2, x4}, X2 = {x1, x3, x5, x6}.
Algoritm Bipartit;
Intrare. Un graf neorientat (X,).
Ieire. Un masiv C: culoarea fiecrui vrf (1 sau 2).
Valoare returnat True sau False: graful este sau nu bipartit.
begin
for (each s X) do C[s] 0;
for (each s X) do
if (C[s] 0) then begin
C[s] 1; Q[0] s;
u 0; v 1;
while (u v) do begin
x Q[u]; u u 1;
for (each y (x)) do
if (C[y] 0) then begin
Q[v] y; v v 1;
C[y] 3 C[x];
end
else
if (C[y] C[x]) then
return False;
end
end
return True;
end (algoritm).
Ideea acestui algoritm este urmtoarea. Iniial toate vrfurile snt
nemarcate. Primul vrf nemarcat (fie acesta s) este marcat cu culoarea
1 i toi succesorii si nemarcai se introduc ntr-o coad i se
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
22
23
24
x Q[u]; u u 1;
for (each y (x)) do begin
g(y) g(y) 1;
if (g(y) 0) then begin
Q[v] y; v v 1;
R[y] R[x] 1;
end
end
end
return (v n);
end (algoritm).
Ideea acestui algoritm este urmtoarea. Iniial se determin, prin
inspectarea tuturor vrfurilor grafului i a fiecrui succesor, gradul
interior al fiecrui vrf. Vrfurile care au gradul interior zero (nu au
predecesori) snt introduse n coad, toate aceste vrfuri avnd rangul
zero. n continuare se extrage cte un vrf x din coad, i se reduce cu
o unitate gradul interior al fiecrui succesor y(x). Dac un
succesor y ajunge s aib gradul interior zero, acesta este introdus n
coad i i se asociaz rangul imediat urmtor: R[x] 1.
n final, dup ce coada devine vid, se verific dac au trecut prin
coad toate cele n vrfuri ale grafului. n caz afirmativ graful nu are
circuite i se poate defini o relaie de ordine topologic pe mulimea
vrfurilor acestuia.
Acest algoritm va fi folosit n capitolul cinci, rezervat problemei
de ordonanare.
Ideea acestui algoritm este preluat din literatura francez
(Gondran, Minoux, p 41-44) unde se determin i rangul fiecrui vrf.
Alte lucrri prezint algoritmi bazai pe parcurgerea n adncime
(Larry, Denenberg, p 436-438) (Burdescu, p 69-74).
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
25
26
27
28
29
30
3.3. Biconectivitate
Definiia 3.4. Un vrf s al unui graf neorientat este vrf critic (sau
vrf de articulaie) dac exist dou vrfuri distincte x i y orice drum
elementar de la x la y trece prin s.
Definiia 3.3. Un graf neorientat este biconex dac, fiind date
dou vrfuri distincte x i y, exist cel puin dou drumuri elementare
ntre ele care nu au nici un vrf comun, cu excepia celor dou capete.
Cu alte cuvinte, un graf neorientat este biconex dac i numai dac nu
are vrfuri critice.
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
31
Exemplu. Graful din figura 3.2 (a) este biconex, pe cnd cel din
figura 3.2 (b) nu. Al doilea graf are dou vrfuri critice: x0 i x1.
Figura 3.2. Un graf biconex(a); un graf cu dou vrfuri critice (b). Graful
(b) admite trei componente biconexe: {x0, x5}, {x0, x1, x2} i {x1, x3, x4}.
32
33
Figura 3.3. Graful (a) are dou vrfuri critice: x0 i x1. n urma
parcurgerii n adncime a acestuia se obine arborele (b).
Exemplu. n figura 3.3 vrful x0 este critic deoarece are doi copii:
x1 i x6. Dac am elimina arcul (x0,x6) i am introduce arcul (x1,x6)
vrfurile ar fi parcurse n aceeai ordine dar vrful x0 nu ar mai fi critic
deoarece singurul lui copil ar fi x1.
Vrful x1 este critic deoarece unul dintre copiii lui, x3, nu are nici
un descendent care s fie unit n arbore printr-un arc cu un strmo
propriu al lui x1. Pe de alt parte, x3 nu este critic deoarece arcul
(x4,x1) unete un descendent al acestuia cu un strmo propriu al lui
x3; n aceeai situaie este i arcul (x5,x1). S observm c vrful x1
este critic chiar dac un succesor al acestuia (x2) este unit printr-un
arc cu un strmo propriu al lui x1 (x0); cellalt succesor (x3) nu are
aceast proprietate.
Faptul c un vrf y este unit cu un vrf z, strmo propriu al
vrfului x, este reflectat de relaia D[z]D[x]D[y]. Figura 3.3 (b)
indic i modul de marcare a vrfurilor, valorile reprezentnd
adncimea relativ la vrful rdcin (x0).
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
34
35
md D[x];
for (each y (x)) do
if (D[y] 0) then begin
D[y] D[x] 1;
m TravCritic(y);
if (m D[y]) and (x r) then Cv[x] True;
md minim(m,md);
end
else md minim(md,D[y]);
return md;
end (funcie).
Teorema 3.3. Determinarea vrfurilor critice ale unui graf
neorientat necesit un timp de ordin O(nm).
Algoritmul poate fi completat pentru a determina componentele
biconexe astfel. Se introduc ntr-o stiv gestionat explicit toate
arcele de avansare pn cnd se depisteaz un vrf critic. n acest
moment se elimin din stiv ultimele arce pn cnd se depisteaz un
arc care a plecat din vrful depistat ca fiind critic. Toate vrfurile
ntlnite pe parcursul eliminrii arcelor din stiv formeaz o
component biconex. Aceeai procedur trebuie efectuat n mod
repetat i pentru vrful rdcin r, dac se depisteaz c este critic.
Aceast stiv separat poate fi organizat ca un masiv de cupluri (x,y)
avnd cel mult m elemente.
36
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
37
38
39
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
40
41
staii care necesit ct mai puine schimbri, dac ntre cele dou staii
nu exist o legtur direct.
2) X reprezint o mulime de camere dintr-un labirint, i
reprezint relaiile de vecintate: pentru fiecare camer, care snt
camerele unde se poate ajunge direct. S se determine un drum ct mai
scurt spre ieirea din labirint.
Exemplu. n figura 4.1, ntre x0 i x3 avem dou drumuri de
lungime minim: x0 x1 x3 i x0 x2 x3.
Pentru a rezolva aceast problem folosim tehnica breadth first
search. Deoarece aceast tehnic proceseaz vrfurile n ordinea
distanei de la vrful surs, putem gsi astfel lungimea celui mai scurt
drum ntre dou vrfuri date, concret numrul de arce ale acestuia.
Algoritm DrumLungMinim (Lee);
Intrare. Un graf orientat (X, ) i un vrf s din X.
Ieire. Lungimile minime de la s la toate celelalte vrfuri din X ntr-un
masiv . Informaiile necesare reconstituirii unui drum de lungime
minim de la s la orice alt vrf x din X ntr-un masiv P.
begin
for (each x X) do begin
P[x] x; [x] ;
end
Q[0] s; [s] 0;
u 0; v 1;
while (u v) do begin
x Q[u]; u u 1;
for (each y (x)) do
if ([y] ) then begin
[y] [x] 1; P[y] x;
Q[v] y; v v 1;
end
end
end (algoritm).
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
42
43
44
45
46
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
47
48
v (u1) / 2;
if (K[A[v]].c w) then break;
A[u] A[v]; K[A[v]].a u; u v;
end
A[u] y; K[y].a u;
end (procedura);
Funcia Extrage() cf Athanasiu et al;
begin
x A[0]; K[x].a 1;
v 0; na na 1;
A[0] A[na]; K[A[0]].a 0;
while (True) do begin
u 2 v 1;
if (u na) then break;
if (u1 na) then
if (K[A[u]].c K[A[u1]].c) then
u u 1;
if (K[A[na]].c K[A[u]].c) then break;
A[v] A[u]; K[A[u]].a v;
v u;
end
A[v] A[A[na]]; K[A[na]].a v;
return x;
end (funcie);
Termenul arbori de selecie este preluat din lucrarea Tehnici de
programare (Athanasiu et al).
Pentru extragere se reine care este vrful aflat n ierarhie, i se
marcheaz n masivul C faptul c acest vrf nu va mai face parte din
list. n continuare se aduce pe prima poziie a masivului A (n
rdcina arborelui) vrful aflat pe ultima poziie. Se actualizeaz
referina acestui vrf n masivul C.
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
49
50
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
51
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
52
Figura 4.4. Exemple de drumuri: (A, B, C), (C, I, D), (B, C, I, D, E, F).
53
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
54
55
A
0
1
0
B
0
B
1
2
2
C
1
C
2
4
3
I
2
D
4
6
5
A
3
E
6
7
6
C
4
F
7
8
8
E
5
G
8
9
8
F
6
H
9
10
10
D
7
I
10
12
11
H I
8 9
D G
10 11
56
Introducerea datelor
Fie un graf simetric ponderat G = (X, U, d) unde:
X este o mulime finit i nevid de noduri, asociat cu mulimea
staiilor CFR;
U este o mulime de arce care indic legturi directe ntre dou
staii: dac (x,y) U ntre x i y nu exist alte staii;
d este o funcie distan simetric, d:UN*: d(x,y)=d(y,x)
pentru orice (x,y) U.
Prima problem care trebuie rezolvat este cea a introducerii ct
mai comode a datelor despre un mers nou. Pentru fiecare tren se
precizeaz: care este traseul acestuia, prin ce staii trece, ora sosirii i
plecrii pentru fiecare staie.
Pentru un tren oarecare se introduc staia iniial de plecare i
staia final de sosire. n acest moment s-ar putea determina un drum
de distan minim ntre cele dou staii. Dar nu ntotdeauna un tren
parcurge traseul de distan minim dintre cele dou staii. Astfel c,
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
57
58
59
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
60
5. Problema ordonanrii
5.1. Enunul problemei
61
62
63
64
65
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
66
c( v )
vV
este minim.
67
68
69
end (algoritm).
nainte de a prezenta o descriere a algoritmului lui Kruskal care
poate fi uor implementat, s facem cteva observaii.
S reamintim faptul c operaia de baz n algoritmul lui Kruskal
este cutarea unei muchii de cost minim care unete dou componente
conexe distincte determinate pn n acel moment. Am divizat aceast
operaie n trei pri: caut o muchie de cost minim, determin dac o
muchie dat unete dou componente conexe distincte, i adaug o
muchie nou la graful construit pn n acel moment astfel se obine
din dou componente conexe una singur.
Pentru a rezolva corect prima problem trebuie ca, n cazul n care
o muchie nu poate fi adugat la graful care se construiete (deoarece
ambele capete aparin aceleiai componente conexe), aceasta s nu
mai fie folosit deloc, deoarece componenta conex nu va fi spart n
viitor. Astfel este suficient s considerm muchiile grafului G
ordonate cresctor dup cost.
Cea mai simpl soluie este ordonarea tuturor muchiilor dup cost,
care necesit un timp de ordin O(m log n).
Urmtoarele dou operaii se rezolv folosind o structur de date
auxiliar (U-arbori: Larry, Denenberg, p 445-446) (Burdescu, p 9298), detaliat n seciunea urmtoare:
determin, pentru fiecare vrf, din ce component face parte;
efectueaz reuniunea a dou componente.
n algoritmul descris mai jos, Init(M,X) iniializeaz o list M a
componentelor conexe. Fiecare component are un vrf special numit
reprezentantul mulimii.
Funcia Identif(y,M) determin reprezentantul componentei
conexe care l conine pe y.
Procedura Union(s,t,M) determin reuniunea a dou componente
conexe care le conin pe s, respectiv pe t.
Algoritm Kruskal varianta pentru implementare;
Intrare. Un graf ponderat (X, U, c).
Ieire. Un arbore parial de cost minim T (X, V).
begin
Q masiv cu muchiile grafului ordonate cresctor dup cost;
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
70
V ; Init(M, X);
l 1; k 0;
while (l n) and (k m) do begin
(x, y) muchia de pe poziia k din Q;
s Identif(x, M); t Identif(y, M);
k k 1;
if (s t) then begin
Union(s, t, M); V V {(x,y)};
l l 1;
end
end
end (algoritm).
n final, dac graful iniial este conex, se obine (l n). Aceast
afirmaie va fi justificat n seciunea urmtoare.
6.3. U-arbori
Fie o mulime X care are n elemente. Prima operaie pe care o
efectum este formarea unei partiii din n submulimi, fiecare avnd
exact un element. Aceasta este operaia de iniializare.
n continuare presupunem c avem o partiie M a mulimii X care
are k submulimi (kn). Considerm de asemenea c fiecare
submulime are un vrf special numit reprezentantul mulimii. n
aceste condiii definim nc dou operaii pe care le efectum pe
aceast partiie.
Fiind dat un element x, care este submulimea care l conine?
Concret, care este reprezentantul submulimii respective?
Se dau dou elemente s i t, fiecare fiind reprezentantul unei
submulimi. S se determine reuniunea celor dou submulimi.
Evident, n aceast situaie unul din cele dou elemente va deveni
reprezentantul noii submulimi astfel formate.
Partiia M este reprezentat printr-un masiv de n elemente, fiecare
element de pe poziia x (xX) avnd dou cmpuri, r i h, care ne dau
informaii despre statutul elementului x. Cmpul r indic dac x este
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
71
72
73
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
74
7. Probleme de transport
7.1. Reele de transport
Definiia 7.1. Un graf orientat ponderat G=(X,U,c) este o reea
de transport dac este conex i exist un singur vrf s fr predecesori
i un singur vrf t fr succesori:
sX este intrare n reea i 1(s)= i (s) ;
tX este ieire din reea astfel nct 1(t) i (t) ;
pentru orice alt vrf xX (x s i x t), 1(x) i (x) ;
Valoarea c(u) 0 este capacitatea arcului u U.
Definiia 7.2. O funcie :UR+ definete un flux n reeaua
G dac:
a) pentru orice arc uU avem (u)c(u) (fluxul este compatibil cu
reeaua);
b)pentru orice vrf xX (xs i xt) se respect legea conservrii
fluxului:
(u ) (u ) ,
u ( x )
u ( x )
unde am notat:
(x) {(y,x)U|yX} mulimea arcelor incidente interior
vrfului x;
(x) {(x,y)U|yX} mulimea arcelor incidente exterior
vrfului x;
Din b) se deduce relaia: (u ) (u )
u ( z )
u ( a )
75
76
Algoritmul Ford-Fulkerson
Se pornete iniial cu fluxul nul. Un flux compatibil oarecare se
majoreaz folosind urmtorul procedeu de marcare a vrfurilor, vrful
s fiind ntotdeauna marcat:
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
77
(u) w, u A
Dar
( u )
u (Y )
u ( Y )
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
78
De asemenea
( u )
u (Y )
u ( x )
79
Tehnici de implementare
Reeaua de transport din figura 7.2 este folosit ca exemplu pentru
a arta cum lucreaz algoritmul Edmonds-Karp. Aceast reea se
reprezint astfel:
Hr 0 2 4 5 6 7 7
Sr 1 2 3 4 3 5 5
C 1 2 3 2 3 1 3
(0) (1) (2) (3) (4) (5) (6)
Pentru a uura citirea corespondenei dintre reeaua original i
graful ecart am pus n eviden indicii n masivul Sr.
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
80
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
81
82
83
84
(u)
min
i=1 j=1
ij xij
cij 0
xij
j=1
ai
1im
= bj
1jn
xij
i=1
xij 0
m
unde
1 i m, 1 j n
ai = b j
j=1
i=1
ai 0, bj 0
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
85
86
87
i=1
i=1
i =1, x = i x i
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
88
8. Grafuri planare
8.1. Definiii i proprieti
Pentru a reprezenta unele structuri geometrice n plan sau n
spaiu se folosete o categorie special de structuri de date: grafuri
planare.
Definiia 8.1. Un graf G este planar dac este posibil s fie
reprezentat pe un plan astfel nct vrfurile s fie distincte, muchiile
curbe simple i dou muchii s nu se intersecteze dect la
extremitile lor (dac snt adiacente).
Reprezentarea grafului conform cu condiiile impuse se numete
graf planar topologic i se noteaz tot prin G. Nu se consider
distincte dou grafuri planare topologice dac le putem face s
coincid prin deformarea elastic a planului.
Definiia 8.2. O fa a unui graf planar este o regiune a planului
delimitat de muchii, care are proprietatea c orice dou puncte din
aceast regiune pot fi unite printr-o curb simpl care nu ntlnete
nici muchii i nici vrfuri.
Definiia 8.3. Frontiera unei fee este mulimea muchiilor care
ating faa respectiv. Dou fee snt adiacente dac frontierele lor au
cel puin o muchie comun.
ntr-un graf topologic, frontiera unei fee este format din unul
sau mai multe cicluri elementare disjuncte, din muchii suspendate sau
care unesc dou cicluri disjuncte (istmuri).
Definiia 8.4. Conturul unei fee este conturul ciclurilor
elementare care conin n interiorul lor toate celelalte muchii ale
frontierei.
Exist ntotdeauna o fa infinit i care are frontier, dar nu are
contur; toate celelalte fee snt finite i admit un contur.
Teorema 8.1 (Euler). ntr-un graf planar topologic conex cu n
vrfuri, m muchii i ffee avem relaia:
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
89
nmf 2
Demonstraie (Tomescu 1981, pg 203-204). Dac f 1 atunci
m n1 pentru un arbore (teorema 6.2), deci relaia este adevrat.
Presupunem afirmaia adevrat pentru orice graf planar conex
cu f 1 fee, i s considerm un graf planar conex cu f fee. Fie (x,y)
o muchie a unui ciclu; aceasta se afl pe frontiera a dou fee S i T.
Dac eliminm muchia (x,y) se obine un graf planar conex cu n n
vrfuri, m m1 muchii i f f 1 fee. Conform ipotezei de
inducie nmf n1m1f 2, de unde obinem c nmf 2.
90
91
92
fa ca i e .
Vrf
x0
x1
x2
x3
Vector
e1, 2
e2, 0
e0,1
e1,3
e3, 2
Coord
(3,2)
(1,2)
(1,2)
(3,2)
Faa
f0
f1
Un vector incident
e1, 2
e2 , 4
e0,1
Origine
x0
Destinaie
x1
Geamn
Faa
f0
e1, 2
x1
x2
e2 ,1
f0
e2 , 0
x2
x0
f0
e2 ,1
x2
x1
e1, 2
f1
e1,3
x1
x3
f1
Urm
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
93
e2 ,1
e3, 2
x3
x2
f1
94
95
Free(S ) = B\
P
i
i 1
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
96
97
98
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
99
9. Probleme NP-complete
9.1. Mulimi intern stabile
Definiia 9.1. Fie G (X, U) un graf orientat. O mulime S X
este intern stabil (independent) dac pentru orice x,y X avem
(x,y) U i (y,x) U.
Proprieti. Dac I este familia mulimilor intern stabile atunci:
a) I ;
b) SI i AS AI ;
c) S1, S2 I S1 S2 I .
Definiia 9.2. O mulime S este intern stabil maximal dac
pentru orice AI , SA implic S A.
Cu alte cuvinte, S este maximal n raport cu operaia de
incluziune.
Definiia 9.3. Numrul de stabilitate intern al grafului G este
valoarea (G) max {|S| | SI }.
Mulimea intern stabil S pentru care |S| (G) se numete
mulime intern stabil maxim.
100
101
Numr cromatic
Definiia 1. Fiind dat un numr natural k, un graf este k-cromatic
dac vrfurile sale pot fi colorate cu cel mult k culori diferite, astfel
nct dou vrfuri adiacente s fie colorate diferit.
Definiia 2. Numrul cromatic al unui graf este cel mai mic
numr natural k pentru care graful este k-cromatic i se noteaz cu
(G).
Teorema lui Knig. Un graf este bicromatic dac i numai dac
nu conine cicluri de lungime impar.
Demonstraie. () Dac graful este bicromatic, atunci nu poate
conine cicluri de lungime impar, deoarece vrfurile unui astfel de
ciclu nu pot fi colorate cu dou culori fr s avem dou vrfuri
adiacente colorate identic.
() Considerm un graf fr cicluri impare i conex (dac nu
este conex, se consider separat fiecare component conex). Se
coloreaz din aproape n aproape vrfurile astfel:
- un vrf oarecare a se coloreaz n albastru;
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
102
103
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
104
A ( A B ) ( A B C ) ( A B C) A ( A B ) ( A
B) A A S.
Dac nu se respect aceast regul, se poate ajunge la o born
inferioar a funciei pe submulimea aleas, fr ca ea s borneze
inferior ntreaga referenial. De aceea, de fiecare dat se continu pe
arborescen cu acea frunz care are borna asociat de valoare
minim. Astfel, pe msur ce cardinalul submulimilor succesive de
soluii descrete, borna inferioar a funciei pe ntreaga mulime
crete monoton, deci ea devine egal cu minimul funciei cnd, pe
aceast cale, ajungem la o submulime format dintr-un singur
element al lui S, care este soluia optim (prin ipotez asociat cu
minimul funciei). Dac exist mai multe soluii, pot fi gsite toate pe
diversele ramuri ale arborescenei care conduc la borne inferioare ale
funciei, egale cu minimul acesteia.
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
105
, i j ( xi , x j ) U
c( xi , x j ),( xi , x j ) U
aij
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
106
107
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
108
Anexa A
A.1. Alte tehnici de reprezentare
Reprezentare bazat pe funcia (liste de succesori)
Se folosete un vector Ns[] pentru a memora ci succesori are
fiecare vrf. Se folosete o matrice Ls[][] pentru a memora lista
succesorilor fiecrui vrf.
Exemplu (graful orientat din figura 1.2):
Ns: 2 2 1 3 1
primele dou vrfuri au cte doi succesori, al treilea unul
singur
Ls: 1 3 (vrful x0 are doi succesori: x1 i x3)
2 3
4 (vrful x2 are un singur succesor: x4)
0 2 4
2
Implementare n limbajul C:
unsigned n,j,Ns,*Ls;
Citete(n); numr de vrfuri
Ns = calloc(n,sizeof(unsigned));
Ls = calloc(n,sizeof(unsigned *));
Ciclu (pentru fiecare vrf x Xcare are succesori):
Citete(Ns[x]); ci succesori are x
Ls[x] = calloc(Ns[x],sizeof(unsigned));
for (j=0; j<Ns[x]; j++)
Citete(Ls[x][j]) al j-lea succesor al vrfului x
Listele succesorilor fiecrui vrf:
for (x=0; x<n; x++) {
printf("\nSuccesorii lui %u: ",x);
for (j=0; j<Ns[x]; j++)
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
109
printf(" %u",Ls[x][j]);
Eliberare memorie:
free(Ns);
for (j=0; j<n; j++) free(Ls[j]);
free(Ls);
n comparaie cu tehnica descris n primul capitol, aceast soluie
consum ceva mai mult memorie, n schimb nu necesit conversie
din lista arcelor. Se recomand pentru aplicaii de test, n cazul n care
graful este descris cu ajutorul funciei astfel:
n, numrul de vrfuri;
pentru fiecare vrf x:
numrul de succesori;
pentru fiecare succesor: indexul acestuia i costul legturii.
Matricea de adiacen
Pentru grafuri neponderate se folosete o matrice Ann:
aij =
1, (i, j) U
0, (i, j) U
0
0
1
0
1
0
0
1
1
1
0
0
0
0
1
1
0
0
0
0
1
1
0
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
110
aij
c(i, j ), (i, j ) U
= 0, i j
, (i , j ) U
111
begin
D A;
for (each k X) do
for (each i X) do
for (each j X) do
dij dij dik dkj;
end (algoritm).
i snt operaiile logice OR i AND, considernd c matricea
D are coeficieni valori booleene. Se observ c acest algoritm are
complexitate de ordin O(n3).
Valoarea dij indic dac ntre vrfurile xi i xj exist cel puin un
drum (dij 1) sau nici unul (dij 0).
112
113
Write(t); x t;
while (x s) do begin
x psx; Write(x);
end
Figura A.1.
Modificarea
relaiei de
preceden.
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
114
Bibliografie
A. V. Aho, J. E. Hopcroft, J. D. Ullman The design and analysis of
computer algorithms / Addison-Wesley, Reading Mass, 1974
Irina Athanasiu, Valeriu Cristea, Valentin Iorga, Eugenia Kalisz Tehnici
de programare / Editura Teora, 1994
R. E. Bellman On a routing problem / Quat. Applied Mathematics 16,
1958, pg 87-90
Mark de Berg, Marc van Kreveld, Mark Overmars, Ottfried Schwarzkoph
Computational geometry. Algorithms and applications / Springer, 1997
Claude Berge Teoria grafurilor i aplicaii / Editura Tehnic, 1969
Dumitru Dan Burdescu Analiza complexitii algoritmilor / Editura
Albastr, 1998
Stephen A. Cook The complexity of theorem-proving procedure / 3-rd
ACM Symposium of Computing, 1970, pg 151-158
Thomas H. Cormen, Charles E. Leiserson, Ronald R. Rivest Introducere
n algoritmi / Editura Libris, 2000
Ion Cozac Minimum cost path in a huge graph / Studia Universitas
Babe-Bolyai Cluj-Napoca, Informatica 2, 2002, pg 23-28
E. Dijkstra A note on two problems in connection with networks /
Numerische Mathematik, 1, 1959, pg 169-271
J. Edmonds, R. M. Karp Theoretical improvements in algorithmic
efficiency for network flow problems / Journal of the ACM, vol 19 no
2,1972, pg 248-264
L. R. Ford, D. R. Fulkerson Maximal flow through a network / Canadian
Journal of Mathematics, 8, 1956, pg 399-404
M. R. Garey, R. L. Graham, D. S. Johnson Some NP-complete geometric
problems / 8-th Annual Symposium on Theory of Computation, may 1976,
pg 10-22
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
115
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
116
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
117
Cuprins
1. Preliminarii. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.1. Algoritmi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Grafuri: noiuni de baz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3. Tehnici de reprezentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.4. Parcurgerea unui graf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.5. Obinerea listelor de succesori . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.6. Grafuri dinamice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
7
10
13
15
17
18
18
19
21
23
26
26
28
31
36
41
41
43
46
50
??
??
5. Problema ordonanrii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
??
??
??
??
??
??
??
??
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
118
7. Probleme de transport . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
??
??
??
??
??
8. Grafuri planare. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
??
??
??
??
9. Probleme NP-complete . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
??
9.1. A
9.2. A
9.3. U
....................................
..................................
.............................................
??
??
??
Anexa A . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
??
??
??
Bibliografie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
??
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
119