Sunteți pe pagina 1din 10

UNIVERSITATEA ROMÂNO-AMERICANĂ din BUCUREȘTI

Facultatea de INFORMATICĂ MANAGERIALĂ


Domeniul de licență: CIBERNETICĂ, STATISTICĂ ȘI INFORMATICĂ ECONOMICĂ
Specializarea: INFORMATICĂ ECONOMICĂ

Disciplina - CERCETĂRI OPERAŢIONALE


Anul III - semestrul 1 / 2018-2019

III. ELEMENTE DE TEORIA GRAFURILOR

3.1. Concepte de bază

Definiţia 3.1. Un graf orientat este o pereche de forma 𝐺 = (𝑋, 𝑈) unde X este o mulţime
finită şi 𝑈 = {(𝑥, 𝑦)⁄𝑥 , 𝑦 ∈ 𝑋} ⊂ 𝑋 × 𝑋. Elementele lui X se numesc vârfuri sau noduri ale
lui G, iar perechile (𝑥, 𝑦) se numesc arce ale grafului G: x este extremitatea iniţială (sursă),
y extremitatea finală (destinaţie) pentru arcul (𝑥, 𝑦).

Graful 𝐺 = (𝑋, 𝑈) admite o reprezentare geometrică în plan, obţinută astfel:

➢ vârfurile se plasează în plan în poziţii distincte oarecare;


➢ pentru fiecare arc (𝑥, 𝑦), punctele x şi y se unesc printr-un segment orientat.

Exemplu. Considerăm graful orientat 𝐺 = (𝑋, 𝑈) dat de:

𝑋 = {𝑥1 , 𝑥2 , 𝑥3 , 𝑥4 }

𝑈 = {(𝑥1 , 𝑥3 ), (𝑥1 , 𝑥4 ), (𝑥2 , 𝑥1 ), (𝑥3 , 𝑥2 ), (𝑥3 , 𝑥4 )}

𝑥1

𝑥2

𝑥3 𝑥4

1
Definiţia 3.2. Dacă arcele 𝑎1 , 𝑎2 , … , 𝑎𝑘 ∈ 𝑈 au proprietatea că extremitatea finală a arcului
𝑎𝑗 coincide cu extremitatea iniţială a arcului 𝑎𝑗+1, (∀) 𝑗 ∈ ̅̅̅̅̅̅̅̅̅̅
1, 𝑘 − 1, atunci mulţimea ordonată
𝑑 = {𝑎1 , 𝑎2 , … , 𝑎𝑘 } formează un drum în graful 𝐺 = (𝑋, 𝑈).

Echivalent, drumul mai poate fi definit şi ca o mulţime ordonată de vârfuri 𝑑=

{𝑥𝑖1 , 𝑥𝑖2 , … , 𝑥𝑖ℎ } ⊂ 𝑋 pentru care avem proprietatea (𝑥𝑖𝑗 , 𝑥𝑖𝑗+1 ) ∈ 𝑈, (∀) 𝑗 ∈ ̅̅̅̅̅̅̅̅̅̅
1, ℎ − 1 .

Definiţia 3.3. Drumul 𝑑 = {𝑎1 , 𝑎2 , … , 𝑎𝑘 } cu proprietatea că extremitatea finală a arcului 𝑎𝑘


coincide cu extremitatea iniţială a arcului 𝑎1 , se numeşte circuit în graful G.

Distingem:

➢ drum elementar – un drum în care fiecare nod apare o singură dată;


➢ drum neelementar - un drum care trece de două sau mai multe ori prin acelaşi nod.

Un drum elementar care trece prin toate nodurile grafului se numeşte drum hamiltonian.

Lungimea unui drum este egală cu numărul arcelor care îl formează.

Numărul de noduri la care se poate ajunge din nodul 𝑥𝑖 se numeşte puterea de atingere a
nodului 𝑥𝑖 ∈ 𝑋 şi se notează 𝑝(𝑥𝑖 ).

3.2. Matrici asociate unui graf

Fie 𝐺 = (𝑋, 𝑈) un graf orientat având 𝑋 = {𝑥1 , 𝑥2 , … , 𝑥𝑛 }.

Definiţia 3.4. Matricea 𝐴 = (𝑎𝑖𝑗 )𝑖,𝑗∈1,𝑛


̅̅̅̅̅
dată de relaţiile:

1, 𝑑𝑎𝑐ă (𝑥𝑖 , 𝑥𝑗 ) ∈ 𝑈
𝑎𝑖𝑗 = { , (∀) 𝑖. 𝑗 ∈ ̅̅̅̅̅
1, 𝑛 .
0, 𝑑𝑎𝑐ă (𝑥𝑖 , 𝑥𝑗 ) ∉ 𝑈

se numeşte matricea arcelor (matricea de adiacenţă, matricea conexiunilor directe)


a grafului G.

2
Pentru exemplul anterior avem:

0 0 1 1
𝐴 = (1 0 0 0)
0 1 0 1
0 0 0 0

Definiţia 3.5. Matricea 𝐷 = (𝑑𝑖𝑗 )𝑖,𝑗∈1,𝑛


̅̅̅̅̅
dată de relaţiile:

1, 𝑑𝑎𝑐ă î𝑛 𝐺 𝑒𝑥𝑖𝑠𝑡ă 𝑐𝑒𝑙 𝑝𝑢ţ𝑖𝑛 𝑢𝑛 𝑑𝑟𝑢𝑚 𝑑𝑒 𝑙𝑎 𝑥𝑖 𝑙𝑎 𝑥𝑗


𝑑𝑖𝑗 = { , (∀) 𝑖. 𝑗 ∈ ̅̅̅̅̅
1, 𝑛
0, î𝑛 𝑐𝑎𝑧 𝑐𝑜𝑛𝑡𝑟𝑎𝑟

se numeşte matricea drumurilor (matricea conexiunilor totale) a grafului G.

Remarcăm faptul că
➢ două grafuri care au aceeaşi mulţime de vârfuri şi aceeaşi matrice a arcelor coincid;
➢ nu este obligatoriu ca două grafuri având aceeaşi mulţime de vârfuri şi aceeaşi matrice
a drumurilor, să aibă şi aceleaşi arce.

3.3. Găsirea drumurilor într-un graf orientat

Fie 𝐺 = (𝑋, 𝑈) un graf orientat cu n noduri: 𝑋 = {𝑥1 , 𝑥2 , … , 𝑥𝑛 }.

În vederea elaborării unor algoritmi de determinare a matricii drumurilor, vom introduce


operaţiile de adunare şi înmulţire booleană:

+̇ 0 1
0 0 1
1 1 1

3
×̇ 0 1
0 0 0
1 0 1

Algoritm 1.

Pas 1. Se construieşte matricea arcelor A.

Pas 2. Se calculează succesiv puterile matricei A până la 𝐴𝑛−1.

Pas 3. Se calculează matricea drumurilor:

𝐷 = 𝐴 + 𝐴2 + ⋯ + 𝐴𝑛−1 = 𝐴(𝐴 + 𝐼)𝑛−2

Observaţie. Dacă ne interesează doar existenţa drumurilor dintre noduri, nu şi numărul lor,
atunci vom folosi înmulţirea şi adunarea booleană.

Algoritm 2.

Pas 1. Se construieşte matricea arcelor A.

Pas 2. Pentru fiecare linie i, se adună boolean la aceasta toate liniile j pentru care 𝑎𝑖𝑗 = 1.

Pas 3. Se reia pasul 2 până când, după o aplicare a acestuia, matricea rămâne aceeaşi.

Ultima matrice obţinută este matricea drumurilor D.

4
Observaţie. Aceşti algoritmi sunt destul de lenţi în ceea ce priveşte aplicarea pe calculator.

Ambele procedee ne arată existenţa sau nu a unui drum între două noduri, eventual ce
lungime are (𝐴𝑘 – existenţa drumurilor de lungime k, dacă s-au folosit operaţiile algebrei
booleene) şi câte sunt de această lungime ( 𝐴𝑘 – numărul drumurilor de lungime k, dacă s-au
folosit operaţiile obişnuite).

Totuşi, în problemele practice cel mai important este să ştim care sunt efectiv aceste drumuri.

Pentru exemplul anterior se obţine:

1 1 1 1
𝐷 = 𝐴 + 𝐴2 + 𝐴3 = (1 1 1 1)
1 1 1 1
0 0 0 0

Matricea drumurilor 𝐷 = (𝑑𝑖𝑗 )𝑖,𝑗∈1,𝑛


̅̅̅̅̅
a grafului G poate indica prezenţa sau absenţa

circuitelor în graful G, astfel:


➢ dacă 𝑑𝑖𝑖 = 0, (∀) 𝑖 ∈ ̅̅̅̅̅
1, 𝑛 , atunci graful G nu are circuite
➢ dacă (∃) 𝑖 ∈ ̅̅̅̅̅
1, 𝑛 pentru care 𝑑𝑖𝑖 = 1, atunci în G există un circuit care are ca vârf
iniţial şi final nodul 𝑥𝑖 .

De asemenea, matricea drumurilor D ne ajută să calculăm puterile de atingere ale fiecărui


nod din G, astfel:

𝑝(𝑥𝑖 ) = numărul elementelor egale cu 1 de pe linia i din matricea D, 𝑖 ∈ ̅̅̅̅̅


1, 𝑛.

5
3.4. Determinarea drumurilor hamiltoniene

Fie 𝐺 = (𝑋, 𝑈) un graf orientat, fără circuite, cu n noduri: 𝑋 = {𝑥1 , 𝑥2 , … , 𝑥𝑛 }.

Presupunem că am calculat matricea drumurilor D şi puterile de atingere ale tuturor


nodurilor.

Teoremă (Chen) Un graf orientat, fără circuite, cu n noduri conţine un drum hamiltonian

𝑛(𝑛−1)
dacă şi numai dacă ∑𝑛𝑖=1 𝑝(𝑥𝑖 ) = 2

Teoremă
Dacă într-un graf orientat, fără circuite există un drum hamiltonian, atunci acesta este unic.

Algoritmul lui Chen

Pas 1. Se scrie matricea arcelor A

Pas 2. Se calculează matricea drumurilor D

Pas 3. Dacă (∃) 𝑖 ∈ ̅̅̅̅̅


1, 𝑛 pentru care 𝑑𝑖𝑖 = 1, atunci graful are circuite,

algoritmul lui Chen nu se poate aplica ⟹ STOP

Dacă 𝑑𝑖𝑖 = 0, (∀) 𝑖 ∈ ̅̅̅̅̅


1, 𝑛, atunci graful G nu are circuite ⟹ se trece la pasul 4.

Pas 4. Se calculează puterile de atingere ale tuturor nodurilor

𝑛(𝑛−1)
Pas 5. Dacă ∑𝑛𝑖=1 𝑝(𝑥𝑖 ) ≠ , atunci graful G nu are drum hamiltonian.
2

𝑛(𝑛−1)
Dacă ∑𝑛𝑖=1 𝑝(𝑥𝑖 ) = , atunci se trece la pasul 6.
2

Pas 6. Se ordonează nodurile grafului în ordinea descrescătoare a puterilor de atingere

⟹ drumul hamiltonian căutat.

6
Algoritmul lui Kaufmann (înmulţirii latine)

Pas 1. Se scrie matricea 𝒦 (1) = (𝑘𝑖𝑗 )𝑖,𝑗∈1,𝑛


̅̅̅̅̅
, similară matricei arcelor A,

(𝑥𝑖 , 𝑥𝑗 ), 𝑑𝑎𝑐ă (𝑥𝑖 , 𝑥𝑗 ) ∈ 𝑈


unde: 𝑘𝑖𝑗 = { , (∀) 𝑖, 𝑗 ∈ ̅̅̅̅̅
1, 𝑛.
∗ 𝑑𝑎𝑐ă (𝑥𝑖 , 𝑥𝑗 ) ∉ 𝑈

Pas 2. Din matricea 𝒦 (1) - matricea latină, prin suprimarea primei litere,

se obţine matricea 𝒦 (0) - matricea destinaţiilor posibile.

Pas 3. Se calculează: 𝒦 (𝑟+1) = 𝒦 (𝑟) & 𝒦 (0) , 𝑟 ∈ ̅̅̅̅̅̅̅̅̅̅


1, 𝑛 − 1.

Operaţia de concatenare (&) (înmulţire latină) respectă regulile din înmulţirea obişnuită a
matricelor, cu următoarele precizări:

➢ dacă una din componentele participante la calcul este *, atunci rezultatul este *;

➢ în caz contrar, rezultatul compunerii constă în scrierea în continuare a vârfurilor


componente ale simbolurilor participante.

𝒦 (𝑚) - conţine lista tuturor drumurilor formate din m arce în graful dat.

Observaţie. Drumurile hamiltoniene, dacă există, se vor afla în matricea 𝒦 (𝑛−1) ,


unde n = numărul vârfurilor grafului dat.

3.5. Drumuri de valoare optimă într-un graf

În marea majoritate a problemelor care pot fi modelate prin grafuri nu ne interesează numai
dacă există sau nu legături între componentele reprezentate prin nodurile grafului, ci şi
intensitatea acestora. Această intensitate are semnificaţia unei valori numerice (pozitive sau
negative) asociate arcului corespunzător legăturii a cărei intensitate o măsoară.

7
În aplicaţiile economice această valoare poate fi:
➢ lungimea drumului dintre două localităţi;
➢ costul parcurgerii rutei reprezentate prin arcul corespunzător;
➢ durata parcurgerii rutei respective;
➢ cantitatea transportată pe ruta respectivă etc.

Una din problemele care poate apărea în aceste situaţii este găsirea, pentru o anumită pereche
de noduri sau mai multe perechi, a drumului optim între acestea.

Pentru formalizarea problemei vom introduce noţiunea de:

valoare a unui drum ≝ suma valorilor arcelor care îl compun.

În aceste condiţii putem enunţa problema drumului optim:

Dat fiind un graf 𝐺 = (𝑋, 𝑈) şi o funcţie


𝑣: 𝑈 ⟶ ℝ
(𝑥𝑖 , 𝑥𝑗 ) ⟶ 𝑣(𝑥𝑖 , 𝑥𝑗 ), (∀) (𝑥𝑖 , 𝑥𝑗 ) ∈ 𝑈

care asociază fiecărui arc o valoare reală, să se găsească, pentru o pereche dată de noduri,
drumul (drumurile) de valoare optimă (minimă sau/şi maximă) între cele două noduri şi
valoarea acestuia (acestora).

Deoarece majoritatea problemelor economice se modelează prin grafuri cu număr finit de


noduri, ne vom limita în continuare doar la acestea.

Din cauza varietăţii nelimitate a grafurilor posibile, nu există un algoritm care să rezolve
orice problemă, în timp util, dar s-au elaborat o mulţime de algoritmi, fiecare fiind cel mai
eficace în anumite cazuri.

8
Algoritmul lui Bellman – Kalaba

Algoritmul se aplică în grafuri finite care nu au circuite de valoare negativă (pentru o


problemă de minim) sau care nu au circuite de valoare pozitivă (într-o problemă de maxim) şi
găseşte drumurile de valoare minimă (maximă) de la toate nodurile grafului la un nod
oarecare, fixat.

Dacă dorim să cunoaştem drumurile de valoare minimă (maximă) între oricare două noduri,
vom aplica algoritmul, pe rând, pentru fiecare nod al grafului.

Fie 𝐺 = (𝑋, 𝑈) un graf orientat, finit, 𝑋 = {𝑥1 , 𝑥2 , … , 𝑥𝑛 }.

Presupunem, fără a restrânge generalitatea, că am numerotat nodurile astfel încât nodul spre
care căutăm drumurile de valoare minimă (maximă) de la celelalte noduri să fie 𝑥𝑛 .

Pasul 1. Se construieşte matricea pătratică 𝑀 = (𝑚𝑖𝑗 )𝑖,𝑗∈1,𝑛


̅̅̅̅̅
, cu dimensiunea egală cu

numărul de noduri ale grafului, ale cărei elemente sunt:

𝑣(𝑥𝑖 , 𝑥𝑗 ) , 𝑑𝑎𝑐ă (∃) 𝑎𝑟𝑐𝑢𝑙 (𝑥𝑖 , 𝑥𝑗 ) ş𝑖 𝑖 ≠ 𝑗


0, 𝑑𝑎𝑐ă 𝑖 = 𝑗
𝑚𝑖𝑗 =
+∞ , î𝑛𝑡𝑟 − 𝑜 𝑝𝑟𝑜𝑏𝑙𝑒𝑚ă 𝑑𝑒 𝑀𝐼𝑁. , 𝑑𝑎𝑐ă ∄ 𝑎𝑟𝑐𝑢𝑙 (𝑥𝑖 , 𝑥𝑗 )
{ −∞ , î𝑛𝑡𝑟 − 𝑜 𝑝𝑟𝑜𝑏𝑙𝑒𝑚ă 𝑑𝑒 𝑀𝐴𝑋. , 𝑑𝑎𝑐ă ∄ 𝑎𝑟𝑐𝑢𝑙 (𝑥𝑖 , 𝑥𝑗 )

unde 𝑣(𝑥𝑖 , 𝑥𝑗 ) este valoarea arcului (𝑥𝑖 , 𝑥𝑗 ), (∀) (𝑥𝑖 , 𝑥𝑗 ) ∈ 𝑈.

Pasul 2. Se adaugă succesiv liniile 𝐿𝑖 la matricea M, elementele acestora calculându-se prin


relaţiile de recurenţă:
𝐿1𝑗 = 𝑚𝑗𝑛 , 𝑗 ∈ ̅̅̅̅̅
1, 𝑛

𝑚𝑖𝑛 (𝐿𝑖−1,𝑗 , min (𝑚𝑗𝑘 + 𝐿𝑖−1,𝑘 )) 𝑝𝑒𝑛𝑡𝑟𝑢 𝑀𝐼𝑁.


̅̅̅̅̅
𝑘∈1,𝑛
𝐿𝑖𝑗 = { , 𝑗 ∈ ̅̅̅̅̅
1, 𝑛.
𝑚𝑎𝑥 (𝐿𝑖−1,𝑗 , max (𝑚𝑗𝑘 + 𝐿𝑖−1,𝑘 )) 𝑝𝑒𝑛𝑡𝑟𝑢 𝑀𝐴𝑋.
̅̅̅̅̅
𝑘∈1,𝑛

9
Pasul 3. După calcularea fiecărei linii noi, se compară elementele ei cu cele ale precedentei:

➢ dacă 𝐿𝑖𝑗 = 𝐿𝑖−1,𝑗 , (∀) 𝑗 ∈ ̅̅̅̅̅


1, 𝑛 , atunci se opreşte recurenţa şi ultima linie calculată
conţine valorile optime ale drumurilor de la celelalte noduri la nodul 𝑥𝑛 .

➢ dacă 𝐿𝑖𝑗 ≠ 𝐿𝑖−1,𝑗 , pentru cel puţin un indice j, se trece la calcularea noii linii 𝐿𝑖+1 .

Pasul 4. Pentru găsirea drumului care dă valoarea minimă de la un nod 𝑥𝑗 la nodul 𝑥𝑛 ,


se găsesc, începând înapoi de la ultima linie, pe care s-au obţinut valorile finale, nodurile
𝑥𝑘1 , 𝑥𝑘2 , … , 𝑥𝑘𝑟 care formează drumul căutat, unde: 𝑥𝑘1 = 𝑥𝑗 , 𝑥𝑘𝑟 = 𝑥𝑛 , iar fiecare alt indice
𝑘𝑖+1 este cel pentru care s-a obţinut minimul (maximul) de pe poziţia 𝑘𝑖 al liniei 𝐿𝑖 .

Observaţie. Pentru grafuri foarte mari, algoritmul necesită un volum mare de memorie, prin
necesitatea memorării matricei M, care este greu de manipulat. Chiar dacă, din cele 𝑛2 arce
posibile, graful ar avea doar un procent foarte mic, matricea grafului va avea tot 𝑛2 poziţii de
memorat şi analizat.

BIBLIOGRAFIE

1. Anderson D., Sweeney J. D., Williams A. T., An Introduction to Management


Science, Quantitative Approaches to Decision Making, West Publishing Co., 1985;

2. Ciobanu, Gh., Țigănescu, E., Cercetări operaționale cu aplicații în economie:


optimizări liniare, Editura ASE, București, 2002, ISBN 973-594-079-5;

3. Kaufmann, A., Metode şi modele ale cercetării operaţionale, Vol. II, Editura Tehnică,
Bucureşti, 1967;

4. Nica, V., Ciobanu, Gh., Mustață, F., Mărăcine, V., Cercetări operaționale, Editura
MATRIX ROM, București, 1998, ISBN 973-9254-92-6;

5. Popescu, O. (coord.), Matematici aplicate în economie, Editura Didactică și


Pedagogică, R.A., București, 1997, ISBN 973-30-5445-3;

6. Purcaru, I., Matematici generale și elemente de optimizare. Teorie și aplicații, Editura


Economică, București, 1997, ISBN 973-590-002-5.

10

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