Sunteți pe pagina 1din 82

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

3.1. Noiuni de Teoria Grafurilor


3.1.1. Introducere n teoria grafurilor Vechiul ora german Knigsberg (dup cel de al doilea rzboi mondial a devenit enclav ruseasc, primind numele Kaliningrad) este traversat de rul Pregel, nainte de vrsarea lui n Marea Baltic. De acest ora, este legat celebra problem matematic, cunoscut sub denumirea Cele 7 poduri din Knigsberg.
C

a) Imaginea satelit a celor 7 poduri

b) Graful asociat

FIG. 3.1. CELE 7 PODURI DIN KNIGSBERG

Oraul Knigsberg, este situat pe ambele maluri ale rului Pregel, i include 2 insule, toate fiind legate ntre ele prin apte poduri. Problema a fost de a gsi un drum, n care fiecare pod s fie trecut o singur dat. Euler a reuit s demonstreze c acest lucru nu este posibil. Indiferent de locul n care se gsete o persoan, singurul lucru relevant este ordinea de traversare a podurilor. Aceast abordare, i-a permis lui Euler s reformuleze problema n termeni abstraci, eliminnd toate informaiile cu excepia, celor legate de zonele cu pmnt (cele dou insule A i D, malurile C i B) i a podurilor care le leag. n termeni abstraci, a nlocuit fiecare zon terestr cu un abstract vrf sau nod, i fiecare pod cu o conexiune abstract, o muchie, care permite memorarea informaiilor legate de care nod (zon terestr) este legat de o alt zon terestr cu un pod. n urma acestui mod de abordare a rezultat o structur matematic numit graf. Deosebit de important este faptul c singurul lucru important l reprezint conexiunile (muchiile), forma n care este desenat graful poate fi deformat, distorsionat n orice fel, fr a-i schimba sensul. Numai existena (sau lipsa) muchiilor ntre o pereche de noduri este semnificativ. 1735, cnd Euler a demonstrat c nu exist o soluie pentru problema celor 7 Poduri din Knigsberg, folosind reprezentrile mai sus descrise, reprezint anul cnd s-au pus fundamentele Teoriei Grafurilor. Teoria grafurilor are astzi o vast utilizate n variate domenii, cum ar fi chimia, biologia, geografia, matematica propriu-zis, fizica, la construirea de circuite electrice i electronice, la rezolvarea unor probleme de transport i altele. Aproape toate domeniile vieii cotidiene exist sau sunt create pe principiul entitilor care interacioneaz (relaioneaz) unele cu altele. Toate acestea, la nivel abstract, se modeleaz cu uurin n grafuri, entitile fiind reprezentate prin noduri sau vrfuri, iar interaciunile, relaiile ntre acestea prin muchii sau arce. n figurile care urmeaz sunt cteva exemple de modelare prin grafuri, a diverse entiti de lucru din diferite domenii: fizic (Fig. 3.2), chimie (Fig. 3.3) i transporturi (Fig. 3.4).

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR


R1

R2 E1, r R3

a) Circuit electric cu 3 rezistori i 2 surse (Kirkhoff noduri de reea)

E2, r

b) Graful asociat circuitului electric

FIG. 3.2. FIZIC. CIRCUIT DE CURENT CONTINUU

H H H C 7

C H H H

a) CH3 CH3 (etan)

b) Graful asociat etanului

FIG. 3.3. CHIMIE ORGANIC. ETANUL

4 6 2 3 5 7 1 10 9 8

a) Harta judeului cu reeaua feroviar

b) Graful asociat reelei feroviare

FIG. 3.4. TRANSPORTUL FEROVIAR N JUDEUL SIBIU

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

n modelarea diferitelor fenomene, trebuie avut n vedere, modul n care interrelaioneaz entitile, putnd astfel identifica 5 situaii, prezentate n figura 3.5.
A B A B A B A B A

a)

b)

c)

d)

e)

FIG. 3.5. MODALITI DE CONECTARE A NODURILOR NTR-UN GRAF

Se disting astfel dou situaii: nodurile nu trebuie s respecte o relaie de ordine, cazurile a) i d), situaii n care avem de a face cu un graf neorientat. nodurile se gsesc ntr-o relaie de ordine bine stabilit (preceden sau succesor), cazurile b) i c), situaii n care avem de a face cu un graf orientat.

O situaie aparent diferit este aceea n care nodul relaioneaz cu el nsui, e), atunci cnd avem de a face cu o bucl. Din punct de vedere al interpretrii logice a fenomenelor descrise, situaiile a) i b) sunt echivalente, iar cazul d), multigraful, care permite conectivitatea multipl ntre dou entiti, mpreun cu e), bucle, definesc la modul cel mai general fenomenele de orice fel, definind la modul abstract un pseudograf. 3.1.2. Grafuri neorientate Definiia 3.1. Un graf neorientat este o pereche ordonat de mulimi, notat G=(X, U), unde X= x x X , este mulimea nodurilor (vrfurilor) iar U= x, y x, y X }, numit mulimea muchiilor. Observaii: X este o mulime finit i nevid de elemente numite noduri; U este o mulime de perechi neordonate de elemente din X numite muchii. n, unde = , cu semnificaia de numrul de noduri al grafului G; m, unde = , cu semnificaia de numrul de muchii al grafului.

n toate explicaiile i exemplele urmtoare se vor folosi notaiile:

Pentru exemplificare, se vor folosi grafurile din figura 3.6., unde se vor regsi dou modaliti de reprezentare. n cele dou forme se observ c etichetarea nodurilor rmne la latitudinea celui care modeleaz fenomenul, varianta cea mai folosit fiind cea din figura 3.6.a, unde fiecrui nod i s-a asociat o valoare numeric natural.
6

1 2

u4
4 b 3

u3 u2 u1
a d

a)
FIG. 3.6. EXEMPLE DE GRAFURI NEORIENTATE

b)

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Exemplu: - pentru graful din Fig. 3.6. a) avem: mulimea nodurilor = 1, 2, 3, 4, 5, 6 , unde, = = 6; mulimea muchiilor = 1, 3 , 1, 4 , 1, 6 , 2, 6 , 3, 4 , 4, 5 , 5, 6 , iar = = 7. Se poate spune c graful din Fig. 3.6. a) are 6 noduri i 7 muchii. pentru graful din Fig. 3.6. b) avem: - mulimea nodurilor = , , , , , , de unde = = 6; - mulimea muchiilor = 1 , 2, 3, 4 , unde 1 = , , 2 = , , 3 = , , 4 = , , sau = , , , , , , , , de unde, = = 4 n acest caz graful este cunoscut prin 6 noduri i 4 muchii. Pentru orice muchie = , , unde , vom spune c: nodurile (vrfurile) xi i yi sunt adiacente i se numesc extremitile muchiei ui; muchia ui i vrful xi sunt incidente n graf. La fel, muchia ui i vrful yi; muchia , este totuna cu , (nu exist o orientare a muchiei). Definiia 3.2. Gradul unui nod xi, notat , reprezint: - numrul muchiilor incidente cu nodul xi, sau - numrul nodurilor adiacente cu nodul xi. Exemplu: n graful din Fig. 3.6. b), = 2, dou muchii, u1 i u2 sunt incidente cu nodul a, sau nodul a este adiacent (conectat) cu alte dou noduri, d i e. Gradele nodurilor sunt: = 2, = 1, = 0, = 2, = 2, = 1. Din punctul de vedere al gradului unui nod (al numrului de muchii incidente sau al numrului de noduri adiacente) se pot distinge 3 situaii deosebite: 1. = , nodul se leag de toate celelalte noduri ale grafului. 2. = , nodul se numete terminal, are o singur adiacen, se leag de un singur nod, are o singur muchie incident (Ex.: nodul 2 din Fig. 3.6. a) 3. = , nodul se numete izolat, nu are trebuie nod adiacent, nu are nicio muchie incident (Ex.: nodul c, din Fig. 3.6. b) Teorema 3.1. ntr-un graf G=(X, U) cu n noduri i m muchii, suma gradelor tuturor nodurilor este egal cu dublul numrului muchiilor.

= + + + = ,
=

Demonstraia este evident. Fiecare muchie de forma (xi, xj) (unde xi i xj sunt noduri, cu i, j X), contribuie cu o unitate la gradul nodului i i cu o unitate la gradul nodului j. Aadar, fiecare muchie adaug dou uniti la suma gradelor. Fiind m muchii, rezult foarte clar c suma gradelor este 2*m. Observaie: n orice graf numrul nodurilor de grad impar este par.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Demonstraia decurge din faptul c suma gradelor nodurilor este un numr par. Pentru ca o sum de numere s fie par, este evident c numrul termenilor impari trebuie s fie par. Definiia 3.3. Se numete lan, succesiunea de noduri cu proprietatea c oricare dou noduri consecutive din lan sunt adiacente Tipuri de lanuri: lan compus lanul n care parcurgerea unei muchii se poate face de mai multe ori. lan simplu - lanul n care fiecare muchie se parcurge o singur dat. Nodurile pot fi parcurse de mai multe ori. lan elementar lanul n care nodurile sunt distincte. Descrierea unui lan se poate face folosind: o succesiune de noduri care sunt adiacente dou cte dou = 1 , 2 , 3 , , , , , +1 , < o succesiune de muchii, unde extremitatea final a uneia, reprezint extremitatea iniial a celeilalte = 1 , 2 , 2 , 3 , 3 , 4 , , 1 , , , +1 , <
6
5

5
1

6
4

2 3

5
6

1 2 3

4 2

a) Graf neorientat
6 5

b) lan compus, L1={2, 6, 5, 1, 6, 5, 4}


6 5

1 2 3

4 2

c) lan simplu, L2={2, 6, 1, 4, 5, 1, 3}

d) lan elementar, L3={2, 6, 1, 4, 3}

FIG. 3.7. TIPURI ELEMENTARE DE LANURI NTR-UN GRAF NEORIENTAT

Definiia 3.4. Se numete ciclu, lanul la care primul nod coincide cu ultimul nod. Ciclurile se clasific n: ciclu compus ciclul n care parcurgerea unei muchii se poate face de mai multe ori. ciclu simplu - ciclul n care fiecare muchie se parcurge o singur dat. Nodurile pot fi parcurse de mai multe ori. ciclu elementar lanul n care nodurile sunt distincte, cu excepia primului i ultimului. Definiia 3.5. Se numete lungimea unui lan/ciclu, numrul de muchii din care acesta este format.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

n situaii diferite, nu este util folosirea tuturor relaiilor (muchiilor) n discutarea i analizarea problemei, introducndu-se o nou noiune, aceea de graf parial. Definiia 3.6. Fie graful G=(X, U). Graful G'=(X, U'), cu proprietatea c U' U, se numete graful parial al lui G. Altfel spus, graful G este chiar graful G, sau se poate obine prin eliminarea unora dintre muchiile lui G i pstrnd toate nodurile acestuia.
6 5 6 5

1 2 3

4 2

a) G=(X, U), graf neorientat

b) G'=(X, U'), graf parial al lui G

FIG. 3.8. GRAF PARIAL

Se observ n figura 3.8.b c graful parial G, a pstrat doar 4 din cele 8 muchii ale grafului iniial, rmnnd doar cu o parte dintre acestea. Similar cu cazul anterior, al grafului parial, n diferite situaii, nu toate entitile (nodurile) cunoscute sunt semnificative pentru modelarea fenomenului, putndu-se renuna la unele dintre ele. Definiia 3.7. Fie graful G=(X, U). Graful G"=(X", U"), cu proprietatea c X" X, unde U" conine toate muchiile din U care au ambele extremiti n X", se numete subgraf al grafului G. Cu alte cuvinte un subgraf G" al grafului G, se poate obine prin eliminarea unor noduri i a tuturor muchiilor incidente la acestea.
6 5 6 5

1 7 2 8

1 7 2 8

a) G=(X, U), graf neorientat

b) G"=(X", U"), subgraf al grafului G

FIG. 3.9. SUBGRAF

n figura de mai sus se observ c graful G"=(X", U"), conine doar nodurile 2, 3, 4, 5 i 6, i toate muchiile care le leag pe acestea. Se spune c graful G" este indus sau generat de mulimea nodurilor X" = {2, 3, 4, 5, 6}. Fenomenele studiate cu teoria grafurilor se modeleaz n general, prin entitile i relaiile dintre acestea. Exist ns situaii, n care trebuie analizate exact situaiile opuse, cnd elementele nu relaioneaz. Pentru aceasta se poate modela un alt graf, graful complementar. Definiia 3.8. Se numete graf complementar al grafului G=(X, U), graful G =(X, U'), cu proprietatea c xi , xj X, i j, xi , xj U dac i numai dac xi , xj U.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

4 1 3 1 3

a) G=(X, U), graf neorientat

b) G'=(X, U'), graf complementar

FIG. 3.10. GRAF COMPLEMENTAR

Un lucru, deosebit de important n analiza grafurilor, este secvenialitatea i derivabilitatea evenimentelor, lucru care se identific prin posibilitatea de a trece de la un eveniment oarecare (nod) la un altul, folosind relaiile (muchiile) dintre acestea. Definiia 3.9. Se spune c un graf este conex, dac ntre oricare dou vrfuri ale sale, exist cel puin un lan care s le lege. n caz contrar graful este neconex. n foarte multe din problemele care vor fi abordate, conexitatea este fie o ipotez de lucru, fie un rezultat al problemei. n situaia n care graful nu este conex se vorbete despre componentele conexe ale grafului. Definiia 3.10. Se numete component conex a grafului G=(X, U), un subgraf G'=(X', U') al grafului G, conex, maximal din punct de vedere al proprietii de conexitate. O component conex a unui graf G, nu trebuie s conin nici un lan care s fac legtura dintre un nod oarecare X i un orice alt nod X X.
6 5 6 5

1 7 2 8

1 7 2 8

a) G=(X, U), graf conex

b) G=(X, U), graf neconex

FIG. 3.11. GRAFURI CONEXE I NECONEXE

n figura 3.10. b, se poate observa c graful are 3 componente conexe: G1 =(X1 , U1 ), cu 1 = 1, 3, 4, 5 i U1 = 1, 3 , 1, 4 , 1, 5 , 3, 4 , 4, 5 G2 =(X2 , U2 ), cu 2 = 2, 6, 7 i U2 = 2, 6 , 2, 7 , 6, 7 G3 =(X3 , U3 ), cu 3 = 8 i U3 =

TIPURI SPECIALE DE GRAFURI


Definiia 3.11. Se numete graf complet cu n noduri, notat , un graf G=(X, U) cu proprietatea c x, y X, muchia x, y U. Un graf complet are toate nodurile adiacente, dou cte dou. n figura 3.12 sunt prezentate cteva exemple de grafuri complete.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR 2 1 6 1 2 2

5 3

5 4 4 3 4

a. K 4

b. K 5
FIG. 3.12. GRAF COMPLET

c. K 6

Observaii: Graful complet cu n vrfuri, , are

muchii. Fiecare nod al grafului este adiacent cu toate celelalte n-1 noduri ale grafului. Gradul fiecrui nod este n-1.

Definiia 3.12. Se numete graf regulat graful G=(X, U) cu proprietatea c pentru xi , xj , i j, d xi = d xj , sau graful care are toate gradele nodurilor egale . Observaie: Toate grafurile complete sunt regulate.
2 5 1 3 6 4 3 1 6 1

4 2 5

3 4

a.

b.
FIG. 3.13. GRAF REGULAT

c.

Observaie: Toate grafurile regulate cu numr impar de noduri, au gradele nodurilor un numr par. Definiia 3.13. Se numete graf bipartit, graful G=(X, U), dac X1 , X2 , cu X1 X2 = i proprietatea c xi X1 , xj X2 , respectiv xj X2 , xi X1 , atunci xi , xj U. Cu alte cuvinte, un graf este bipartit, dac se pot identifica dou submulimi disjuncte de noduri X1 i X2 ale lui X, unde fiecare nod din una din submulimi, se leag printr-o muchie de cel puin un element din cealalt submulime. Observaie: Graful este bipartit complet dac fiecare element dintr-o submulime, este legat de fiecare element din cealalt submulime, prin exact o muchie. Problematica grafurilor bipartite este divers. n foarte multe situaii reale, fie c este vorba de comunicare, fie c se discut despre procese tehnologice, identificarea celor dou partiii, a celor dou submulimi, n care elementele fiecreia nu relaioneaz ntre ele n interiorul submulimii, dar care au cel puin o legtur cu elemente din cealalt submulime, reprezint o problem de rezolvat. Drumurile astfel obinute garanteaz o alternan a elementelor celor dou submulimi. n figura 3.14. se prezint dou variante de graf bipartit. n cea prezentat n figura 3.14.b, fiecare element al partiiei X={1,2,3,4}, relaioneaz cu fiecare element al partiiei X={5,6,7}.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

a) G=(X, U), graf bipartit

b) G=(X, U), graf bipartit complet

FIG. 3.14. GRAF BIPARTIT

Observaie: Dac ntr-un graf bipartit complet X1 = p, iar X2 = q, numrul total de muchii al grafului este . n abordrile diverselor probleme, un loc important l ocup drumurile care urmresc fie ca toate evenimentele (muchiile) s aib loc o dat, sau ca toate obiectivele (nodurile) s fie atinse o dat, ntr-o succesiune unic. Acest lucru este posibil, dac avem n vedere dou tipuri speciale de grafuri, eulerian, respectiv hamiltonian. Definiia 3.14.1. Se numete ciclu eulerian n graful G=(X, U), dac exist un ciclu C, care trece prin toate muchiile grafului o singur dat. Definiia 3.14.2. Se numete graf eulerian, graful G=(X, U) care conine cel puin un ciclu eulerian C. Definiia 3.15.1. Se numete ciclu hamiltonian n graful G=(X, U), dac exist un ciclu C, care trece prin toate nodurile grafului o singur dat (cu excepia primului i a ultimului nod). Definiia 3.15.2. Se numete graf hamiltonian, graful G=(X, U) conine cel puin un ciclu hamiltonian C.
6 1 5 6 5

2 7

1 7 2 8

a) graf eulerian

b) graf hamiltonian, ciclu hamiltonian

FIG. 3.15. GRAF EULERIAN I HAMILTONIAN

n figura 3.15.a., reprezentnd un graf eulerian, se observ existena circuitului eulerian C = 1, 5, 4, 3, 2, 6, 7, 2, 1 , care trece prin toate muchiile grafului. Soluia nu este unic, depinznd n acest caz de nodul de pornire, de sensul de parcurgere i de ordinea de selectare a muchiilor n cadrul ciclului. n figura 3.15.b, circuitul care permite vizitarea tuturor nodurilor grafului, ar putea fi C = 1, 4, 3, 8, 7, 2, 6, 5, 1 , ceea ce nseamn c graful este Hamiltonian. Soluia nu este unic nici n cazul grafului hamiltonian. Se observ c i n acest caz se pot identifica mai multe asemenea cicluri, depinznd de aceiai factori ca i n cazul ciclului eulerian. Teorema 3.2. Un graf G=(X, U) este graf eulerian, dac i numai dac este conex i gradele tuturor nodurilor sunt numere pare.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Teorema 3.3. Un graf G=(X, U), cu n 3, unde n= X , este graf hamiltonian, dac i numai dac este conex i , xi X, gradul fiecrui nod este cel puin . Cunoaterea celor dou teoreme, este deosebit de important n abordarea problemelor de acest tip. Dac teorema 3.2. conine condiiile necesare i suficiente care garanteaz obinerea unui ciclu eulerian, teorema 3.3 conine condiii mai mult dect suficiente pentru obinerea unui ciclu hamiltonian, putndu-se obine ciclu hamiltonian i n cazul unor valori mai mici ale gradelor nodurilor. ntr-o analiz complex a situaiilor din lumea real, modelat ntr-un graf neorientat cu n noduri i m muchii, de multe ori este necesar analiza tuturor cazurilor care pot aprea, datorit prezenei sau absenei uneia, sau a unora dintre cele m muchii. n termeni de grafuri, trebuie analizate toate grafurile pariale care se pot forma. Teorema 3.4. Numrul grafurilor pariale neorientate care se pot forma dintr-un graf G=(X, U), cu n noduri (n= X ) i m muchii (m= U ), este . n demonstraie, trebuie avut n vedere c diferena ntre dou grafuri pariale, este dat de muchiile care sunt luate n considerare la un moment dat, de combinaia aleas. innd cont c din cele m muchii pot fi selectate pe rnd 0, 1, 2, , m muchii, n toate combinaiile posibile, avem de-a face cu o problem de calcul a sumei combinrilor:
0 1 2 m1 m Cm + Cm + Cm + Cm + Cm = 2m

Observaie: Numrul grafurilor pariale distincte care se pot forma dintr-un graf complet G=(X, U), este . O categorie aparte de grafuri neorientate, o reprezint grafurile de tip arbore. Definiia 3.16. Se numete arbore, graful conex G=(X, U), care are una din urmtoarele proprieti: - are numr minim posibil de muchii; - are exact n-1 muchii; - nu are circuite; - oricare dou noduri sunt legate printr-un singur drum; - devine neconex dac eliminm orice muchie; - dac adugm orice muchie apare cel puin un circuit. Observaii: Arborele este graful conex aciclic cu numr maxim de muchii. Arborele este graful conex cu numr minim de muchii. Dac avem de a face cu un graf neconex i aciclic, se poate spune c acesta este format dintr-o pdure de arbori. Arborii, dup cum se observ, sunt o categorie aparte de grafuri, care au cea mai mare aplicabilitate n rezolvarea de probleme. Cea mai mare parte a algoritmilor, au drept scop obinerea unui arbore de acoperire al grafului, prin alegerea unor anumite muchii dup anumite reguli din graful iniial i evitarea redundanelor, a repetrilor inutile. Deoarece, nu de puine ori nodurile grafului se deosebesc ntre ele prin importan, preceden, rang etc., modelarea acestora sub form de arbore este cea mai favorabil. Rmne la dispoziia programatorului, s decid tipul de arbore i forma de reprezentare a datelor care modeleaz cel mai bine fenomenul. n figura 3.16., avem dou reprezentri de grafuri neorientate conexe, care ndeplinesc ipotezele de la definiia 3.16. n cazul arborilor de mai sus, n exemplul din figura 3.16.b, avem o organizare a arborelui pe nivele. Dezvoltarea arborelui pornete de la nodul 1, numit rdcin, aflat pe nivelul 0. La extremitile drumurilor care pornesc de la nodul rdcin se gsesc noduri frunz. n aceast abordare a grafurilor, avem de a face cu un nod special, rdcina, de la care pornete dezvoltarea grafului.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR 6


nivelul 0

5 2

1 3 4

2 7

4 5

a. arbore
FIG. 3.16. ARBORI

b. arbore cu rdcin

n cazul arborilor cu rdcin, avem de a face cu o dezvoltare ierarhic a grafului, ntre oricare dou noduri care definesc muchii ale grafului existnd relaii de subordonare de tipul succesor (urmtor, descendent, fiu) sau predecesor (anterior, ascendent, tat). Cea mai des ntlnit abordare n teoria grafurilor care se refer la arborii cu rdcin, este aceea a memorrii predecesorilor nodurilor, bazndu-se pe proprietatea constructiv i de dezvoltare a unui arbore, care precizeaz c fiecare nod are exact un predecesor cu excepia nodului rdcin. Observaii: Nodurile cu grad 1 (dar care nu sunt rdcin pentru arbore) sunt frunze. Numrul descendenilor este cu unu mai mic dect gradul nodului, cu excepia rdcinii pentru care este chiar gradul acestuia. nlimea unui arbore este dat de cel mai lung care are o extremitate n nodul rdcin. 3.1.3. Grafuri orientate Conceptul abstract de orientat, deriv din faptul c la evoluia evenimentelor n general, se cunoate sensul evoluiei acestora, de la evenimentul curent (starea actual), ctre un alt eveniment (starea viitoare, urmtoare). Evenimentele astfel descrise, se raporteaz unul fa de cellalt, acolo unde exist dependen ntre ele, printr-o relaie de succesivitate (care este evenimentul urmtor?) sau printr-o relaie de preceden (care a fost evenimentul de la care s-a ajuns aici?). Toate acestea se pot modela la modul abstract prin grafurile orientate. Definiia 3.17. Un graf orientat (digraf= directed graph) este o pereche ordonat de mulimi, notat G=(X, U), unde X= x x X , este mulimea vrfurilor, iar U= x, y x, y X }este o mulime ordonat numit mulimea arcelor. Observaie: Fie un arc u = (x,y) U. Spunem c arcul u are sensul (sau orientarea) de la x la y. Vrful x este extremitate iniial i predecesorul lui y, i vrful y este extremitate final i succesorul lui x. n concluzie, n descrierea unui arc, ordinea n care sunt enumerate vrfurile este foarte important, prin aceasta se precizeaz sensul arcului.. n toate explicaiile i exemplele urmtoare se vor folosi notaiile: - n, unde = , cu semnificaia de numrul de vrfuri al grafului G; - m, unde = , cu semnificaia de numrul de arce al grafului. n abordrile grafurilor orientate, se substituie noiunea de nod, de la grafuri neorientate, cu cea de vrf, respectiv noiunea de muchie cu cea de arc. Pentru exemplificare, se vor folosi grafurile din figura 3.17, unde se ntlnesc cele dou forme de identificare a vrfurilor i a arcelor. n varianta din figura 3.17.a, se folosete doar etichetarea vrfurilor, arcele fiind identificate prin lista de adiacen, iar n varianta din figura 3.17.b, se observ pe lng identificarea vrfurilor, de aceast dat literal, i identificarea arcelor.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

u4 u4
c

u3 u2 u1
d a

1 2

u5

b 3

a.
FIG. 3.17. EXEMPLE DE GRAFURI ORIENTATE

b.

Observaie: Deoarece marea majoritate a definiiilor i conceptelor sunt similare, nlocuind noiunea de nod cu cea de vrf, respective noiunea de muchie cu cea de arc, n continuare se vor evidenia doar particularitile, diferenele fa de cele prezentate la grafuri neorientate. Definiia 3.18. Gradul unui vrf xi, notat , reprezint suma dintre d+ xi i d xi , unde: - + reprezint gradul exterior al vrfului xi, - reprezint gradul interior al vrfului xi. = + + + n figura 3.17.a se observ c: - + 1 = 4, iar 1 = 2. Arcele (1,3), (1,4), (1,5) i (1,6) sunt arce care i au originea n vrful 1, determinnd gradul exterior al vrfului (numrul arcelor care pornesc din 1). Arcele (5,1) i (6,1) sunt arce care au extremitatea final n 1, determinnd gradul interior al vrfului (numrul arcelor care ajung la 1). n acelai mod pot fi evaluate gradele interioare i exterioare ale tuturor vrfurilor. n figura 3.17.b vrful c definete singur, att extremitatea iniial ct i cea final a arcului u4, descriind o bucl. Teorema 3.5. ntr-un graf orientat G=(X, U) cu n vrfuri i m arce, suma gradelor exterioare este egal cu suma gradelor interioare i este egal cu numrul arcelor.

=
= =

= ,

Demonstraia este evident, fiecare arc contribuind cu cte un grad interior i un grad exterior. Definiia 3.19. Se numete drum ntr-un graf orientat, succesiunea de vrfuri cu proprietatea c oricare dou vrfuri consecutive din drum sunt adiacente, arcele pstrnd aceeai orientare. Noiunile de drum compus, simplu sau elementar sunt similare cu cele de la grafuri neorientate, nlocuind noiunea de muchie cu cea de arc i pstrnd orientarea arcelor (definiia 3.19). Definiia 3.20. Se numete circuit, drumul la care primul vrf coincide cu ultimul vrf. Noiunile de drum i de circuit, sunt folosite n definirea i explicarea tuturor algoritmilor care presupun explorarea sau identificarea proprietior de optim pentru grafuri orientate. Optim ntr-un graf orientat poate s fie drumul sau circuitul identificat prin lungimea sau costul acestora. n figura 3.18., sunt exemplificate noiunile de drum simplu (fiecare arc e parcurs o singur dat), drum elementar (fiecare vrf e vizitat o singur dat), respectiv de circuit simplu i de circuit elementar.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

1 2 3

4 2

a) drum simplu, D={5,1,3,1,4,5,6}


6 5

b) drum elementar, D={3,1,4,5,6}


6 5

1 2 3

4 2

c) circuit simplu, C={2,3,4,1,3,1,5,6,2}

d) circuit elementar, C={1,3,4,5,6,1}

FIG. 3.18. DRUMURI I CIRCUITE NTR-UN GRAF ORIENTAT

Definiia 3.21. Se spune c un graf orientat este tare conex dac este conex i ntre oricare dou vrfuri ale sale x, y U, exist cel puin un drum de la x la y i cel puin un drum de la y la x.
6 5 6 5

1 2 3

4 2

a) graf conex dar care nu este tare conex

b) graf tare conex

FIG. 3.19 CONEXITATE LA GRAFURI ORIENTATE

n figura 3.19.a. este prezentat un graf conex, deoarece fiecare vrf este conectat cu orice alt vrf prin intermediul unui lan (se ignor sensul arcelor). Graful din aceast figur nu este tare conex, deoarece exist dou vrfuri, 2 i 5 de la care nu se poate porni mai departe, avnd gradul exterior zero. Graful din figura 3.19.b. este tare conex, ntre oricare dou vrfuri existnd cel puin un drum de legtur. Observaie: Pentru ca un graf orientat s fie tare conex, este necesar i suficient ca graful s fie conex i d+ xi 0 i d xi 0, X (s nu existe noduri cu gradul exterior sau interior egal cu zero). 3.1.4. Grafuri ponderate Dei n numeroase situaii este util i necesar o abordare cantitativ a legturilor dintre entiti (de tipul cte legturi, numr minim/maxim de legturi, toate legturile etc.), numeroase sunt situaiile n care este util cunoaterea calitativ a legturii. n general,

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

muchia/arcul dintr-un graf reprezint o calitate a conexiunii (distana, valoarea costului, intensitatea, eficiena etc.), lucruri importante n modelarea, analizarea i optimizarea fenomenelor (Fig. 3.20).
6 Oradea
169 574 441

4 Iai
406 126

4,3 mA
Centru

7 13 1 10

Gar

Parc

3 Sibiu
282

4 -6 18
Stadion

2
Timioara 538

5 Bacu
289

3,1 mA

1,2 mA

1 Bucureti

a.

distane n km ntre orae din Romnia

b.

intensitatea I, pe ramurile unui circuit de curent continuu

c.

ctigurile/pierderile realizate la transportul de persoane ntre staiile de parcurs (n mii RON)

FIG. 3.20. GRAFURI PONDERATE

Definiia 3.18. Se numete graf ponderat (weighted graph), o structur (X, U, W), unde: - G=(X, U) este un graf, - W este o funcie numit pondere, care asociaz fiecrei muchii (arc) un cost/ctig al parcurgerii ei. Observaie: ntr-un graf ponderat fiecrei muchii (fiecrui arc) i este asociat o valoare. Valoarea asociat muchiei/arcului poate avea valoare pozitiv sau negativ, ntreag, raional sau real, n funcie de natura i semnificaia fenomenului modelat. 3.1.5. Reprezentarea intern a grafurilor neorientate i orientate Cu toate c desenele sunt un mijloc convenabil de a descrie grafurile, este clar c nu sunt potrivite pentru codarea grafurilor n memoria intern, sau pentru aplicarea de metode matematice pentru a studia proprietile lor. Dac se dorete scrierea de programe pentru rezolvarea de probleme care implic grafuri, n primul rnd trebuie s se gseasc modalitile prin care se poate reprezenta structura matematic a unui graf i prin care se poate identifica ce tip de structur de date o aproximeaz cel mai bine. Exist mai multe metode, utilizate n mod curent la reprezentarea grafurilor. Acestea difer fundamental, prin alegerea tipului de date abstracte utilizat pentru a le reprezenta. Algoritmii utilizai n explorarea grafurilor, au mai multe variante, n funcie de punerea n aplicare a tipului de date abstracte ales pentru reprezentarea intern. Cu alte cuvinte, n orice abordare a unei probleme din aceast categorie, se va ncepe cu un sistem matematic (un graf), apoi se va studia modul n care acesta poate fi descris n termeni de tipuri abstracte de date (seturi de date, tablouri, liste, folosite independent sau mpreun), i, n final se va alege implementarea pentru tipul abstract de date ales. Alegerea unei anumite implementri poate s fie determinat de tipul grafului, dens sau nu, aceasta depinznd de ordinul de mrime al numrului muchiilor/arcelor comparativ cu numrul nodurilor/vrfurilor.. Primul pas n reprezentarea unui graf, este de a coda vrfurile, de regul cu numere naturale, cu valori cuprinse ntre 1 i n (n = X ). Principalul motiv pentru a face acest lucru, este acela de a permite acces rapid la informaiile corespunztoare fiecrui nod, utiliznd codificarea vectorial. Al doilea pas trebuie s fie decizia privind modalitatea de identificare a arcelor, care poate presupune etichetarea acestora, cu numere naturale de la 1 la m (m= U ) sau referirea implicit la acestea prin prisma vrfurilor care le definesc. Pentru codificarea legturilor existente, se pot folosi tablouri de date bidimensionale (matrice de adiacen i matrice de inciden) sau unidimensionale (list de adiacen, liste de adiacen).

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Matricea de adiacen Reprezentarea grafurilor cu ajutorul matricii de adiacen este cea mai la ndemn modalitate de codare a grafurilor. Dup cum sugereaz i numele, ea va cuprinde toate adiacenele (muchiile grafului). Pentru reprezentarea prin matrice de adiacen a unui graf G=(X, U), presupunem c vrfurile sunt codate prin numere naturale de la 1 la n (n = X ) ntr-un mod arbitrar. Reprezentarea prin matrice de adiacen a grafului G, este o matrice A, unde: = = Observaii: 1. Matricea de adiacen cu ajutorul creia se reprezint un graf neorientat este o matrice simetric, = , , = 1, . 2. Numrul valorilor egale cu 1 de pe linia sau coloana i a matricii reprezint gradul nodului i, d(i). 3. Dac pe o anumit linie sau pe o anumit coloan toate valorile sunt egale cu 0, nodul este izolat. 4. Dac pe o anumit linie sau coloan exist o singur valoare egal cu 1, nodul este terminal. 5. Dac n matrice toate valorile sunt egale cu 1, cu excepia diagonalei principale, graful este complet. 6. Suma valorilor egale cu 1 din matricea de adiacen este egal cu dublul numrului muchiilor. Observaii: Pentru a afla numrul de muchii dintr-un graf neorientat, este suficient s numrm valorile egale cu 1 situate deasupra sau sub diagonala principal a matricii de adiacen. Toate elementele diagonalei principale sunt egale cu 0. Prezena pe diagonal a valorii 1, poate reprezenta codarea unei bucle.
5 6 5

, ,

, , , ,

(, )

2 7

1 8

2 7

1 8

a) graf neorientat

b) graf orientat

FIG. 3.21. REPREZENTAREA INTERN A GRAFURILOR

Matricile de adiacen pentru grafurile din figura 3.21, sunt prezentate mai jos n figurile 3.22 pentru graful neorientat (3.21.a.), respectiv 3.23. pentru graful orientat (3.21.b.). n ambele reprezentri s-a urmrit identificare, recunoaterea i utilizarea informaiilor numerice care se regsesc n matrice i interpretarea sensului acestora.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

1 1 2 3 4 5 6 7 8 9 0 1 0 1 1 0 0 0 0

2 1 0 1 0 0 1 1 0 0

3 0 1 0 0 0 0 0 0 0

4 1 0 0 0 1 0 0 0 0

5 1 0 0 1 0 1 0 0 1

6 0 1 0 0 1 0 1 0 0

7 0 1 0 0 0 1 0 0 0

8 0 0 0 0 0 0 0 0 0

9 0 0 0 0 1 0 0 0 0

Gradele nodurilor 1 = 3 2 = 4 3 = 1 4 = 2 5 = 4 6 = 3 7 = 2 8 = 0 9 = 1

nod terminal

nod izolat nod terminal

=
=

Graful are 10 muchii FIG. 3.22. MATRICEA DE ADIACEN LA UN GRAF NEORIENTAT

n figura 3.22. se observ c matricea de adiacen este simetric fa de diagonala principal, informaii despre fiecare nod putndu-se afla cu uurin prin analizarea exclusiv a liniei sau coloanei pe care se afl acesta. n exemplul de mai sus se observ c nodul 8 este un nod izolat. Pe linia i pe coloana corespunztoare nodului 8 toate elementele sunt 0. Dou dintre nodurile grafului, nodul 3 i nodul 9, sunt noduri terminale, deoarece pe liniile 3 i 9 sau coloanele 3 i 9, conin o singur valoare de 1. n utilizarea reprezentrii interne cu ajutorul matricii de adiacen, programatorul poate avea urmtoarele avantaje: - foarte simpl verificare dac dou noduri i i j sunt sau nu conectate, prin simpla vizare a interseciei liniei i cu coloana j, aij.. - accesare simpl i uor de neles a informaiilor. Dei este foarte des utilizat n implementrile informatice, exist i o serie de rezerve i probleme ce pot aprea: - dimensiunea spaiului de memorie necesar pentru codarea grafului e mare, n n locaii de memorie; - spaiul de memorie rezervat conine informaii duble, deoarece att aij ct i aji reprezint codarea aceleiai muchii (i, j); din cele n n locaii de memorie rezervate, strict utile ar putea fi maxim 1 2 dintre ele, n situaia grafului complet. n alegerea matricii de adiacen ca form de reprezentare intern a grafurilor neorientate, rmne la latitudinea programatorului s decid, n funcie de viteza de acces la informaiile utile i spaiul de memorie avut la dispoziie, dac aceast modalitate de reprezentare, permite rezolvarea problemei abordate.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

1 1 2 3 4 5 6 7 8 9
Gradele interioare ale nodurilor

2 1 0 1 0 0 0 1 0 0
2 = 3

3 0 1 0 0 0 0 0 0 0
3 = 1

4 0 0 0 0 0 0 0 0 0
4 = 0

5 1 0 0 1 0 1 0 0 1
5 = 4

6 0 1 0 0 0 0 1 0 0
6 = 2

7 0 0 0 0 0 1 0 0 0
7 = 1

8 0 0 0 0 0 0 0 0 0
8 = 0

9 0 0 0 0 0 0 0 0 0
9 = 0

Gradele exterioare ale nodurilor + 1 = 2 + 2 = 3 + 3 = 1 + 4 = 2 + 5 = 0 + 6 = 2 + 7 = 2 + 8 = 0 + 9 = 1


0 1 0 1 0 0 0 0 0
1 = 2

nod final

nod izolat

=
= =

nod iniial

Graful are 13 arce

FIG. 3.23. MATRICEA DE ADIACEN LA UN GRAF ORIENTAT

n cazul grafurilor orientate, matricea de adiacen nu mai este simetric datorit prezenei arcelor i din cauza necesitii codrii orientrii acestora. = = , ,

, , , ,

(, )

n aceast reprezentare aij=1, reprezint codarea unui arc care pornete de la vrful i i ajunge la vrful j. Urmrind matricea pe linii, se va putea identifica cu uurin gradul exterior al unui vrf, pornind de la arcele care i au originea n acel vrf sau arcele care pornesc de la acel vrf. Abordarea pe coloane a matricii, permite aflarea gradelor interioare ale vrfurilor, n funcie de coloana avut n discuie sau n analiz. Arcele care ajung la un anumit vrf sau care au extremitatea final la acel vrf, pot fi identificate urmrind coloana avnd numrul identic cu numrul vrfului analizat. Observaii: Numrul valorilor diferite de zero din matrice reprezint numrul arcelor grafului. Dac aij = aji, adic exist elemente simetrice n matrice, avem de a face cu arce reversibile. Toate valorile egale cu 0 pe linia i = niciun arc nu pornete de la vrful i.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Toate valorile egale cu 0 pe coloana j = nici un arc nu ajunge la vrful j. Linia i i coloana i conin numai valori nule = nodul este izolat. Dac doar una din cele dou valori sunt nule avem: - nod iniial (de pornire) + 0, = 0, exist arce care pornesc din nodul i, dar nici un alt arc nu poate ajunge la el. - nod final (de oprire) + = 0, 0, trebuie arc nu pleac de la vrful i, dar se poate ajunge la el de la un alt vrf. Cunoaterea i identificarea unor asemenea noduri, permite o mai simpl i corect abordare a drumurilor n grafuri orientate, n sensul, de unde putem porni i unde putem ajunge n situaii extreme (de optim). Matricea de inciden (matricea noduri-muchii, vrfuri-arce) Matricea de inciden este una din formele mai puin folosite n reprezentarea intern a grafurilor neorientate sau orientate, urmrind s fac o conexiune direct ntre cele dou mulimi care definesc graful, mulimea nodurilor i cea a muchiilor. Pentru reprezentarea prin matrice de inciden a unui graf G=(X, U), presupunem c vrfurile sunt codate prin numere naturale de la 1 la n (n = X ), iar muchiile sunt codate prin numere de la 1 la m (m= U ), ntr-un mod arbitrar. Reprezentarea prin matrice de inciden a grafului G, este o matrice A, unde: = =

, ,

(1,2)

u1 1 1 0 0 0 0 0 0 0

(1,4)

u2 1 0 0 1 0 0 0 0 0

(1,5)

u3 1 0 0 0 1 0 0 0 0

(2,3)

u4 0 1 1 0 0 0 0 0 0

(2,6)

u5 0 1 0 0 0 1 0 0 0

(2,7)

u6 0 1 0 0 0 0 1 0 0

(4,5)

u7 0 0 0 1 1 0 0 0 0

(5,6)

u8 0 0 0 0 1 1 0 0 0

(5,9)

u9 0 0 0 0 1 0 0 0 1

(6,7)

u10 0 0 0 0 0 1 1 0 0

1 2 3 4 5 6 7 8 9

d(1)=3 d(2)=4 d(3)=1 nod terminal d(4)=2 d(5)=4 d(6)=3 d(7)=2 d(8)=0 nod izolat d(9)=1 nod terminal

=
=

Graful are 10 muchii

FIG. 3.24. MATRICEA DE INCIDEN LA UN GRAF NEORIENTAT

n reprezentarea grafului din figura 3.21.b, s-au codat arcele grafului sub forma u1, , um, cu semnificaiile din figura 3.24.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Pentru reprezentarea intern cu ajutorul matricii de adiacen, necesarul de memorie este de locaii. Comparativ, din punct de vedere al memoriei alocate, se pune ntrebarea care este mai eficient? Rspunsul este dat de numrul de muchii m al grafului. Dac numrul de muchii este mai mare dect numrul de noduri, matricea de inciden are nevoie de mai mult spaiu de memorie. n concluzie, grafele rare, ar putea avea n matricea de inciden o form de reprezentare care utilizeaz mai bine spaiul de memorie necesar. Din punct de vedere al informaiei pe care o putem obine i o putem prelucra, dup cum spune i numele matrice noduri-muchii, se pot avea n discuie dou abordri, astfel: - pe o anumit linie i, vom avea toate informaiile legate de nodul i, valoarea 1 reprezentnd faptul c nodul este incident cu muchia j (codat uj), sau c nodul reprezint una din extremitile acelei muchii. - pe coloana j (codat uj), se vor gsi informaiile despre muchia j. Spre exemplu n figura 3.24., dac se urmrete linia 2, corespunztoare nodului cu eticheta 2, se vor identifica 4 valori nenule, ceea ce nseamn c 4 muchii sunt incidente la nodul 2. Gradul nodului 2 este 4, acesta fiind egal cu al numrului de muchii incidente. Dac se analizeaz o anumit coloan a matricii de inciden, pe aceasta se vor gsi exact 2 valori nenule, reprezentnd extremitile muchiei. Analiznd accesibilitatea informaiei, comparativ cu matricea de inciden, se poate observa c aceasta este mai dificil. Pentru a obine att informaii elementare, legate de conectivitatea nodurilor, cine cu cine se leag, ct i informaii sumative, de tipul gradul unui nod, este necesar explorarea matricii n general, sau a unei anumite linii sau coloane n special. De exemplu, pentru a identifica dac dou noduri x i y sunt adiacente, paii care trebuie urmai sunt: 1. se caut pe linia x, corespunztoare nodului cu valoarea x, o valoare egal cu 1. 2. dac s-a gsit o valoare nenul, se verific dac i pe linia y a aceleiai coloane se gsete tot o valoare nenul. 3. dac operaia 2 s-a ncheiat cu succes (pe aceeai coloan sunt dou valori nenule, adiacente), am rezolvat cerina, dac nu se reia operaia 1. 4. dac operaia 1 a epuizat cutrile, nodurile x i y, nu sunt adiacente. La reprezentarea grafurilor orientate cu ajutorul matricii de inciden problema care a trebuit s fie rezolvat a fost de consecutivitatea vrfurilor care definesc arcul. Cu alte cuvinte, de unde pleac arcul i unde ajunge. Reprezentarea prin matrice de inciden a grafului orientat G, este o matrice A, unde: =

, = , , Matricea de inciden a grafurilor orientate, va conine valori de 1 i -1, cte una din fiecare pe fiecare coloan, codnd astfel arcul, dup regula: -1 reprezint extremitatea iniial, 1 cea final. Pe o anumit linie totalul valorile negative reprezint gradul interior al nodului corespunztor liniei, iar valorile pozitive gradul exterior. n abordarea grafurilor orientate cu ajutorul matricii de inciden, valorile nenule au semnificaie de arce incidente la vrfuri, iar semnul, reprezint sensul arcului, de la (-) la (+). Observaie: Liniile care conin numai valori negative reprezint vrfuri finale ale grafului, iar cele care conin numai valori pozitive vrfuri iniiale.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Alegerea matricii de inciden ca form de reprezentare a grafurilor, este rar ntlnit din cauza memoriei alocate i a dificultilor ntlnite n accesarea rapid a informaiilor. Lista de adiacen Una din formele des ntlnite n reprezentarea grafurilor este lista de adiacen. Aceast form, presupune reinerea perechilor de noduri adiacente, ntr-o ordine aleatoare, att n ceea ce privete ordinea muchiilor, ct i a ordinii n care sunt memorate nodurile pentru o muchie dat. Din punct de vedere al tipului de date posibil de folosit sunt ntlnite n mod curent 4 forme: o matrice cu 2 linii (sau 2 coloane) pe fiecare dintre ele codnd extremitile muchiei. doi vectori, fiecare din ei reprezentnd cte o extremitate a muchiei. un vector, n care fiecare element al vectorului codeaz o muchie, folosind o structur cu 2 elemente (nodurile). o structur dinamic nlnuit (list) n care fiecare entitate conine dou informaii utile, nodurile ce definesc muchia. =
1 2 3

Pentru un graf G=(X, U), lista de adiacen este: ,


4 5

, , , ,
6 7 8 9 10

a b

1 2

1 4

1 5

2 3

2 6

2 7

4 5

5 6

5 9

6 7

Lista de adiacen a grafului neorientat 2.21.a


1 2 3 4 5 6 7 8 9 10 11 12 13

a b

1 2

1 5

2 1

2 3

2 6

3 2

4 1

4 5

6 5

6 7

7 2

7 6

9 5

Lista de adiacen a grafului orientat 2.21.b


FIG. 3.25. LISTA DE ADIACEN

n figura 3.25 avem codrile muchiilor grafului neorientat din figura 3.21. Indiferent de tipul de date ales pentru implementare sunt cteva lucruri importante de reinut: gradul unui nod se poate afla calculnd numrul de apariii al valorii care identific nodul, n list. existena unei muchii se poate afla cutnd perechea de valori n list. numrul de noduri (care nu sunt izolate) din graf este reprezentat de numrul de valori distincte din list.

Codarea prin list de adiacen, utilizeaz eficient spaiul de memorie, utiliznd strict ct este necesar, n cazul implementrilor dinamice, sau locaii de memorie, la implementri statice. Din acest punct de vedere este cea mai eficient implementare, singurele inconveniente rmnnd cele legate de identificarea unei adiacene sau aceea care privete calculul gradelor. Situaii problematice ar putea aprea la actualizarea grafului (adugarea, eliminarea unei muchii), mai ales la implementrile statice. Este recomandat, ca lista s fie memorat pe ct posibil, cu perechile de noduri care definesc muchia n ordine cresctoare, iar muchiile ordonate dup nodurile care le definesc, pentru o mai uoar accesare a informaiilor, att cele legate de muchii, ct i cele legate de noduri.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Observaii: n cazul grafurilor orientate, deosebirea const n faptul c perechea de vrfuri trebuie scris aa cum definesc ele arcul (nod iniial, nod final), i nu oricum ca la grafurile neorientate. O form poate fi, prima linie (primul vector sau primul element al perechii) nodul iniial, cealalt linie (al doilea vector, al doilea element al perechii structurii) nodul final. Pentru a afla gradul exterior al unui nod este suficient s-i numrm apariiile de pe prima linie, iar pentru gradul interior, pe cele de pe a doua linie. Nodurile care nu se regsesc pe prima linie, dar se gsesc pe linia a doua, sunt noduri finale (la acestea se poate doar ajunge, nu i pleca), iar cele ale cror valori se gsesc doar pe prima linie noduri de pornire. Nodurile izolate, sunt reprezentate de valorile lips din reprezentare. Datorit simplitii de implementare i a uurinei cu care se pot obine unele informaii, lista de adiacen este utilizat destul de frecvent, n special de nceptori. Observaie: Exist algoritmi de grafuri n general i algoritmi de optim n special, a cror modelare este bazat pe reprezentarea cu ajutorul listei de adiacen. Liste de adiacen Reprezentarea intern a grafurilor, gsete n listele de adiacen, cea mai util i complex form. Prin aceasta, fiecrui nod i este asociat lista nodurilor adiacente. Din punct de vedere al implementrilor informatice, exist o sumedenie de codri i reprezentri interne. n continuare vom discuta despre una dintre acestea, cea care are drept structuri de date pentru memorare doi vectori. Primul dintre acetia, reine succesiv, listele cu adiacenele fiecrui nod, iar al doilea conine o list de referine, cte una pentru fiecare nod, i anume indicele (poziia) din primul ir, unde lista de adiacen a acestuia ia sfrit.
Listele de adiacen ale nodurilor
1 2 3 2 1 2 4 3 5 6 7 4 5 6 1 1 2 5 4 5 6 7 9 7 8 9 5 2 6

Implementarea listelor de adiacen ale nodurilor


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

L=

V=

3 1

7 2

8 10 14 17 19 19 20 3 4 5 6 1 7 8 9 1

FIG. 3.26. LISTE DE ADIACEN GRAF NEORIENTAT

n figura 3.26 este reprezentat schematic modalitatea de trecere de la graful neorientat din figura 3.21.a la listele de adiacen. n secvena de nceput sunt reprezentate listele de adiacen ale fiecrui nod n parte. Pentru un graf neorientat G=(X, U), listele de adiacen sunt: = , , ,

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Astfel avem: l1={2, 4, 5}, l2={1, 3, 6, 7}, l3={2}, l4={1, 5}, l5={1, 4, 6, 9}, l6={2, 5, 7}, l7={2, 6}, l8=, l9={5}. Se poate observa cu uurin c pentru nodul i: = . Gradul fiecrui nod este dat numrul de elemente din lista de adiacen a nodului. n situaiile reale complexe, o implementare des folosit, este aceea care are n lista L, listele de adiacen reunite ntr-un singur tablou. n L vom gsi concatenate toate listele de adicen ale tuturor nodurilor, iar pentru a putea extrage informaiile despre adiacenele fiecrui nod, se folosete un alt vector V. Vectorul V permite extragerea adiacenelor nodului i care se regsesc ntre poziiile v[i-1]+1 i v[i]. = 1 , 1,2 = 1, = , 1,2 = , , , > 1 Observaii: Vectorul V este de dimensiune n, coninnd limitele listelor de adiacen pentru fiecare nod. Vectorul V este un vector cresctor, valorile acestuia preciznd ordinea de culegere a informaiilor din L, pentru nodul k, de la poziiile vk-1+1 i vk. Vectorul L este de dimensiune 2*m deoarece fiecare muchie este evideniat prin cele dou noduri care o definesc, fiecare aprnd n lista de adiacen a celuilalt. Folosind acest tip de codare a grafurilor, este deosebit de uor de aflat orice informaie despre graf. Listele de adiacen conin numai informaii utile la limita inferioar a memoriei alocabil. Spre exemplu, folosind figura 3.26, codarea unui graf neorientat, se pot obine urmtoarele informaii: gradul unui nod de exemplu pentru nodul 4, v[4]=10 i v[3]=8, de unde rezult c gradul acestuia este v[4]-v[3]=2. Analiznd valori consecutive din vectorul V, se pot obine informaii semnificative legate de gradul i tipul nodului (izolat= dou valori consecutive egale, terminal= dou valori consecutive avnd valori consecutive) dac dou noduri 2 i 6 sunt adiacente se poate analiza, fie lista de adiacen a lui 2, care se gsete n vectorul V de la poziia v[1]+1 (=4), pn la poziia v[2] (=7), fie lista de adiacen a lui 6, aflat ntre poziiile v[5]+1 (=15) i v[6] (=17). Se observ c numrul de ncercri este mult mai mic comparativ, cu lista de adiacen sau matricea de inciden.

Pentru un graf orientat definiia listelor de adiacen este: = 1 , 1, = 1, = , 1, = , , , > 1 n reprezentarea grafului orientat G=(X, U), din figura 3.21.b, se observ c toate arcele se regsesc o singur dat n reprezentare. Vectorul L, care conine toate listele de adiacen ale vrfurilor, are dimensiunea egal cu numrul arcelor, m. Numrul elementelor din lista de adiacen reprezint gradul exterior al vrfului. + = =

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Pentru exemplificare, se va folosi reprezentarea din figura 3.27, unde L este vectorul ce conine listele de adiacen, iar V este vectorul ce precizeaz locul (indicele) unde se termin adiacenele fiecrui vrf n parte.
Listele de adiacen ale vrfurilor
1 2 3 2 1 2 5 3 6 4 5 6 5 7 1 5 7 8 9 5 2 6

Implementarea listelor de adiacen ale vrfurilor


1 2 3 4 5 6 7 8 9 10 11 12 13

L=

V=

2 1

5 2

6 3

8 4

8 10 12 12 13 5 6 1 7 8 9 1

FIG. 3.27. LISTE DE ADIACEN GRAF ORIENTAT

Astfel, dac se ia n considerare vrful 6, se observ c gradul exterior al acestuia este 2, deoarece lista de adiacen a vrfului 6 se termin la poziia v[6] (=10), iar lista de adiacen a vrfului 5 se termin la poziia v[5] (=8), ntre cele dou poziii fiind toate adiacenele lui 6. Observaie: Pentru a se obine gradul interior al unui vrf oarecare i, este suficient s aflm numrul de apariii al vrfului i n toate listele de adiacen. De exemplu = , deoarece n vectorul V, valoarea 2 se regsete de 3 ori, vrful 2 aprnd n 3 liste de adiacen, acesta reprezentnd extremitatea final a 3 arce. Observaie: Nodurile care nu se regsesc n nicio list de adiacen, nu apar n L, au gradul interior 0. Dac i lista lor de adiacen e vid ( = 1 ), nodul este izolat. n vectorul L din figura 3.27, valorile 4, 8, 9 nu apar (au gradul interior 0), ar putea fi noduri iniiale (de pornire), iar nodul 8 are i lista de adiacen vid (v[8]=v[7]). n concluzie, avem dou noduri de pornire, 4 i 9, i un nod izolat 8. Reprezentarea intern a grafurilor ponderate Reprezentarea intern a grafurilor ponderate, folosete aceleai structuri i principii ca i la grafurile neponderate, cu singura diferen, evidenierea costului muchiei sau arcului. n continuare, se prezint modul de evideniere al costului n cazul structurilor de reprezentare a grafurilor. n reprezentrile urmtoare se face referire la notaiile i sensurile din definiia 3.18. n cazul reprezentrii grafului ponderat G=(X, U) folosind matricea de adiacen (A), structura de date trebuie s includ costurile aferente fiecrei muchii. n situaia anterior prezentate se obine urmtoarea definiie: = = , ,

, , ,

(, )

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Deosebirea fa de reprezentarea grafurilor neponderate, este aceea c valoarea 1, care semnala prezena unei muchii sau a unui arc, este nlocuit cu o valoare numeric nenul, reprezentnd ponderea (cantitatea i calitatea conexiunii) acesteia. Observaie: n cazul grafurilor orientate codarea ponderilor se face n sensul parcurgerii arcului. Se recomand evitarea codrii reciproce cu punerea unei valori negative, deoarece pot exista arce cu valori negative pe sensul de parcurgere. Matricea de inciden, ca alternativ de codare a grafurilor ponderate, nu este afectat de necesitatea utilizrii costurilor. Datorit faptului c reprezentarea utilizeaz muchii sau arce etichetate (indexate), pentru evidenierea costurilor este suficient codificarea acestora ntr-un vector al costurilor: = , Fiecrei muchii/arc i, i este asociat un cost ci. La reprezentarea prin list de adiacen este necesar folosirea unui al treilea vector (o a treia caracteristic), care s identifice costul fiecrei muchii/arc, definiia fiind: = , , , , , , , Listele de adiacen, vor utiliza un vector suplimentar C, cu aceeai dimensiune cu L, vectorul care conine listele de adiacen, care pentru fiecare element al lui L, s aib asociat un element din c, reprezentnd costul muchiei/arcului care au ca extremitate final elementul din L. Definiia matematic poate fi prezentat astfel: = 1 , 1,2 = 1, = , , , 1,2 = , , , > 1 Decizii n alegerea optim a formei de reprezentare intern Pentru rezolvarea de probleme, care pot fi reprezentate prin grafuri, decizia n alegerea optim a formei de reprezentare intern a informaiilor, poate s fie decisiv n implementarea i dezvoltarea ulterioar a aplicaiei. Criteriile i elementele care trebuie avute n vedere sunt: a. accesibilitatea informaiilor, prin uurina, simplitatea de a le folosi i actualiza; b. spaiul de memorie avut la dispoziie i implicit cel necesar, care depind de resursele sistemului de calcul pe care se instaleaz i ruleaz aplicaia, i de ordinul de mrime al numrului entitilor de lucru (noduri, muchii, costuri). Dac se ine cont de criteriile prezentate anterior, matricea de adiacen dei permite un acces rapid pentru utilizarea i actualizarea informaiilor, necesit resurse interne mari i multe dintre ele inutile (valorile de 0, cu semnificaia nu exist muchie/arc) sau dublate n cazul grafurilor neorientate (aij=aji, matricea fiind simetric). Matricea de inciden, nu ofer posibilitatea de accesare rapid a informaiilor, dect la modelarea fenomenelor mici (cu numr redus de evenimente i legturi), a grafurilor rare, iar spaiul de memorie necesar este comparabil cu al matricii de adiacen. Lista de adiacen, folosete optim spaiul de memorie, utiliznd strict ct este necesar pentru modelarea problemei. Din punct de vedere al accesibilitii, lucrurile sunt mprite. Exist situaii n care informaiile stocate sunt ordonate n prealabil, sau ele sunt date direct ordonate, ceea ce permite utilizarea unor algoritmi performani pentru cutare i actualizare, determinnd ca alegerea reprezentrii prin list de adiacen, s fie optim. Dac n schimb, volumul de date este mare, i n plus acestea sunt prezentate aleator, determinnd ca operaiile de cutare i actualizare s necesite prelucrarea secvenial a informaiilor stocate, aceast form de reprezentare nu este recomandat, timpul de rspuns i de oferire a soluiilor fiind prea mare. La utilizarea listelor de adiacen, informaiile sunt uor de accesat i de actualizat prin intervenia n fiecare list n parte, cutrile fiind minimale i rapide. Spaiul de memorie folosit, l depete cu puin pe cel rezervat n cazul listei de adiacen.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Avnd n vedere cele enunate anterior, doar o analiz atent i exact a problemei, din punct de vedere al celor trei lucruri, date de intrare, prelucrare date, date de ieire, ne poate conduce la o alegere optim.

3.2. Modaliti de abordare a problemelor de optim prin parcurgerea grafurilor n adncime (DFS)
Rezolvarea probleme de grafuri pot avea abordri diferite, dar, toate se rezum la descrierea i analizarea din toate punctele de vedere a elementelor care definesc graful, nodurile/vrfurile i muchiile/arcele acestuia. Principalele obiective care trebuie abordate n problemele de grafuri sunt: strategia de explorare i scopurile urmrite n cadrul acesteia, i nu n ultimul rnd modalitatea de codare a grafului. Prin explorarea unui graf, se poate nelege o anumit strategie de vizitare a nodurilor grafului sau de selectare a muchiilor acestuia, n funcie de scopul final urmrit. Din punctul de vedere al strategiilor de baz care pot fi alese n explorarea unui graf, se disting dou: parcurgerea n adncime (DFS = depth first search) i parcurgerea n lime (BFS = breadth first search). Parcurgerea grafurilor n adncime, este un algoritm de explorare a grafurilor pornind de la un nod oarecare al acestuia. Strategia folosit este, dup cum arat i numele, de a cuta tot mai adnc n graf spre locuri neexplorate nc, oricnd acest lucru este posibil. Dac acest lucru nu mai este posibil, se revine pe traseul de avansare i se rencearc avansarea de la noua poziie curent. Modelul matematic care reprezint cel mai bine mecanismul de parcurgere n adncime, este modelul stivei, n care elementul curent este n permanen n vrful stivei, iar prima adiacen gsit (care nu se gsete n stiv) se depune n vrful stivei, devenind noul element curent. Se poate constata o asemnare cu o alt metod studiat anterior, metoda backtracking. Ambele metode lucreaz dup principiul stivei, n care accesul se face asupra ultimului element accesat, iar n momentul n care nu se mai poate aduga un nou element se elimin din stiv elementul aflat n vrf (back tracking) i se continu naintarea. Din punct de vedere al principiului, metoda backtracking exploreaz ntreg spaiul soluiilor, permind obinerea tuturor soluiilor posibile, pe cnd n parcurgerea n adncime se urmrete obinerea unei singure soluii. Dac la ambele metode, la adugarea unui element nou n stiv (soluia parial), acesta este marcat (vizitat), diferena apare la ntoarcere (back tracking), cnd la metoda backtracking, acestuia i este anulat marcajul, pentru a mai fi folosit ulterior ntr-o alt variant a soluiei, pe cnd la DFS, elementul odat vizitat rmne vizitat, scopul fiind de a vizita toate nodurile o dat, i nu toate variantele de vizitare. 3.2.1. Reprezentarea datelor Algoritmul care modeleaz parcurgerea n adncime a grafului G=(X, U), cu n noduri i m muchii va folosi urmtoarele date: - reprezentarea intern a grafului prin matricea de adiacen A; - x0, nodul de pornire (nodul iniial). - [ ] = , , , vectorul care va preciza dac un anumit nod i, a fost sau nu vizitat pn n acest moment. Valoarea viz[i]=0, are sensul: la nodul i nu am mai ajuns pn acum, iar viz[i]=1, nodul a mai fost vizitat anterior. - = , , , vectorul care reine ordinea elementelor vizitate i active de pn acum, iar n vrful stivei se reine elementul curent (ultimul nod vizitat). - u, numrul de elemente din stiv (vrful stivei). - = , , ,

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

vectorul care reine nodurile grafului n ordinea n care ele au fost explorate (vizitate); = , + , , vectorul care va reine muchia de avansare (nodul de avansare). Valoarea lui urm[i], va reprezenta nodul la care se face avansarea de la nodul i, cu ajutorul muchiei (i, urm[i]). Dac acest lucru nu mai este posibil, urm[i]=n+1.

Pentru modelarea diverselor aplicaii, care presupun descrierea drumurilor obinute n explorarea grafului, se mai pot utiliza doi vectori: - = , , , care va reine pentru fiecare nod, predecesorul su obinut n momentul explorrii. Cu ajutorul acestuia se poate reconstitui drumul de la nodul de pornire la oricare nod al grafului, folosind perechile (i, pred[i]), muchii de ntoarcere. - = , , , care va reine lungimea drumului obinut prin parcurgerea DFS de la nodul iniial la orice nod al grafului. Parcurgerea n adncime se bazeaz n principal n explorarea nodurilor pe stiva st, n care la fiecare moment se va gsi primul nod adiacent cu nodul curent, nod nevizitat anterior. 3.2.2. Principiul algoritmului DFS La lansarea n execuie a algoritmului, trebuie avut n vedere faptul c toi vectorii trebuie s fie iniializai cu 0. Paii care descriu succesiunea operaiilor sunt urmtorii: 1. se selecteaz nodul de pornire x0, care se reine n stiva st, pe primul nivel (u=1), nod care din acest moment este vizitat ( 0 = 1) i care se reine n soluia sol, ( = 0 ), unde p reprezint numrul total de noduri vizitate pn acum; 2. se verific toate adiacenele nodului aflat n vrful stivei, verificare care se termin la identificarea primului nod adiacent nevizitat anterior. Fie acest nod i. 3. se reine muchia de naintare, care permite trecerea de la nodul curent ( ) la elementul urmtor, nodul i. Acest lucru este codat n = . Observaie: Este posibil ca valoarea lui i s fie n+1, cu sensul, nu se mai poate nainta. 4. dac operaia 2 a gsit o posibilitate de naintare n graf, prin nodul i, aceasta determin modificarea tuturor vectorilor: a. vizitarea nodului, = 1 b. memorarea nodului, = + 1 i = c. memorarea muchiei de naintare, = d. memorarea muchiei de ntoarcere, = e. memorarea distanei nodului curent, = + 1 f. adugarea nodului n stiv, = + 1 i = . 5. dac n urma efecturii operaiei 2 nu s-a gsit o muchie de naintare ( = + 1 sau = + 1), se elimin din stiv nodul curent ( = 1), revenindu-se la nodul anterior, care devine noul vrf al stivei, dup care se reia operaia 2. Observaie: Algoritmul DFS, poate s se termine n urmtoarele situaii: 1. ntregul graf a fost explorat; 2. s-a ajuns la un nod care trebuia neaprat atins (vizitat); 3. stiva este vid. Pentru o corect nelegere a sensurilor i noiunilor prezentate, se va modela

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

parcurgerea n adncime a grafului, etapele fiind descrise n figurile 3.29 3.32 unde sensurile reprezentrilor sunt cele din figura 3.28.
nod nevizitat nod curent (vrful stivei) nod urmtor nod vizitat nod curent (la ntoarcere) muchie neexplorat muchie activ (de naintare) muchie selectat muchie invalid muchie de ntoarcere

3 1 2 1 1

FIG. 3.28. CODURILE REPREZENTRILOR

2 1 5 7 10 1

2 7 5 10 1

2 7 5 10

11

11

11

1. st={1}

2. st={1, 2}
FIG. 3.29. DFS PAII 1-3

3. st={1, 2, 3}

Graful care a fost ales pentru exemplificare, este un graf neorientat, cu 11 noduri i 16 muchii, iar parcurgerea a avut nodul 1 ca nod de pornire. n figura 3.29(1) se observ c avansarea n adncime fa de nodul 1, se poate face ctre nodul 2, primul nod adiacent cu 1, nevizitat anterior. Nodul 2, se adaug n stiv i devine noul nod curent. Primul nod adiacent i nevizitat al lui 2 este 3, care se depune n stiv i devine noul nod curent. Dup operaiile descrise anterior, vectorii folosii n algoritm sunt: viz={ 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0 } pred={ 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0 } urm={ 2, 3, 4, 0, 0, 0, 0, 0, 0, 0, 0 } dist={ 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 0 } sol={ 1, 2, 3, 4} La finalul execuiei aciunilor din figura 3.29., nodul 4 se gsete n vrful stivei, ca nod curent. De la nodul 4, se observ c nu se mai poate nainta, nemaifiind noduri adiacente cu acesta nevizitat anterior, de aceea, se elimin din stiv nodul 4, revenindu-se la nodul 3. Nici pentru acesta nu mai exist posibilitate de naintare, se elimin din stiv i se revine la nodul 2. Pentru nodul 2, urmtorul nod adiacent nevizitat este 5, i se poate avansa folosind muchia (2, 5) (Figura 3.30(4)). n aceast etap, se observ c are loc o revenire n explorarea n adncime, de la nodul 4 la nodul 3 i pn la nodul 2, n cutarea primei variante care poate oferi o posibilitate de a continua naintarea n graf. Nodul 5, este cel care ofer aceast posibilitate. Acesta, are ca prim nod adiacent nevizitat pe nodul 7, care se depune n stiv i devine noul nod curent (figura 3.30(5)). De la nodul 7, avansarea se face ctre nodul 8, aa cum reiese din figura 3.30(6).

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR


3 4 9 3 4 9 3 4 9

2 1 5 7 10 1

2 7 5 10 1

2 7 5 10

11

11

11

4. st={1, 2}

5. st={1, 2, 5}
FIG. 3.30. DFS PAII 4-6

6. st={1, 2, 5, 7}

Situaia datelor dup desfurarea aciunilor din figurile 3.29 i 3.30 este: viz={ 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0 } pred={ 0, 1, 2, 3, 2, 0, 5, 7, 0, 0, 0 } urm={ 2, 5, 12, 12, 7, 0, 8, 0, 0, 0, 0 } dist={ 0, 1, 2, 3, 2, 0, 3, 4, 0, 0, 0 } sol={ 1, 2, 3, 4, 5, 7, 8} n stiv n acest moment se gsesc elementele {1, 2, 5, 7, 8} (figura 3.31(7)). Este important de observat n plaja de valori a tablourilor, c n vectorul urm, nodurile 3 i 4 au valorile egale cu 12 (n+1). Pentru aceste noduri, toate ncercrile de a mai nainta sunt depite.
3 4 9 3 4 9 3 4 9

2 1 5 7 10 1

2 7 5 10 1

2 7 5 10

11

11

11

7. st={1, 2, 5, 7, 8}

8. st={1, 2, 5, 7, 8}
FIG. 3.31. DFS PAII 7-9

9. st={1, 2, 5, 7, 8, 10}

De la nodul 8, naintarea se poate face ctre nodul 6, nod care se adaug n stiv. Pentru acesta, nu exist o adiacen nevizitat care s permit avansarea n explorarea grafului. De aceea este eliminat din stiv, i se revine nodul 8 ca nod curent. Nodul 6, n urma operaiilor descrise anterior i epuizeaz i el ncercrile de naintare n graf. Urmtorul nod nevizitat i adiacent cu nodul 8, este 10. Avansarea n graf are loc de la nodul 8 ctre nodul 10 i mai departe, de la acesta ctre nodul 9 (figura 3.31.(8-9)). Datele memorate n acest moment al explorrii grafului n adncime sunt: viz={ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 } pred={ 0, 1, 2, 3, 2, 8, 5, 7, 10, 8, 0 } urm={ 2, 5, 12, 12, 7, 12, 8, 10, 0, 9, 0 } dist={ 0, 1, 2, 3, 2, 5, 3, 4, 6, 5, 0 } sol={ 1, 2, 3, 4, 5, 7, 8, 6, 10, 9} La sfritul aciunilor din figura 3.31, stiva l are n vrf pe nodul 9 i e format din

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

nodurile {1, 2, 5, 7, 8, 10, 9}


3 4 9 3 4 9 3 4 9

2 1 5 7 10 1

2 7 5 10 1

2 7 5 10

11

11

11

10. st={1, 2, 5, 7, 8}

11. st=
FIG. 3.32. DFS PAII 10-12

12.

Nodul 9, nod curent, nu mai are nicio posibilitate de naintare i va fi scos din stiv, acelai lucru fcndu-se i cu predecesorul su, nodul 10. Dup eliminarea succesiv din stiv a nodurilor 9 i 10, se ajunge din nou la nodul 8, pentru care se gsete o nou posibilitate de avansare n graf, ctre nodul 11. Observaie: Dac se tie c problema analizeaz un graf conex, explorarea se poate termina, deoarece toate cele n noduri (11) au fost vizitate. n continuare, sunt scoase pe rnd din stiv toate nodurile, n ordine 11, 8, 7, 5, 2, 1, pentru niciunul dintre ele nemaiexistnd posibilitate de avansare ctre un alt nod nevizitat. Dup cum se observ i n figura 3.32.(12), n urma explorrii grafului prin DFS, se obine un arbore de acoperire a grafului n adncime, cu rdcina nodul x0, nodul 1 n exemplul de mai sus. Tablourile de date la sfritul explorrii sunt: viz={ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } pred={ 0, 1, 2, 3, 2, 8, 5, 7, 10, 8, 8 } urm={ 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12 } dist={ 0, 1, 2, 3, 2, 5, 3, 4, 6, 5, 5 } sol={ 1, 2, 3, 4, 5, 7, 8, 6, 10, 9, 11 } Analizarea semnificaiilor datelor obinute la sfritul algoritmului Vectorul viz, poate conferi informaii despre: - conexitatea grafului, dac toate valorile sunt egale cu 1. - existena unui drum ntre dou noduri dac ambele au valoarea 1. - care sunt nodurile la care se poate ajunge pornind de la nodul x0, i cte sunt acestea (valorile de 1 i cte sunt acestea). Vectorul pred, este vectorul care permite reconstituirea drumului de la nodul iniial, la orice alt nod vizitat al grafului. Fiecare nod are un predecesor unic, derivat din regula de explorare i din rezultatul final obinut, acela al unui arbore de acoperire. Pentru aceasta, se pornete de la nodul final, cel dorit sau cerut prin enun ctre nodul de la care a fost pornit parcurgerea, mergnd din predecesor n predecesor. Nodul de pornire este singurul care nu are predecesor, fiind implicit rdcina arborelui. Vectorul dist, poate fi folosit pentru informaii legate de lungimile drumurilor de la nodul iniial ctre orice alt nod al grafului. Vectorul sol, ofer date despre ordinea de vizitare a nodurilor.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

3.2.3. Algoritmul DFS Deoarece algoritmul de parcurgere n adncime este folosit ntr-o divers gam de situaii, descrierea acestuia n pseudocod, va conine forma cea mai general. n situaii concrete se poate renuna la unele date i operaii care nu sunt absolut necesare. Semnificaiile i notaiile sunt cele prezentate la capitolul 3.3.1. algoritmul DFS(x0) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: pentru i=1,n execut viz[i]=urm[i]=0 sfrit p=u=1 st[u]=x0 sol[p]=x0 viz[x0]=1 pred[x0]=0 ct timp u>0 i p<n execut i=urm[st[u]]+1 caut primul nod nevizitat adiacent cu st[u] (fie el i) urm[st[u]]=i dac i<=n atunci p=p+1, sol[p]=i viz[i]=1 pred[i]=st[u] dist[i]=dist[st[u]]+1 u=u+1, st[u]=i altfel u=u-1 sfrit sfrit

Reprezentarea n pseudocod a algoritmului DFS, mpreun cu reprezentrile grafice anterioare, poate s aduc n prim plan importana cunoaterii algoritmului prin prisma multiplelor valene pe care le are i a aplicaiilor la care acesta poate fi folosit. Semnificaiile liniilor din algoritmul DFS sunt urmtoarele: linia 1: Variabilele care dein controlul n explorarea grafului sunt vectorii viz i urm. Dac vectorul viz este cel care asigur explorarea unic a nodurilor grafului, vectorul urm, asigur memorarea direciei de explorare, respectiv a nodului succesor obinut la trecerea n adncime. La declanarea algoritmului n mod uzual vectorii au valoarea zero, cu sensul deocamdat niciun nod explorat, nicio variant de naintare abordat. Liniile 2-6: Explorarea grafului, se face ncepnd cu nodul x0. Stiva st folosit pentru realizarea parcurgerii n adncime, are indicele elementului curent u, iar soluia sol, coninnd ordinea de vizitare a nodurilor are indicele ultimului element vizitat, p. Primul element memorat n stiv i n soluie este nodul de pornire x (linia 2-4), nod vizitat i care fiind nod iniial, nu are predecesori (linia 5-6). Linia 7: Algoritmul DFS, presupune cutarea n permanen a primului nod adiacent cu nodul memorat n vrful stivei st (st[u]), nod care se memoreaz n soluia sol pe poziia p. Repetarea explorrilor se poate face ct timp stiva conine elemente (nu este vid, u>0) i nc nu toate nodurile grafului au fost explorate, sau, n soluie nu sunt memorate n noduri (p<n).

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

linia 8:

Memorarea nodului urmtor, ctre care s-a fcut trecerea corect n cadrul explorrii n adncime, este elementul care permite evitarea testrilor repetate ale unor noduri, prin renceperea evalurilor n fiecare situaie de la primul nod. Aceast linie, permite continuarea testrilor ncepnd cu nodul cu eticheta imediat urmtoare celei a nodului anterior testat. Nodul i astfel obinut, reprezint o posibil continuare a explorrii grafului n adncime, plaja de testare fiind de la i pn la n. Linia 9: Pentru nodul curent, memorat n st[u], identificarea primului nod i, nevizitat i adiacent cu acesta, este rezultatul verificrii n matricea de adiacen prin care este codat graful, a elementelor de tipul a[st[u]][i]. Acest lucru, presupune verificarea liniei st[u] a matricii i oprirea din testare n momentul n care se gsete o valoare egal cu 1, pentru un element nevizitat. Observaie: Important de menionat, este faptul c aceast cutare se poate termina cu eec, nu se mai poate avansa de la st[u], n acest context, valoare lui i fiind n+1. Linia 10: Posibilitatea de continuare ctre nodul i, identificat la linia 9, este memorat ca direcie de avansare n graf. Este important de remarcat c valoarea obinut la linia 9, este reinut chiar dac ea nu reprezint o continuare valid. n acest context, memorarea n vectorul urm, a valorii n+1, ca succesor al lui st[u], este interpretat n sensul, de la nodul st[u] nu se mai poate avansa. Linia 11-16: Identificarea unei posibiliti de avansare (a unui nod valid, in, linia 11), determin urmtoarele aciuni: - reinerea nodului n soluie (linia 12), - marcarea acestuia pentru a nu fi adugat n soluie de mai multe ori (linia 13), - reinerea pentru nodul de avansare i a predecesorului acestuia, st[u], cu scopul de a putea reface ulterior, drumurile pe care s-au fcut deplasrile n cadrul explorrii n adncime (linia 14). - memorarea distanei (linia 15) la care se gsete nodul i fa de nodul de pornire x0, pe drumul obinut n urma explorrii. Distana este dat de numrul de muchii care l desparte pe i de x0, pe drumul obinut prin parcurgerea n adncime. - avansarea n adncime, prin memorarea continurii gsite (nodul i) ca un nou element n stiv (linia 16), transform nodul i n noul nod curent. Linia 17-18: De la nodul curent st[u] nu exist posibilitate de avansare ctre un alt nod (i=n+1), toate ncercrile de la 9 soldndu-se cu eec. Nodul se elimin din stiv (linia 18), explorarea continund cu noul vrf al stivei.. Din punct de vedere al imaginii grafice a explorrii grafului, acesta este momentul cnd se realizeaz ntoarcerea la nodul anterior din secvena de explorare. De aici se va continua explorarea (linia 7). Algoritmul DFS scris n limbaj de programare se gsete n Anexa 1. Consideraii asupra algoritmului Algoritmul descris anterior, poate fi aplicat att grafurilor neorientate ct i grafurilor orientate. Dei el a fost descris ntr-o abordare a grafurilor neponderate, poate fi aplicat grafurilor ponderate atunci cnd programatorul urmrete doar existena muchiilor sau a arcelor, i nu costul acestora. n forma n care a fost descris anterior, algoritmul DFS folosete ca modalitate de memorare a grafului matricea de adiacen A, iar complexitatea acestuia este O(n2). Algoritmul poate fi transcris i pentru celelalte forme de reprezentare n memorie a grafului, list sau liste de adiacen, programatorului rmnndu-i n final decizia n a opta pentru una dintre acestea, n funcie de dimensiunile grafului, a numrului de noduri respectiv a numrului de muchii, acestea putnd avea influene importante asupra timpului necesar pentru obinerea soluiei i asupra utilizrii eficiente a memoriei.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

3.3. Parcurgerea grafurilor n lime (BFS), o modalitate de obinere a drumurilor de lungime minim ntr-un graf neponderat
Parcurgerea grafurilor n lime (BFS-Breadth First Search), este o alt modalitate de explorare a grafurilor pornind de la o surs unic. La fel ca i parcurgerea n adncime, i acest algoritm are drept scop vizitarea nodurilor cel mult o dat. Aprecierea, cel mult o dat, este datorat faptului c grafurile pot s nu fie conexe. n aceast situaie, la unele noduri nu se poate ajunge pornind de la nodul surs ales. Spre deosebire de strategia de parcurgere n adncime, pentru parcurgerea n lime, pentru fiecare nod se exploreaz toi vecinii nevizitai ai acestuia, i abia dup aceea, se continu explorarea. Mecanismul poate fi uor explicat folosind principiul lucrului cu o coad, n care la o extremitate se gsete elementul curent, iar la cealalt se adaug toate adiacenele nevizitate anterior ale acestuia n momentul detectrii lor. Dup ce toate adiacenele au fost adugate, se trece la urmtorul element al cozii. 3.3.1. Reprezentarea datelor Parcurgerea n lime a grafului neorientat G=(X, U), cu n noduri i m muchii va folosi urmtoarele date: - reprezentarea intern a grafului prin matricea de adiacen A; - x0, nodul de pornire (nodul iniial). - [ ] = , , , vectorul care va preciza dac un anumit nod i, a fost sau nu vizitat. Valoarea viz[i]=0, are sensul: la nodul i nu am mai ajuns pn acum, iar viz[i]=1, nodul a fost deja vizitat. - = , , , vectorul care reine ordinea elementelor vizitate pn acum, coada n care se depun elementele vizitate. - p, poziia elementului curent al cozii, cel a crui adiacene se analizeaz. - u, poziia ultimului element al cozii, locul unde se face adugarea elementelor nou gsite. Pentru aplicaii care presupun drumuri, distane, fa de nodul iniial x0, se mai pot utiliza vectorii: - = , , , pentru fiecare nod, predecesorul su reprezint nodul de la care s-a ajuns la acesta n momentul explorrii. - = , , , reprezint lungimea drumului (minim) nodului i, fa de nodul iniial x0, de la care se pornete explorarea grafului. 3.3.2. Principiul algoritmului BFS Algoritmul n evoluia lui, se bazeaz n principal pe informaiile legate de trecerea o singur dat prin fiecare nod i pe distanele calculate fa de nodul de pornire, de aceea, cel puin vectorii viz i dist trebuie s fie iniializai cu 0. Paii care reprezint succesiunea operaiilor care se desfoar la parcurgerea n lime, sunt urmtorii: 1. se selecteaz nodul de pornire x0, care se reine n coada c, el fiind primul i ultimul element al cozii la nceput (p=u=1). Nodul x0, din acest moment este considerat vizitat ( = 1). 2. se verific toate adiacenele nodului aflat la nceputul cozii, pe poziia p n vectorul c ( ). Toate nodurile adiacente cu acesta i nevizitate anterior se prelucreaz. Fie i unul dintre aceste noduri.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

3. fiecare nod i gsit la 2, reprezint o nou entitate exlorat n graf, determinnd urmtoarele modificri ale datelor: a. vizitarea nodului, = 1 b. adugarea nodului n coad, = + 1 i = c. memorarea muchiei de ntoarcere, = d. memorarea distanei nodului curent, = + 1 4. dac n cadrul operaiei 3, s-a terminat testarea tuturor adiacenelor nodului curent, se avanseaz n coad, schimbndu-se elementul curent ( = + 1). Observaie: Algoritmul BFS, se poate termina n urmtoarele situaii: 1. ntregul graf a fost explorat, toate nodurile au fost vizitate; 2. s-a ajuns la un nod care trebuia neaprat atins (vizitat), explorarea celorlalte nemaifiind necesar; 3. explorarea nu mai poate nainta, pentru niciunul din nodurile reinute n coad nu se mai poate extinde cutarea, graful nu este conex. 4. s-a ajuns la o anumit valoare a distanei. Pentru modelarea secvenialitii operaiilor n execuia algoritmului BFS, se vor descrie i prezenta etapele derulate conform cu principiile enunate anterior. n acest sens, etapele parcurgerii n lime a grafului sunt descrise n figurile 3.34 3.35, unde sensurile reprezentrilor sunt cele din figura 3.33.
3 1 1 1

nod nevizitat nod curent (n coad) nod vizitat nod selectat (la naintare)

muchie neexplorat muchie activ (de naintare) muchie selectat muchie invalid

FIG. 3.33. CODURILE REPREZENTRILOR BFS

Graful ale pentru descrierea etapelor parcurgerii n lime, este un graf neorientat, cu 11 noduri i 16 muchii, iar parcurgerea a avut nodul 1 ca nod de pornire (figura 3.34(1)).
3 4 9 3 4 9 3 4 9

2 1 5 7 10 1

2 7 5 10 1

2 7 5 10

11

11

11

1.

2.
FIG. 3.34. PARCURGEREA BFS PAII 1-3

3.

La nceputul parcurgerii (figura 3.34(1)), n coad este depus un singur element, nodul 1, nodul de pornire, care este n acelai timp i nodul curent. Pentru acesta, se caut toate nodurile adiacente i nevizitate. Pe msur ce se gsesc, acestea se adaug la coad, devenind i ele vizitate. Nodurile gsite sunt, 2, 5 i 6, care au acelai predecesor, nodul 1, iar distana lor fa de modul de pornire, este cu 1 mai mare dect a predecesorului. Efectul acestor aciuni se regsesc n modificrile ce intervin asupra valorilor reinute n

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

vectorii pred i dist: 2 = 5 = 6 = 1 2 = 5 = 6 = 1 + 1 = 0 + 1 = 1 Dup ce s-au adugat n coad toate adiacenele nodului 1, se trece la prima adiacen a nodului 1, nodul 2, urmtorul element din coad (figura 3.34(2)). Dintre adiacenele nodului 2, doar nodurile 3, 4, 7 sunt noduri nevizitate nc. Acestea se adaug la coad. Nodurile 1 i 5 se ignor, deoarece au fost deja vizitate. n urma acestei etape, nodurile 3, 4 i 7 l au predecesor pe 2 i sunt la distan cu 1 (muchie) mai mult dect nodul 2. 3 = 4 = 7 = 2 3 = 4 = 7 = 2 + 1 = 1 + 1 = 2 Urmtorul nod analizat, preluat din coada de lucru, este 5, a doua adiacen a nodului 1 (figura 3.34(3)). Deoarece pentru acesta, nu se gsete niciun nod adiacent care s nu fi fost vizitat anterior, se trece la nodul 6, al treilea nod din succesorii nodului 1. Pentru nodul 6, se gsete un singur succesor nevizitat, nodul 8. 8 = 6 8 = 6 + 1 = 1 + 1 = 2
3 4 9 3 4 9 3 4 9

2 1 5 7 10 1

2 7 5 10 1

2 7 5 10

11

11

11

10

11

4.

5.

Arborele de acoperire BFS 6.

FIG. 3.35. PARCURGEREA BFS PAII 4-6

Dup testarea tuturor succesorilor nodului 1 (nodurile 2, 5 i 6), se trece la verificarea succesorilor nodului 2, care este primul succesor al nodului 1. Aa cum se poate observa din figura 3.35(4), nodul 3, ca prim succesor al lui 2, nu mai este conectat cu alte noduri nevizitate. Acelai lucru se ntmpl i cu nodul 4. Verificrile acestora nu completeaz coada cu niciun element nou. Al treilea succesor al nodului 2, nodul 7, devine nod curent. Pentru acesta, se gsesc nodurile 9 i 10 ca succesori nevizitai. Efectul obinut, este adugarea acestor dou noduri la coad. Odat cu adugarea, fiecare din cele dou noduri i actualizeaz informaiile legate de predecesor i de distan, n vectorii pred i dist. 9 = 10 = 7 9 = 10 = 7 + 1 = 2 + 1 = 3 Urmtorul nod din coad care se analizeaz este nodul 8 (Figura 3.35(5)). Pentru acesta se gsete o singur posibilitate de continuare, ctre nodul 11, singurul rmas nevizitat n acest moment. 11 = 8 11 = 8 + 1 = 2 + 1 = 3 Tablourile de date la sfritul explorrii sunt: viz={ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } pred={ 0, 1, 2, 2, 1, 1, 2, 6, 7, 7, 8 } dist={ 0, 1, 2, 2, 1, 1, 2, 2, 3, 3, 3 }

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Analiza semnificaiilor datelor obinute la sfritul algoritmului Vectorul viz, poate oferi informaii despre: - conexitatea grafului, dac toate valorile sunt egale cu 1. - existena unui drum ntre dou noduri dac ambele au valoarea 1. - care sunt nodurile la care se poate ajunge pornind de la nodul x0, i cte sunt acestea (valorile de 1 i numrul acestora). Vectorul pred, este vectorul care permite reconstituirea drumului de la nodul iniial la orice alt nod vizitat al grafului. i n cazul parcurgerii n lime se obine un arbore de acoperire n lime a grafului. Arborele de acoperire obinut prin parcurgerea n lime, permite obinerea drumului minim de la nodul de pornire x0 la oricare alt nod vizitat al grafului. Dac graful este conex, atunci se obin distanele minime de la nodul de pornire la oricare alt nod. Vectorul dist, conine distanele minime de la nodul de pornire la toate celelalte noduri vizitate, distana fiind reprezentat de numrul de muchii coninute n drumul de la nodul x0 la un alt nod oarecare i. 3.3.3. Algoritmul BFS Att n forma clasic, ct i n forme adaptate, BFS este unul dintre cei mai folosii algoritmi de explorare a grafurilor. Folosind semnificaiile de la 3.3.1., o posibil reprezentare n pseudocod este urmtoarea: algoritmul BFS(x0) 1: pentru i=1,n execut 2: viz[i]=dist[i]=0 sfrit 3: p=u=1 4: c[p]=x0 5: viz[x0]=1 6: pred[x0]=0 7: ct timp p<=u i u<n execut 8: pentru i=1,n execut 9: dac a[c[p]][i]=1 i viz[i]=0 atunci 10: u=u+1, c[u]=i 11: viz[i]=1 12: pred[i]=c[p] 13: dist[i]=dist[c[p]]+1 sfrit sfrit 14: p=p+1 sfrit Pentru modelarea problemelor folosind BFS, folosirea, nelegerea i prelucrarea informaiilor reinute n timpul sau la sfritul algoritmului, reprezint strategiile de baz care trebuie urmate. n prezentarea n pseudocod a algoritmului de parcurgere n lime, semnificaiile datelor n derularea acestuia sunt urmtoarele: linia 1-2: Vectorul viz este cel care asigur unicitatea explorrii nodurilor grafului. Acesta este cel care trebuie pregtit nainte de lansarea n execuie. nainte de pornirea parcurgerii, vectorul viz trebuie iniializat cu zero, cu semnificaia, niciun nod nu a fost vizitat anterior. n BFS, un rol deosebit l are i vectorul dist, cel n care se rein distanele minime fa de nodul de pornire, vector care trebuie iniializat cu zero.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Observaie: Este posibil ca n algoritmii de explorare, programatorul s doreasc s precizeze c n situaia n care nu se poate ajunge la un anumit nod, distana este infinit. ntr-o asemenea situaie vectorul dist poate fi iniializat cu infinit. Linia 3-4: n explorarea n lime, controlul nodurilor explorate i a nodului curent este deinut de coada c. Indicele care permite accesul la elementul curent al cozii este p, unde c[p] este primul element care poate fi accesat, iar indicele care controleaz sfritul cozii este u, unde c[u] este ultimul element al acesteia. La nceput, n coad nu exist dect un singur element, primul i ultimul element fiind nodul de pornire. Linia 5-6: Tot n etapa de pregtire, nainte de lansarea algoritmului, singurul nod vizitat este nodul de pornire x0, nod pentru care nu exist predecesor. Linia 7: Construirea cozii c, presupune adugarea succesiv a tuturor vecinilor nevizitai ai nodului curent. Operaiile de adugare se execut ct timp n coad exist cel puin un nod neanalizat, p<=u (nodurile neverificate nc, se gsesc ntre poziiile p i u), i nu au fost analizate toate nodurile grafului (u<n). Dac n lista c sunt memorate n elemente (toate nodurile), explorarea se va termina. Linia 8-9: Se verific toate adiacenele nodului curent, c[p]. Pentru aceasta se iau n considerare toate nodurile grafului, unde i este orice un nod al grafului (linia 8). Dintre acestea, se vor reine doar nodurile i, nevizitate i adiacente cu nodul curent. Linia 10-13: Pe msur ce nodurile grafului sunt validate de linia 8, ele se adaug la coad (linia 10) i se marcheaz ca vizitate (linia 11). Toate nodurile detectate, ca urmare a cutrii i validrii de la liniile 8-9, au acelai predecesor, nodul c[p]. Distana lor fa de nodul de pornire este cu o muchie mai mare dect distana predecesorului lor (linia 13). Linia 14: Trecerea la urmtorul element al cozii, are loc doar dup ce toate adiacenele posibilele au fost testate. n forma prezentat, algoritmul conine date, la care se poate renuna n funcie de cerinele problemei abordate. n Anexa 2 se gsete algoritmul scris n limbaj C/C++. Consideraii asupra algoritmului Explorarea grafurilor n lime, BFS, poate fi aplicat oricrui tip de grafuri. Algoritmul prezentat folosete codarea grafului ntr-o matrice de adiacen, iar complexitate algoritmului pentru aceast form de reprezentare este O(n2). Algoritmul este deosebit de des folosit, de multe ori ca o alternativ pentru DFS. Deseori programatorul este pus n situaia n care, pentru a rezolva o aceeai problem s-i pun ntrebarea: ce folosesc, BFS sau DFS?. De cele mai multe ori se apeleaz la complexitate, modalitate de codare sau pur i simplu, la algoritmul care poate fi scris mai rapid. n aceast ultim situaie, ctigtor este BFS.

3.4. Obinerea drumurilor de cost minim cu surs unic, n grafuri ponderate cu costuri pozitive. Algoritmul lui Dijkstra.
Algoritmul Dijkstra, a fost conceput de omul de tiin olandez Edsger Dijkstra n 1959. Acesta, este un algoritm de explorare n grafuri, care rezolv problema celui mai scurt drum pornind de la o surs unic, ntr-un graf cu arce cu costuri nenegative. n urma aplicrii algoritmului, se obine un arbore de acoperire coninnd drumurile de cost minim, de la vrful considerat surs, la orice alt nod al grafului. Pentru un nod surs dat, algoritmul gsete calea cu cel mai mic cost (calea cea mai scurt) ntre vrful iniial i fiecare din celelalte vrfuri ale grafului. Acest algoritm, poate fi de asemenea utilizat pentru a gsi drumul cu costul cel mai mic, de la un singur nod, la un nod destinaie fixat, prin oprirea algoritmului n momentul n care calea cea mai scurt la vrful destinaie a fost determinat.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

De exemplu, n cazul n care vrfurile grafului reprezint orae dintr-o anumit regiune, iar costul unui arc reprezint distana ntre dou orae oarecare care sunt conectate printr-un drum direct, algoritmul Dijkstra, poate fi folosit pentru a gsi cea mai scurt rut de la un ora la oricare din celelalte orae. Aflarea drumului cel mai scurt fa de o surs unic, este aplicat pe scar larg n diverse domenii ale vieii. Astzi, acesta i gsete o frecvent aplicare n cadrul protocoalelor de rutare n reea, de tipul IS-IS (determin cea mai bun modalitate de a transmite datagrame ntr-o reea) i OSPF (Open Shortest Path First, este un protocol de rutare dinamic pentru utilizarea n reele cu IP-uri). Nu de puine ori, fie n lumea virtual a internetului, fie n lumea real, utilizatorul este pus n situaia de a gsi drumul cel mai scurt pe o hart sau la un zbor, preul sau costul cel mai mic pentru o succesiune de prelucrri sau pentru construirea de diverse tipuri de reele, timpul cel mai scurt pentru transmitere de date sau informaii etc. Pentru rezolvarea acestora, o soluie la ndemn, cu rezultate bune i rapide, este oferit de algoritmul lui Dijkstra. 3.4.1. Reprezentarea datelor Fie G=(X, U) un graf orientat, : + o funcie de cost, prin care se asociaz fiecrui arc o valoare real strict pozitiv i x0 un vrf din graf. Pentru graful orientat G=(X, U), cu n vrfuri i m arce, n implementarea algoritmului lui Dijkstra se vor folosi urmtoarele date: 1. 2. nodul de pornire x0 matricea costurilor, este o matrice ptratic cu n linii i n coloane (unde n reprezint numrul de vrfuri din graf), definit astfel: , , , = , , , 0 = mulimea vrfurilor selectate S (pentru care a fost deja calculat drumul de cost minim) va fi reprezentat prin vectorul caracteristic viz cu n componente: = 4. 0 1

3.

vectorul valorilor drumului de cost minim de la x0 la i, drum care trece numai prin vrfuri selectate. = = 1,

= = 1, , = 5. vector pred, cu n componente, necesar pentru a putea reconstitui drumurile de cost minim de la vrful de start, la fiecare dintre celelalte vrfuri. = 0 = 0 ,

3.4.2. Principiul algoritmului lui Dijkstra Algoritmul lui Dijkstra, determin cte un drum de cost minim de la vrful surs x0, la fiecare dintre celelalte vrfuri ale grafului. Criteriul de minimizare este coninut de informaiile din vectorul d, care reprezint valoarea drumului de cost minim de la x0 la i. Aceste costuri la nceput sunt presupuse infinite, cu scopul de a le optimiza (minimiza) pe parcursul derulrii pailor algoritmului.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Iniial, singurul vrf pentru care drumul de cost minim este deja cunoscut, este vrful surs x0, de la care are loc declanarea algoritmului. Principiul de lucru al algoritmului este unul de tip greedy. La fiecare pas se va alege un vrf, care nu a mai fost selectat i care se afl la distan minim fa de nodul de pornire (cele pentru care drumul de cost minim este deja determinat). Dup selectarea vrfului situat la distan minim fa de x0, fie acesta y, se adaug n S toate costurile estimate ale drumurilor minime pentru vrfurile neselectate trebuie actualizate. Mai exact, se noteaz cu d[z], valoarea drumului de cost minim al vrfului neselectat z fa de vrful de pornire x0. Prin includerea vrfului y n mulimea S, este posibil s obinem un drum de cost mai mic, dac costul drumului d[z] este mai mare dect valoarea drumului de cost minim pn la vrful y (d[y]) +costul arcului (y, z), adic d[z]>d[y]+c[y][z]. n acest caz, valoarea estimat a drumului de cost minim pn la vrful z, trebuie actualizat. Pentru a putea reconstitui i drumurile de cost minim, vom reine pentru fiecare vrf y din graf (exceptnd vrful x0) vrful care l preced pe drumul de cost minim de la x0 la y. n prezentarea care urmeaz, vor fi folosite urmtoarele semnificaii:
B A 10 B

vrf nevizitat vrf al crui drum de cost minim e calculat vrf nevizitat cu cost estimat

arc graf arc de relaxare arc selectat pe drumul de cost minim

FIG. 3.36. CODURILE REPREZENTRILOR ALGORITMUL LUI DIJKSTRA

Algoritmul lui Dijkstra, opereaz prin construirea mulimii S, a vrfurilor pentru care costurile finale corespunztoare drumurilor minime fa de sursa x0, au fost deja determinate. Pentru exemplificarea pailor algoritmului, se folosesc reprezentrile din figurile 3.37 i 3.38., pentru un graf orientat cu 5 vrfuri i 9 arce. n exemplu, vrfurile sunt etichetate cu litere de la A la E. Se consider c vrful de pornire x0 este A. La nceput, valorile drumurilor de cost minim sunt infinite pentru toate vrfurile, cu excepia vrfului de pornire x0, a crui valoare a drumului de cost minim (fa de el nsui) este 0 (figura 3.37(1)). Niciun nod nu este deocamdat inclus n mulimea S, a vrfurilor pentru care drumul de cost minim este determinat. Se caut vrful a crui valoare a drumului de cost minim fa de vrful de pornire este cel mai mic, fie el y. Primul vrf care se identific, este chiar vrful de pornire, care este introdus n mulimea S. Se ncearc o relaxare a arcelor care au originea n y i care conecteaz mulimea S, cu vrfuri din afara ei. Prin relaxare se nelege mbuntirea, n sensul micorrii, a valorilor costurilor drumurilor minime ale acestor noduri. Se observ n figura 3.37(2), c pentru vrfurile B i C noua valoare minim este 10, respectiv 3, obinut din: = + = 0 + 10 = 10, care este < (valoarea anterioar) = + = 0 + 3 = 3, care este < (valoarea anterioar) Vrful A, este vizitat, iar A este predecesor pentru B i C, pn n acest moment. Dintre vrfurile nevizitate, cel mai apropiat de vrful de pornire este C (figura 3.37(3)), pentru care valoarea drumului minim este 3. Vrful C se adaug la mulimea S. Se ncearc relaxarea arcelor divergente din C. n urma acesteia, se mbuntesc estimrile costurilor drumurilor minime pentru toate cele trei vrfuri, B, D i E, vrfuri care sunt conectate cu vrful C, prin arce cu originea n C: = + = 3 + 4 = 7, care este <10 (valoarea anterioar) = + = 3 + 8 = 11, care este < (valoarea anterioar) = + = 3 + 2 = 5, care este < (valoarea anterioar).

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Pentru B, D i E, vrful C este predecesorul n acest moment.


10 0 A 3 1 C B 4 2 8 7 E S= D 9 0 A 3 10 10 1 C 3 A B C D E 0 0 10 3 B 4 2 8 7 E S={A} D 9 0 A 3 7 10 1 C 3 B 4 2 8 7 E 5 S={A,C} 11 D 9

A B C D E 0

A B C D E 0 7 3 11 5

1.

2.

3.

FIG. 3.37. EVOLUIA ALGORITMULUI DIJKSTRA SECVENELE 1-3

Dintre vrfurile nevizitate {B, D, E}, cel care are costul estimat al drumului cel mai mic, este E. Vrful E se include n mulimea S, iar apoi, se ncearc relaxarea arcelor care pleac din E. Singurul vrf succesor al lui E este D, iar costul estimat al drumului de valoare minim a acestuia nu poate fi mbuntit. = + = 5 + 9 = 14, care este > 11, nu se modific valoarea anterioar.
7 B 1 3 C 3 E 5 5 4 2 8 7 E 5 A B C 0 7 3 7 7 11 D 9 0 A 3 10 1 C 3 E 5 5 7 B 4 2 8 7 E 5 A B C 0 7 3 7 7 9 D 9 0 A 3 10 1 C 3 E 5 5 7 B 4 2 8 7 E 5 9 D 9

10 0 A

A B C 0 7 3 7

D 11 11

S={A,C,E}

D 11 11 9

S={A,C,E,B}

D 11 11 9 9

S={A,C,E,B,D}

4.

5.

6.

FIG. 3.38. EVOLUIA ALGORITMULUI DIJKSTRA SECVENELE 4-6

Mulimea S={A,C,E}, este n acest moment mulimea cu vrfurile a cror valoare a drumului de cost minim ,este deja determinat (figura3.38(4). Urmtorul vrf care nu aparine lui S i a crui valoare estimat a costului drumului fa de vrful de pornire A este cea mai mic, este B, aflat la distana 7 (figura 3.38(5). Succesorii lui B, sunt C i D. Dintre acetia numai D nu este vizitat, iar valoarea costului drumului poate s fie mbuntit pentru acesta. = + = 7 + 2 = 9, care este < 11. Vrful B se adaug n S, iar predecesorul lui e C. Algoritmul lui Dijkstra repet n principiu dou secvene: a. caut vrful care nu este validat avnd costul estimat al drumului fa de nodul iniial, cel mai mic; b. ncearc s mbunteasc valorile costurilor drumurilor succesorilor vrfului identificat anterior. Observaie: Pentru determinarea tuturor valorilor drumurilor de cost minim fa de un nod de plecare, secvenele a-b se vor executa de cel mult n-1 ori. La terminarea explorrii, se va obine arborele de acoperire din figura 3.38(6), care conine toate drumurile de cost minim din graf, drumuri de cost minim fa de vrful A.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

3.4.3. Algoritmul lui Dijkstra Folosind notaiile i semnificaiile de la 3.4.1, algoritmul care descrie modalitatea de aflare a drumurilor de cost minim de surs unic ntr-un graf cu arce cu valori nenegative este: algoritmul Dijkstra(x) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: pentru i=1,n execut viz[i]=0 d[i]= sfrit d[x0]=0 pred[x0]=0 ok=1 ct timp ok=1 execut MIN= pentru i=1, n execut dac viz[i]=0 i d[i]<MIN atunci MIN=d[i] y=i sfrit sfrit dac MIN atunci viz[y]=1 pentru z=1, n execut dac viz[z]=0 i c[y][z]<>0 i d[z]>d[y]+c[y][z]atunci d[z]=d[y]+c[y][z] pred[z]=y sfrit sfrit altfel ok=0 sfrit sfrit

Aflarea drumurilor de cost minim fa de o surs unic n grafuri ponderate, este n mod cert o abordare des ntlnit n rezolvarea problemelor n care modelarea tranziiilor presupune existena unor costuri. Dac se folosete algoritmul prezentat mai sus, se poate obine drumul de cost minim de la o surs unic la orice vrf al grafului, doar dac prin definiia problemei nu este permis existena arcelor cu valoare negativ n graf. n derularea algoritmului lui Dijkstra, sensurile, semnificaiile liniilor de program sunt urmtoarele: linia 1-3: Datele care trebuie s urmreasc i s dein controlul n timpul execuiei algoritmului sunt vectorul viz, al vrfurilor grafului pentru care drumul de cost minim a fost calculat, i vectorul d, care reine aceste costuri minime. Pregtirea lansrii n execuie a algoritmului, trebuie s porneasc de la afirmaia, pentru niciun vrf nu a fost calculat drumul de cost minim, ceea ce nseamn vrfuri nevizitate anterior (linia 2) i drumuri de cost infinit (linia 3). Trebuie precizat c un drum de cost infinit este echivalent cu afirmaia: nu se poate ajunge la acel vrf.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Linia 4-5:

Vrful de pornire x0 este singurul pentru care costul drumului minim este cunoscut i care nu are predecesori. Linia 6-7: Variabila ok controleaz repetrile algoritmului. Atta timp ct se detecteaz un vrf nevizitat cu drum de cost minim, algoritmul continu (valoarea 1 pentru ok), dar cnd acest vrf nu se mai poate obine, se termin explorarea. Pentru pornirea algoritmului ok=1. Linia 8-12: Identificarea celui mai mic cost, dintre costurile drumurilor vrfurilor nevalidate, se va face cu ajutorul variabilei MIN. Fiind vorba de o secven de minim, se presupune aceast distan infinit. Orice cost valid al unui vrf nevizitat poate mbunti valoare presupus (linia 8). Se testeaz toate vrfurile grafului (linia 9), ncercndu-se identificarea vrf care are costul minim i nu a fost validat anterior (linia 10). Vrful cu costul drumului de valoare minim, este controlat de identificatorul y (linia 12). Linia 13: A doua secven important n algoritmul lui Dijkstra este relaxarea. Aceasta are loc doar dac s-a identificat o distan minim (valoarea MIN este finit). Linia 14-18: Vrful de cost minim y este validat (linia 14) i se ncearc relaxarea. Secvena de relaxare, presupune ncercarea de mbuntire a costurilor pentru vrfurile adiacente vrfului y (identificat anterior ca vrf de cost minim). Pentru aceasta, trebuie testate toate vrfurile grafului (linia 15), urmrindu-se s se identifice acelea care nu sunt validate i pentru care se poate obine un cost mai mic, prin adugarea la costul drumului minim corespunztor vrfului y, a costului arcului care le unete (linia 16). Identificarea acestor vrfuri, presupune actualizarea costurilor (linia 17). Reinerea modalitii de relaxare (cu ajutorul crui arc s-a obinut o valoare mbuntit a costului) n vectorul de predecesori pred (linia 18), este important n etapa ulterioar de prelucrare a informaiilor dac se dorete refacerea drumului de cost minim. Linia 19-20: Trebuie remarcat c n situaia n care nu se mai identific un nou vrf de cost minim (liniile 8-12), explorarea grafului nceteaz (variabila de control ok=0). Scrierea n limbaj C/C++ a algoritmului lui Dijkstra se gsete n Anexa 3. Consideraii asupra algoritmului Identificarea drumurilor de cost minim fa de o surs unic cu ajutorul algoritmului lui Dijkstra, poate fi aplicat oricrui tip de grafuri, orientate sau nu, ponderate sau nu. Dac se folosete la grafuri neponderate (costul arcelor este 1), algoritmul este echivalent ca modalitate de explorare cu BFS. n scrierea i n explicarea algoritmului lui Dijkstra, trebuie strict urmrite cele dou secvene: determinarea vrfului de cost minim i relaxarea vrfurilor adiacente cu acesta. Algoritmul prezentat, folosete codarea costurilor arcelor grafului ntr-o matrice a costurilor, iar complexitate algoritmului pentru aceast form de reprezentare este O(n2).

3.5. Obinerea drumurilor de cost minim cu surs unic, n grafuri ponderate, fr circuite de valoare negativ. Algoritmul Bellman-Ford.
Algoritmul Bellman-Ford, se aplic ca i algoritmul lui Dijkstra, grafurilor orientate ponderate, dar, care pot avea arce de valoare negativ, rezolvnd ca i algoritmul lui Dijkstra problema drumurilor de cost minim fa de o surs dat. Important: Algoritmul se poate aplica i n situaia existenei circuitelor de valoare negativ, detectnd prezena acestora. Numele algoritmului, este dat dup numele celor are au contribuit la dezvoltarea i implementarea lui, matematicienii Richard Bellman i Lester Ford Jr. Algoritmul Bellman-Ford, permite aflarea drumului elementar de valoare minim de la

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

o surs unic, n situaia n care nu exist circuite de valoare negativ, iar dac acestea exist, detecteaz prezena acestora. Costurile negative ale arcelor, sunt o prezen frecvent n aplicaiile din lumea real. Tranziia dintre dou evenimente, poate s se fac cu un ctig sau cu o pierdere, diferenele dintre dou entiti pot s fie pozitive sau negative n ceea ce privesc evoluiile fenomenelor, bilanurilor sau a diverselor abordri statistice. Toate acestea, mpreun cu necesitatea de a minimiza pierderile sau de a maximiza ctigurile ntr-o anumit tranziie ntre dou evenimente, au fcut ca algoritmul Bellman-Ford s fie util i de prezent n numeroase implementri informatice. 3.5.1. Reprezentarea datelor Fie G=(X, U) un graf orientat, : o funcie de cost, prin care se asociaz fiecrui arc o valoare real, i x0 un vrf oarecare din graf. Pentru graful orientat G=(X, U), cu n vrfuri i m arce, n implementarea algoritmului lui Bellman-Ford se vor folosi urmtoarele date: 1. vrful de pornire x0 1. lista arcelor, reprezentat prin trei vectori a, b i c de dimensiune m, unde fiecare arc i este cunoscut prin extremitatea iniial a arcului (a[i]), extremitatea final (b[i]) i costul arcului (a[i],b[i]) reprezentat de c[i]. 2. vectorul valorilor drumurilor de cost minim de la x0 la i, drum care trece numai prin vrfuri selectate. = = 1, 3. vector pred, cu n componente, necesar pentru a putea reconstitui drumurile de cost minim de la vrful de start la fiecare dintre celelalte vrfuri. 0 = 0 = ,

3.5.2. Principiul algoritmului Bellman-Ford Algoritmul Bellman-Ford, este n principiu foarte asemntor cu algoritmul lui Dijkstra. Deosebirea const n faptul c nu se mai selecteaz vrful cu valoarea costului drumului fa de nodul iniial minim, dup care se face relaxarea, ci, relaxarea se aplic tuturor vrfurilor grafului. Relaxarea se va aplica de cel mult n-1 ori, prin verificarea efectului produs de toate arcele asupra costurilor minime estimate. Se urmrete n acest mod ca la fiecare testare complet a arcelor, cel puin un vrf s-i optimizeze costul. Dac la pasul n, nc mai exist drum al crui cost se optimizeaz, acest lucru se datoreaz existenei circuitelor negative. Se poate concluziona c algoritmul se termin fie la pasul n, cnd nc relaxarea mai are loc, sau la un pas anterior (<n), cnd niciunul din vrfuri nu-i mai mbuntete costul. La nceput, se presupun costurile drumurilor minime ca fiind infinite. Singurul vrf cu drum de cost minim cunoscut, e vrful surs x0, cu drum de cost zero. Se iau pe rnd toate arcele. La un moment dat, se are n vedere arcul k, cu extremitatea iniial i, unde i=a[k], extremitatea final j, unde j=b[k] i costul c[k], unde criteriul de minimizare este: > + sau > + . Dac vechea valoare a costului drumului corespunztor vrfului j, este mai mare dect valoarea costului drumului corespunztor vrfului i, la care se adaug costul arcului dintre cele

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

dou vrfuri, aceasta trebuie nlocuit cu costul drumului de valoare mai mic. Pentru a putea reconstitui i drumurile de cost minim, vom reine pentru fiecare vrf j din graf (exceptnd vrful x0), vrful care l preced n momentul n care costul se minimizeaz. n prezentarea care urmeaz, vor fi folosite urmtoarele semnificaii:
10 10 -1
8

cost estimat n acest moment cost estimat anterior costul arcului eticheta (numrul) arcului

arc graf arc de relaxare arc fr relaxare arc selectat pe drumul de cost minim

FIG. 3.39. CODURILE REPREZENTRILOR ALGORITMUL BELLMAN-FORD

n explicare principiul de lucru al algoritmului Bellman-Ford, se reiau n principiu dou secvene: a. selectarea succesiv a arcelor grafului; b. relaxarea extremitii finale a arcului. Pentru exemplificarea succesiunii pailor n algoritmul Bellman-Ford, s-au folosit reprezentrile grafice din figurile 3.40 i 3.41.
B
7 1

0 -1 A 4

2 2

E
8

0 -1 A 4

4 7

-1 B

2 2

E
8

1
2

1
2

0 -1 A 4

4 7

-1 B

2 2

E
8

0 -1 A 4

4 7

-1 B

2 2

E
8

-3 D E

-3 D D E

1
2

0 -1 A 4

4 7

-1 B

2 2

E
8

1
2

1
2

-3

-3

-3

C 5 A B C D 0

C A B 0 0 -1

5 6

5 6

5 C

C D 5 4 A B C D E 0 -1 0 -1 4

C D 5 2 A B C D E 0 -1 0 -1 2

6 C D 5 2 A B C D E 0 -1 2

1.

2.

3.

4.

5.

FIG. 3.40. EVOLUIA ALGORITMULUI BELLMAN-FORD SECVENELE 1-5

n figura 3.40(1), este prezentat situaia de la declanarea algoritmului, n care vrful A este vrful de pornire, avnd costul drumului minim zero, i toate celelalte avnd costurile drumurilor minime infinite. Prezentarea primei parcurgeri a arcelor grafului ncepe cu figura 3.40(2). Se selecteaz pe rnd arcele 1, 2 i 3 care nu produc nicio relaxare. Arcul al 4-lea, (A,B), determin relaxarea vrfului B, care anterior avea drumul minim de cost infinit: = + , = 0 + 1 = 1 = Arcul 5, produce i el relaxarea vrfului C (figura 3.40(3)), i el avnd anterior, costul drumului minim infinit: = + , = 0 + 4 = 4 = La prima iteraie, datorit parcurgerii pentru prima dat a arcelor grafului, arcul 7 determin relaxarea pentru a doua oar a vrfului C (figura 3.40(4): = + , = 1 + 3 = 2 = La terminarea primei etape de relaxare (figura 3.40(5)), sunt estimate costurile a 3 drumuri minime, corespunztoare nodurilor A, B i C.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

n continuare, se ncepe a doua parcurgere a arcelor grafului, urmrindu-se efectul produs de acestea asupra costurilor.
-1 B
7

0 -1 A 4

2 2

1 E
8

0 -1 A 4

4 7

-1 B

2 2

1 E
8

1
2

0 -1 A 4

4 7

-1 B

2 2

1 E
8

1
2

0 -1 A 4

4 7

-1 B

2 2

1 E
8

1
2

0 -1 A 4

4 7

-1 B

2 2

1 E
8

1
2

1
2

-3

-3 D 1 E 1 1

-3 D -2 E 1 1

-3 D -2 E 1

-3 D -2 E 1

5 6

C D 5 2 A B C D E 0 -1 2 0 -1 2 1

C 5 2 A B C D 0 -1 2 0 -1 2 1

6 C 5 2 A B C D 0 -1 2 1 0 -1 2 -2

6 C 5 2 A B C D 0 -1 2 -2

6 C 5 2 A B C D 0 -1 2 -2

6.

7.

8.

9.

10.

FIG. 3.41. EVOLUIA ALGORITMULUI BELLMAN-FORD SECVENELE 6-10

La a doua iteraie, arcul 1 determin reevaluarea costului drumului corespunztor vrfului E, anterior infinit, ca n figura 3.41(6): = + , = 1 + 2 = 1 = Arcul 2, nu determin nicio relaxare, n schimb arcul 3, permite obinerea unei drum de cost minim pentru vrful D, anterior infinit (figura 3.41(7)): = + , = 1 + 2 = 1 = n acest moment, toate vrfurile grafului au o aproximare a drumurilor de cost minim. Arcele 4, 5, 6, 7, nu mai produc nicio modificare a estimrilor costurilor drumurilor minime. Arcul 8, (E,D), determin o nou relaxare a vrfului D (figura 3.41(8)) i sfritul celei de-a doua iteraii: = + , = 1 + 3 = 2 = Figura 3.41(9) reprezint a treia ncercare de a optimiza costurile drumurilor. Se observ c niciunul dintre costurile drumurilor nu se mai optimizeaz. n concluzie, valorile reinute n acest moment, sunt cele mai mici. Acesta este momentul la care n mod cert sunt reinute costurile minime ale drumurilor fa de vrful de pornire A. Valorile minime ale costurilor drumurilor fa de vrful de pornire A, respectiv a vrfurilor care formeaz aceste drumuri sunt: d[A]=0, d[B]=-1, d[C]=2, d[D]=-2, d[E]=1, A nod iniial cu drumul de cost minim {A, B} cu drumul de cost minim {A,B,C} cu drumul de cost minim {A,B,E,D} cu drumul de cost minim {A,B,E}.

Arborele de acoperire, care permite obinerea tuturor drumurilor de cost minim fa de vrful A, este reprezentat n figura 3.41(10). Din iteraiile descrise anterior, se poate concluziona c reevaluarea efectului produs de toate arcele grafului asupra drumurilor de cost minim, poate fi folosit att n cazul grafurilor care conin numai arce de valoare pozitiv, ct i n special grafurilor care conin arce de valoare negativ. Costul negativ al unui arc poate mbunti, n sensul reducerii, valoarea costului drumului pentru un anumit vrf fa de vrful iniial.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

3.5.3. Algoritmul Bellman-Ford Algoritmul B_F(xo) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: pentru i=1,n execut d[i]= sfrit d[x0]=0 pred[x0]=0 ct=0 repet ok=0 ct=ct+1 pentru k =1, m execut i=a[k] j=b[k] dac d[i] i d[j]>d[i]+c[k] atunci d[j]=d[i]+c[k] pred[j]=i ok=1 sfrit sfrit pn cnd ok=0 sau ct=n dac ok=1 atunci Scrie Graful conine circuite de valoare negativ sfrit

Existena arcelor de valoare negativ, poate ridica probleme n depistarea drumurilor de cost minim de la o surs cunoscut, prin posibilitatea existenei circuitelor de valoare negativ. Valorile negative ale circuitelor, poate determina mbuntirea (reducerea) la infinit a costurilor, ceea ce face ca algoritmul s fie nedefinit. Abordarea din algoritmul Bellman-Ford, permite determinarea drumurilor de cost minim i detecteaz existena circuitelor de valoare negativ. n algoritmul Bellman-Ford, sensurile, semnificaiile liniilor de program sunt urmtoarele: linia 1-2: Linia 3-4: Linia 5: Memorarea valorilor drumurilor de cost minim de la un vrf de pornire la oricare vrf al grafului se face cu ajutorul vectorului d, costuri care la nceput se presupun a fi infinite, cu sensul nu exist drum de cost minim ctre acel vrf. Vrful de pornire este xo. Acesta are costul drumului minim 0 i nu are predecesori. Algoritmul urmrete ca n cadrul unei repetri s se evalueze efectul produs de fiecare arc asupra drumurilor de cost minim. Deoarece n cadrul fiecrei repetri, cel puin un vrf i modific starea, optimizndu-i valoarea costului, numrul maxim posibil de repetri este n-1. Dac i la iteraia cu numrul n, mai au loc actualizri ale costurilor drumurilor n graf, acest lucru se datoreaz existenei circuitelor de valoare negativ. Pentru numrarea repetrilor se folosete variabila cont. Este posibil, ca valorile optime s fie deja obinute, iar acest lucru se controleaz cu variabila ok. Se presupune c valorile drumurilor de cost minim sunt corecte (linia 7). Pentru testarea presupunerii, se ncepe o nou verificare. Identificarea variantelor de optimizare, presupune testarea tuturor arcelor grafului. n acest context, k reprezint indicele arcului din lista de adiacen, al crui efect este testat n acest moment.

Linia 7-8: Linia 9:

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

linia 10-11: Fiecare arc k, este identificat prin originea lui, a[k], extremitatea final, b[k]i costul arcului, c[k]. Pentru a simplifica scrierea, s-au identificat extremitile arcului cu i extremitatea iniial i cu j cea final (linia 10-11). Linia 12-15: Se observ c relaxarea vrfului j, se poate produce doar n situaia n care extremitatea iniial i, are un cost estimat ( ) i valoarea nou calculat a costului vrfului j, este mai mic dect cea anterior estimat (linia 12). Actualizarea costului (linia 13), determin i reinerea modalitii de avansare pe drumul de cost minim (linia 14), prin memorarea valorii vrfului care a determinat optimizarea. Linia 16: Apariia unei actualizri, va determina reluarea cel puin nc o dat a secvenelor algoritmului (liniile 7-15), dar nu mai mult de n ori. Explorarea grafului prin selectarea repetat a arcelor sale, se poate ncheia n momentul n care niciun arc nu mai determin vreun efect de optimizare, sau, cnd numrul de repetri este egal cu numrul de vrfuri. Linia 17-18: Algoritmul se poate termina cu o secven de modificare a costurilor minime, dar numai dac aceasta se produce la repetarea cu numrul n. n acest context, se semnalizeaz prezena circuitelor negative. n toate celelalte situaii, algoritmul se va termina datorit faptului c la un moment dat, costurile nu mai pot fi minimizate, pentru niciunul dintre vrfurile grafului. Acesta este momentul cnd toate valorile drumurilor de cost minim sunt cunoscute. n Anexa 4 se gsete reprezentarea n limbaj de programare a algoritmului Bellman-Ford. Consideraii asupra algoritmului Algoritmul Bellman-Ford, are o structur asemntoare cu algoritmul lui Dijkstra, determinnd drumurile de cost minim ntr-un graf. Prezena arcelor negative, este cea care determin ncercarea relaxrii pentru ntregul graf de mai multe ori. Repetarea relaxrilor, determin cu precizie i acuratee propagarea calculului drumului de cost minim, ctre vrfurile grafului. Algoritmul prezentat folosete codarea grafului prin lista costurilor arcelor, iar complexitate algoritmului pentru aceast form de reprezentare este O(n m).

3.6. Obinerea drumurilor de cost minim dintre oricare dou vrfuri n grafuri ponderate, fr arce de valoare negativ. Algoritmul Roy-Floyd.
Algoritmul Roy-Floyd, este cunoscut n diferite variante ca algoritmul Floyd, algoritmul Floyd-Warshall, algoritmul Roy-Warshall, sau algoritmul WFI. Acesta este un algoritm pentru determinarea i gsirea drumului de cost minim, ntre fiecare pereche de noduri dintr-un graf ponderat. Sunt deosebit de dese situaiile, n care este bine de tiut sau de avut la dispoziie, cel mai redus cost al drumurilor ntre toate perechile de vrfuri dintr-un graf. Un astfel de exemplu, este tabelul care apare pe foarte multe din hrile utilizate la geografie sau n agendele personale, unde sunt prezentate distanele rutiere i aeriene dintre cele mai importante localiti. Acest tip de calcul, este aproape invariabil necesar, n toate problemele urbane. Sistemul de servicii legat de localizarea instalaiilor urbane, de distribuie sau livrri de produse presupune cunoaterea i prelucrarea informaiilor legate de distanele sau costurile minime, pentru drumurile dintre oricare dou entiti ale sistemului. Prin urmare, este important de a avea la dispoziie o metod eficient de obinere a tuturor drumurilor de cost minim. Algoritmul Floyd este n esen echivalent cu algoritmul de nchidere tranzitiv, descoperit independent de Bernard Roy (1959), Robert Floyd (1962) i Stephen Warshall (1962), de aici explicaia asocierii dintre cei trei autori. Algoritmul Roy-Floyd determin costul minim al drumului dintre oricare dou vrfuri x, y ale unui graf, precum i un astfel de drum.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Iniial se pornete de la matricea costurilor C (definit n reprezentarea informaiilor), care va fi transformat n matricea drumurilor de cost minim, astfel: se consider un vrf k (k=1,n) i pentru fiecare k, se compar costul drumului, din acel moment, dintre i i j (i,j=1,n), cu costul posibil al drumului obinut prin intermediul vrfului k. Aceast estimare a costului se obine efectund suma costurilor drumului (i,k) i a drumului (k,j). n cazul n care costul drumului (i,j) ce trece prin k, este mai mic dect costul drumului evaluat n acest moment, nseamn c s-a gsit un nou drum, de cost mai mic, ntre vrfurile i i j, drum care trece prin k. n aceast situaie, costul drumului de la i la j, va fi obinut prin nsumarea costului drumului de la i la k, cu costul drumului de la k la j. Odat cu actualizarea valorii costului drumului de la i la j, se va schimba i predecesorul nodului j n drumul de la i la j. Valoarea pred[i][j] va fi pred[k][j] (vrful j are predecesorul preluat de la drumul prin vrful intermediar k). Valoarea reactualizat n vectorul pred, va putea fi folosit la sfritul algoritmului, pentru a putea reconstitui drumul de cost minim. Dup finalizarea algoritmului de mai sus, costul minim al drumului (i,j) este reinut n C[i][j], iar pentru a reconstitui acest drum se folosete matricea de predecesori. 3.6.1. Reprezentarea datelor Fie G=(X, U) un graf orientat, : o funcie de cost, prin care se asociaz fiecrui arc o valoare real. Pentru graful orientat G=(X, U), cu n vrfuri i m arce, n implementarea algoritmului lui Roy-Floyd se vor folosi urmtoarele date: 1. matricea costurilor este o matrice ptratic cu n linii i n coloane (unde n reprezint numrul de vrfuri din graf), definit astfel: = 0 , , , , , , =

La terminarea algoritmului, matricea costurilor va deveni matricea drumurilor de cost minim dintre oricare dou vrfuri. = 0 2. =

matricea predecesorilor, cu nn componente, necesar pentru a putea reconstitui drumurile de cost minim de la vrful de start la fiecare dintre celelalte vrfuri. = 0 predecesorul lui j n drumul de cost minim de la i la j

3.6.2. Principiul algoritmului Roy-Floyd Ideea de baz a algoritmului, este derivat, din situaia n care, dac costul drumului dintre dou vrfuri este cunoscut, i exist un al treilea vrf ctre care costurile drumurilor sunt cunoscute, este posibil s se obin un drum de cost mai mic prin intermediul acestuia. Dup cum se observ i n figura 3.42, regula de minimizare este aceea a punctului intermediar, k, prin mijlocirea cruia se poate obine un drum de cost mai mic ntre dou entiti date. Pentru aceasta, trebuie generate toate perechile de vrfuri i, j care l au ca intermediar pe vrful k. Observaie: Algoritmul fixeaz vrful intermediar, care ar putea conduce la o soluie mai bun, i abia dup aceea genereaz toate perechile de vrfuri despre care se discut. Se spune c ordinea de generare este: k, i i j.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR d[i][k] i d[i][j] d[k][j] j i d[i][j] d[i][k] d[k][j] j

a. d[i][j]<d[i][k]+d[k][j]

b. d[i][j]>d[i][k]+d[k][j]

FIG. 3.42. DRUM MINIM ROY-FLOYD

n fiecare moment cnd costul drumului prin intermediarul k se optimizeaz, predecesorul trebuie s se schimbe. 3.6.3. Algoritmul Roy-Floyd algoritmul R_F 1: 2: 3: 4: pentru i=1,n execut pentru j=1,n execut dac c[i][j] i ij atunci pred[i][j]=i sfrit sfrit sfrit pentru k =1, n execut pentru i =1, n execut pentru j =1, n execut dac c[i][k] i c[k][j] atunci dac c[i][j]> c[i][k]+c[k][j] atunci c[i][j]= c[i][k]+c[k][j] pred[i][j]= pred[k][j] sfrit sfrit sfrit sfrit sfrit

5: 6: 7: 8: 9: 10: 11:

Matricea c, este elementul esenial n desfurarea algoritmului Roy-Floyd. Acesta trebuie s porneasc de la precondiia ca matricea c, cea cu ajutorul creia se vor calcula costurile minime, trebuie s aib valoarea infinit ntre vrfurile care nu sunt conectate prin arce, valoarea egal cu arcul acolo unde vrfurile sunt legate printr-un arc, respectiv zero la conexiunea unui vrf cu el nsui (bucl). Ipoteza de lucru a algoritmului este identic cu cea de la algoritmul Bellman-Ford, lipsa circuitelor de valoare negativ. Semnificaiile liniilor din algoritmul Roy-Floyd sunt urmtoarele: linia 1-4: Linia 5-7: Pentru memorarea tuturor drumurilor de cost minim matricea de predecesori conine pentru fiecare arc de la i la j, predecesorul lui j n drumul de cost minim pornind de la i, este chiar i (extremitatea iniial a arcului). n algoritm, se urmrete generarea tuturor variantelor de a verifica, dac printr-un vrf intermediar oarecare k, nu se poate gsi un drum cu cost mai mic ntre alte dou vrfuri i i j, ctre care i ntre care se cunosc costurile. Aceasta reprezint secvena esenial a algoritmului.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Linia 8-9:

Dintre toate tripletele de vrfuri generate, se iau n considerare numai acele perechi (i,k) i (k,j), ntre care exist estimri ale costurilor drumurilor pn n acest moment, i care pot oferi o apreciere mai bun pentru distana dintre vrfurile i i j prin intermediul vrfului k. linia 10-11: Obinerea unei estimri mai bune pentru drumul de cost minim dintre vrfurile i i j, determin actualizarea costului cu noua valoare (linia 10), i, foarte important, n drumul de cost minim dintre i i j, pentru a ajunge la vrful final j, nu l mai are ca predecesor pe i, ci va avea acelai predecesor ca i varianta de drum de a ajunge n j pe drumul mai scurt, prin k (linia 11). Anexa 5, conine codul surs n limbaj C/C++, a algoritmului lui Roy-Floyd. Consideraii asupra algoritmului Algoritmul Roy-Floyd ofer cea mai simpl variant de scriere a unui algoritm de aflare a drumului de cost minim. Trebuie menionat c algoritmul care calculeaz valorile costurilor minime pentru drumurile dintre oricare dou vrfuri, construiete o pdure de arbori de acoperire, cte unul pentru fiecare vrf n parte. Algoritmul prezentat folosete codarea grafului prin matricea costurilor minime ale drumurilor dintre oricare dou puncte. Complexitate algoritmului Roy-Floyd este O(n3).

3.7. Arborele parial de cost minim. Algoritmul lui Prim.


Un arbore este definit ca fiind un graf neorientat, conex i aciclic, sau mai simplu, un graf n care oricare dou noduri sunt conectate prin exact un drum. n plus, graful la care se refer abordarea lui Prim, este un graf ponderat, cu costuri asociate fiecrei muchii. Arborele de acoperire, aa cum s-a discutat la toi algoritmii discutai pn acum, reprezint un graf parial al grafului iniial. Arborele parial minim, este un arbore de acoperire, provenit dintr-un graf neorientat ponderat, la care suma costurilor muchiilor selectate este cea mai mic posibil. De exemplu, dac este necesar realizarea unui sistem de distribuire a utilitilor (ap, curent etc.), fiind cunoscute distanele i costurile necesare pentru a realiza conectarea dintre diveri beneficiari, se pune problema obinerii unui sistem de distribuie, astfel nct acesta s poat s rezolve cerinele tuturor. Singura problem care se pune, este rezolvarea situaiei n condiiile n care se dorete s se obin un cost total minim. Abordarea problemei poate s fie divers, att din punct de vedere al entitilor care vor fi considerate ca fiind importante prin criteriul de selecie (nodurile sau muchiile) sau a strategiilor alese n tratarea acestora. Un lucru important de precizat, este faptul c soluia este unic din punct de vedere al valorii costului total obinut, minimul posibil, dar nu este unic n ceea ce privete elementele care formeaz arborele, muchiile selectate. O variant de rezolvare a problemei, este cea care are n centrul criteriilor de dezvoltare a problemei n fiecare moment, un nod. Strategia de abordare este aceea de a identifica un alt nod, cel mai apropiat, sau, pentru a crui atingere se folosete o muchie de cost minim. Din punct de vedere al exemplului dat anterior, lucrarea care va fi executat prima dat, este aceea care presupune costul cel mai mic i se conecteaz la reeaua deja existent. O asemenea problem a fost formulat pentru prima dat de Otakar Boruvka n 1926, odat cu electrificarea Cehiei i cu necesitatea de acoperire a Moraviei cu cabluri de alimentare. n 1930 Vojtch Jarnk a publicat un al doilea algoritm, redescoperit 25 de ani mai trziu de ctre Robert Prim i n 1959 de Edsger Dijkstra. De aceea algoritmul mai este cunoscut i DJP, Jarnik, Prim-Jarnik sau simplu Prim.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

3.7.1. Reprezentarea datelor Fie G=(X, U) un graf neorientat, : o funcie de cost, prin care se asociaz fiecrei muchii o valoare real i x0 un nod din graf. Pentru graful neorientat G=(X, U), cu n noduri i m muchii, n implementarea algoritmului lui Prim se folosesc urmtoarele date: 1. lista muchiilor, reprezentat prin trei vectori a, b i c de dimensiune m, unde fiecare muchie i este cunoscut prin cele dou extremiti, a[i] i b[i], i costul muchiei i, reprezentat de c[i]. 2. mulimea nodurilor selectate S (care au fost deja incluse n arborele parial minim) va fi reprezentat prin vectorul caracteristic viz cu n componente: 0 = 1 3. vector pred, cu n elemente, necesar pentru a putea reconstitui drumurile n arborele de cost minim de la nodul de start la fiecare dintre celelalte noduri. 0 = 0 = , 4. variabila cost, care reprezint n fiecare moment, costul arborelui parial minim obinut n derularea algoritmului. 5. vectorul sol, cu cel mult n-1 elemente, reprezentnd muchiile selectate din graf, muchii care definesc arborele parial minim. = | 1, , . 3.7.2. Principiul algoritmului lui Prim Pentru derularea algoritmului se pornete de la lista muchiilor, n prealabil ordonat dup valoarea costurilor. Vectorul viz este iniial egal cu zero, niciun nod nu este inclus n arborele parial minim. Algoritmul pornete de la un nod oarecare x0, singurul care e vizitat. Algoritmul lui Prim, acioneaz asupra nodurilor grafului, alegnd la fiecare moment muchia de valoare minim, care are o extremitate inclus deja n arborele parial minim, iar cealalt extremitate, nu. n acest fel, cel mai apropiat nod de oricare dintre nodurile deja vizitate este inclus n mulimea S, a nodurilor ce constituie arborele pn n acest moment. n principal, n desfurarea algoritmului se ntlnesc dou secvene: 1. caut muchia cu costul cel mai mic, care are unul din nodurile ce o definesc inclus n arbore, iar cellalt nu. Deoarece muchiile sunt ordonate, prima muchie ce ndeplinete criteriul (1) va fi luat n considerare. 2. completeaz arborele cu muchia gsit.
C A A

nod nevizitat nod vizitat (inclus n arbore)

nodul cel mai apropiat -1 costul muchiei

muchie graf muchia de cost minim elaxare posibil n selecie muchie muchie selectat n componena APM de cost minim

FIG. 3.43. CODURILE REPREZENTRILOR ALGORITMUL LUI PRIM

Pentru exemplificarea pailor derulai n cadrul algoritmului lui Prim, s-a folosit un graf cu 7 noduri i 12 muchii ponderate, cu semnificaiile cele din figura 3.43. S-a considerat nodul A nod de pornire al algoritmului, care a fost inclus n mulimea nodurilor vizitate, S (figura 3.44(1)). Se observ c pornind de la nodul A, exist 3 muchii care au o extremitate vizitat i cealalt nevizitat i anume (A,B), (A,C) i (A,D). Se alege muchia de valoare minim (A,B), de

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

cost 1 (de unde pred[B]=A), determinnd ca subarborele din acest moment, s includ nodurile A i B, iar costul total s fie 1, egal cu al singurei muchii selectate (figura 3.44(2)).
C 1 3 D 3 B 8 4 G S={A} cost=0 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G S={A,B} cost=1 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G 4 2 1 E 2 F 5

6 A

S={A,B,D} cost=4

S={A,B,D,C} cost=5

1.

2.

3.

4.

FIG. 3.44. EVOLUIA ALGORITMULUI LUI PRIM SECVENELE 1-4

Nodul care presupune folosirea muchiei cu costul cel mai mic i care unete mulimea S={A,B}, de celelalte noduri ale grafului este (A,D), de cost 3. Se observ c n aceast situaie, s-ar fi putut alege muchia (B,D) n locul muchiei (A,D), efectul fiind acelai, costul total 4 (figura 3.44(3)). Datorit acestui fapt se poate afirma nc o dat, c soluia n cazul arborelui parial minim este unic din punct de vedere al costului total obinut, dar nu este unic n ceea ce privete muchiile care formeaz arborele. n urma alegerii muchiei (A,D), pred[D]=A. n figura 3.44(4), se poate observa c exist 5 posibiliti de a include n mulimea S un nou nod, iar cea mai convenabil este cea oferit de muchia (D,C) de valoare 1, cea mai mic dintre ele. n urma selectrii acestei muchii i includerea costului ei n costul total al arborelui, se obine costul total 5 i pred[C]=D.
6 A 1 3 D 3 B 8 4 G 4 2 1 E 1 2 F B 3 8 C 5 A 6 1 3 D 4 G 4 2 1 E 1 2 F B 3 8 C 5 A 6 1 3 D 4 G 4 2 1 E 2 F 1 3 B 8 C 5 A 6 1 3 D 4 G 4 2 1 E 2 F C 5

S={A,B,D,C,E} cost=9

S={A,B,D,C,E,F} cost=11

S={A,B,D,C,E,F,G} cost=12

Arbore parial minim cost=12

5.

6.

7.

8.

FIG. 3.45. EVOLUIA ALGORITMULUI LUI PRIM SECVENELE 5-8

Urmtorul nod adugat la S este nodul E (pred[E]=D). i n aceast situaie, se observ c nodul G este echivalent cu nodul E din punct de vedere al costului, ambele definind muchii de cost 4, (D,E) i (D,G). Singura justificare n alegerea nodului E n detrimentul nodului G, este aceea c s-a fcut o alegere lexicografic (figura 3.45(5)). La urmtorul pas se observ din nou dou noduri echivalente din punct de vedere al costului, nodurile F i G, trecerea la acestea presupunnd costul 2. Se alege nodul F, unde pred[F]=E (figura 3.45(6)). n acest moment costul total al arborelui este egal cu 11. Iteraia cu numrul n-1, ultima n construirea arborelui parial de cost minim, selecteaz muchia (F,G) de cost 1, cea care l gsete pe G ca fiind cel mai apropiat nod nevizitat, cu pred[G]=F (figura 3.45(7)). n acest moment, arborele este complet cunoscut, att prin valoarea minim obinut pentru costul total al muchiilor selectate, prin muchiile selectate (vectorul sol) i prin elementele ce definesc arborele (vectorul pred) (figura 3.45(8)).

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Din cele prezentate, se observ c identificarea nodului cel mai apropiat de elementele deja incluse n arborele parial minim, poate isca discuii, n situaia n care se identific situaii echivalente (muchii de cost identic sau noduri care implic acelai cost). Ordonarea muchiilor permite evitarea oricror ambiguiti, deoarece primul nod identificat, cel corespunztor primei muchii care respect principiul, un nod vizitat cellalt nevizitat, este n mod sigur cel care cost cel mai puin. 3.7.3. Algoritmul lui Prim Folosind notaiile i semnificaiile de la 3.7.1, algoritmul care descrie modalitatea de obinere a arborelui parial de cost minim, folosind algoritmul lui Prim este: algoritmul Prim(xo) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: ordonarea vectorilor a,b i c n funcie de valorile din c pentru i=1,n execut viz[i]=0 sfrit pred[x0]=0 viz[x0]=1 cost=0 pentru k=1, n-1 execut ok=0 i=1 ct timp ok=0 execut x=a[i] y=b[i] dac viz[x]+viz[y]=1 atunci ok=1 altfel i=i+1 sfrit sfrit cost=cost+c[i] sol[k]=i dac viz[x]=0 atunci pred[x]=y altfel pred[y]=x sfrit viz[x]=viz[y]=1 sfrit Semnificaiile liniilor n algoritmul lui Prim sunt urmtoarele: linia 1: Pentru a evita cutarea repetat n list a muchiei de cost minim n ntreaga list, aceasta se ordoneaz cresctor, n funcie de cost. n acest fel identificarea muchiei de cost minim este mult mai simpl, fiind prima care ndeplinete condiiile algoritmului. Aceast linie, trebuie substituit cu un algoritm de sortare cunoscut. Deoarece algoritmul lui Prim, urmrete includerea pas cu pas, a cte unui nod n arborele parial minim, se folosete vectorul viz. La nceputul algoritmului, nici un nod nu este inclus n arborele parial minim, niciunul nu este vizitat.

linia 2-3:

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

linia 4-5:

Considernd c algoritmul se declaneaz de la un nod oarecare x 0, acesta este primul inclus n mulimea nodurilor ce formeaz arborele. Algoritmul ar putea permite obinerea drumurilor legate de explorarea APM, astfel nct, x0, nu are predecesor. linia 6: Se iniializeaz variabila cost, care va ajuta la memorarea valorii arborelui parial minim n timpul construirii lui. linia 7: Arborele parial minim, ca orice arbore, trebuie s fie format din exact n-1 muchii. Dac se presupune c avem de a face cu un graf conex, selectarea rnd pe rnd, a muchiei de valoare minim, care are o extremitate vizitat, inclus n arborele parial minim, i cealalt extremitate nevizitat, care poate extinde arborele parial minim, trebuie fcut de n-1 ori. Observaie: Algoritmul poate fi folosit i n cazul grafurilor care nu sunt conexe, n aceast situaie, nlocuindu-se structura repetitiv pentru k=1,n-1 execut sfrit, cu o structur repet pn cnd ok=0. linia 8: Variabila ok, este folosit pentru a semnaliza gsirea muchiei cu cost minim la pasul k. Valoare 0 are sensul, muchia de valoare minim nu a fost gsit, iar 1 sensul opus. De aici i justificarea de la linia 7, unde se precizeaz c algoritmul se poate finaliza cnd nu se mai poate alege o alt muchie care s extind arborele parial minim. linia 9: Identificarea muchiei de cost minim se face cu ajutorul indicelui i, cu ajutorul cruia se parcurge lista ordonat a muchiilor. linia 10: Prima muchie cu proprietile prezentate care a fost gsit, are costul minim n construcia arborelui parial minim. Parcurgerea listei muchiilor, se face pn la identificarea acesteia. linia 11-12: Fiecare muchie, este identificat prin indicele i, prin extremitile a[i] respectiv b[i], i prin costul acesteia, c[i]. Pentru simplificarea scrierii, s-au folosit variabilele x i y pentru identificarea nodurilor care definesc muchia curent. linia 13-16: Muchia de indice i, poate s fie adugat n construcia arborelui parial minim, dac are o extremitate inclus n arbore i cealalt nu. Acest lucru se ntmpl doar dac extremitile muchiei, au una din valori 0, iar cealalt 1 n vectorul viz. Muchia gsit fiind cea cu costul minim, cutarea trebuie ncheiat, variabila ok primete valoarea 1 (linia 14). Dac condiiile nu sunt ndeplinite, cutarea continu. linia 17: Costul arborelui parial minim, crete cu valoarea muchiei identificat anterior. linia 18: Dac se dorete memorarea muchiilor care formeaz arborele parial minim, acest lucru se realizeaz cu vectorul sol. linia 19-22: Aceast secven este util, doar dac se dorete reconstruirea drumurilor formate n urma formrii arborelui parial minim. Pentru aceasta, este necesar cunoaterea nodului nou intrat n arbore, pentru a-i memora predecesorul. linia 23: Pentru simplificare, deoarece nu se mai dorete testarea nodului care a aprut recent n structura arborelui, se poate folosi sintagma, ambele noduri fac parte din arbore din acest moment. Codul surs n limbaj C/C++ a algoritmului lui Prim, se gsete n Anexa 6.

3.8.

Arborele parial de cost minim. Algoritmul lui Kruskal.

O alt variant de determinare a arborelui parial minim i aparine lui Joseph Kruskal, din anul 1956. Pentru a obine arborele parial minim dintr-un graf neorientat ponderat, Kruskal i-a centrat atenia asupra muchiilor, urmrind s selecteze muchia cu cost minim care nu determin apariia vreunui circuit, mpreun cu celelalte muchii anterior selectate. Algoritmul lui Kruskal, n forma care este prezentat, presupune ca anterior lansrii n execuie, muchiile s fie sortate dup costul acestora.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Ideea lui Kruskal, a fost s porneasc de la o pdure de arbori, n care fiecare nod al grafului definete un subarbore minimal. Pentru a afla n final arborele parial minim al grafului, s-a urmrit identificarea muchiei cu costul cel mai mic, care transform doi subarbori minimali ntr-un nou subarbore, mai mare, avnd la rndul su proprietatea minimal. Prin aceast ingenioas idee, Kruskal a evitat apariia circuitelor i n acelai timp obinerea arborelui parial de cost minim. 3.8.1. Reprezentarea datelor Fie G=(X, U) un graf neorientat, : o funcie de cost, prin care se asociaz fiecrei muchii o valoare real i x0 un nod oarecare din graf. Pentru graful neorientat G=(X, U), cu n noduri i m muchii, n implementarea algoritmului lui Kruskal se folosesc urmtoarele date: 1. lista muchiilor, reprezentat prin trei vectori a, b i c de dimensiune m, unde fiecare muchie i este cunoscut prin cele dou extremiti, a[i] i b[i], i costul muchiei i reprezentat de c[i]. 2. lista cu apartenena nodurilor de un anumit subarbore, va fi reprezentat prin vectorul caracteristic viz cu n componente: 3. 4. = variabila cost, care reprezint n fiecare moment costul arborelui parial minim obinut n derularea algoritmului. vectorul sol, cu cel mult n-1 elemente, reprezentnd muchiile selectate din graf, muchii care definesc arborele parial minim. = 1, , .

3.8.2. Principiul algoritmului lui Kruskal Deoarece algoritmul lui Kruskal reuete s identifice arborele parial minim avnd n centrul ateniei muchiile (ordonate dup costuri) care trebuie alese astfel nct s nu se formeze circuite, pentru descrierea secvenelor s-au folosit semnificaiile grafice din figura 3.46.
C

culoarea nodului = componenta din care face parte muchie graf

muchia de cost minim muchie elaxare selectat n componena APM de cost minim

FIG. 3.46. CODURILE REPREZENTRILOR ALGORITMUL LUI KRUSKAL

Prima etap n declanarea algoritmului lui Kruskal, este asocierea fiecrui nod cu un subarbore, astfel c la nceput se poate discuta despre n noduri izolate. Acest lucru se regsete n faptul c: = , = 1, . n reprezentarea din figura 3.47(1), fiecrui subarbore, identificat ca fiind o component conex, i s-a asociat cte o culoare. La pasul al doilea, se identific muchia de valoare minim, n cazul de fa (A,B), muchie de cost 1, care unete componentele conexe {A} i {B} n componenta {A,B}(figura3.47(2)). Se observ c nodul B a primit culoarea nodului A. n etapa a treia, se identific muchia (C,D) (figura 3.47(3)) care are cea mai mic valoare, 1, i care unete componentele conexe formate din nodul C, respectiv D, n componenta conex {C,D}. Selectarea celei de-a treia muchii de valoare 1, (G,F), determin ca la pasul 4 (figura 3.47(4)), graful s fie divizat n 4 componente conexe, respectiv {A,B}, {C,D}, {E} i {G,F}. Fiecare dintre acestea identific cte un subarbore, costul total al muchiilor folosite n descrierea acestora fiind 3.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR


C 1 3 D 3 B 8 4 G cost =0 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G cost=1 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G cost=2 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G cost=3 4 2 1 E 2 F 5

6 A

1.

2.

3.

4.

FIG. 3.47. EVOLUIA ALGORITMULUI LUI KRUSKAL SECVENELE 1-4

Muchiile (E,F) i (E,G), ambele de valoare 2, sunt echivalente att din punct de vedere al costului ct i din punct de vedere al rolului pe care l pot juca, acela de a uni componentele {G,F} cu {E}. n figura 3.48(5) s-a optat pentru muchia (E,F), noua component conex fiind format din nodurile {E,F,G}. Selectarea muchiei (A,D) (figura 3.48(6), determin mbinarea componentelor {A,C} i {C,D}, graful fiind divizat n urma ultimei selecii n dou component conexe, {A,B,C,D}, respective {E,F,G}. Valorile costurilor celor dou componente conexe sunt: 5 pentru {A,B,C,D}, respectiv 3 pentru componenta {E,F,G}. Obinerea arborelui parial minim, este determinat n final de reunirea celor dou componente conexe, reprezentnd doi subarbori minimali, folosind o muchie de valoare minim, cu extremitile aparinnd celor doi subarbori. Acest lucru, teoretic se poate realiza cu ajutorul a dou muchii, (D,E) sau (D,G), fiecare cu costul egal cu 4 (figura 3.48(7)). Lexicografic a fost selectat muchia (D,E). Costul arborelui parial minim obinut (figura 3.48(8) este de 12.
C 1 3 D 3 B 8 4 G cost=5 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G cost=8 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G 4 2 1 E 1 2 F B 3 8 5 A C 1 3 D 4 G 4 2 1 E 2 F 5

6 A

cost=12

Arbore parial minim cost=12

5.

6.

7.

8.

FIG. 3.48. EVOLUIA ALGORITMULUI LUI KRUSKAL SECVENELE 5-8

Deoarece att la descrierea algoritmului lui Prim, ct i la cea a algoritmului lui Kruskal s-a folosit acelai graf, s-a putut observa c au existat momente, n care au existat mai multe muchii care ar fi putut fi alese n acelai timp, ele avnd acelai cost. n asemenea cazuri, n care n graf exist mai multe muchii de aceeai valoare, diferenierea n prioritatea de testare i alegere, este dat exclusiv de regula i modalitatea n care sunt codificate. n orice situaie, acest lucru nu modific n niciun fel valoarea costului total al arborelui parial obinut la final, ci doar muchiile care l formeaz pe acesta. n concluzie, alegerea a unuia sau a altuia dintre cei doi algoritmi pentru determinarea APM, se face i n funcie de alte date colaterale care se doresc a fi obinute (drumuri, distane, componente conexe etc.), acestea putnd fi decisive n alegerea acestuia.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

3.8.3. Algoritmul lui Kruskal Algoritmul lui Kruskal folosete notaiile i semnificaiile de la 3.8.1. Secvenele care l descriu sunt: algoritmul Kruskal 1: ordonarea vectorilor a,b i c n funcie de valorile din c 2: pentru i=1,n execut 3: viz[i]=i sfrit 4: cost=0 5: i=1 6: k=0 7: ct timp k<n-1 execut 8: x=a[i] 9: y=b[i] 10: dac viz[x]viz[y] atunci 11: k=k+1 12: sol[k]=i 13: max=viz[x] 14: min=viz[y] 15: dac max<min atunci 16: max min sfrit 17: pentru j=1,n execut 18: dac viz[j]=max atunci 19: viz[j]=min sfrit sfrit sfrit 20: i=i+1 sfrit Semnificaiile liniilor n algoritmul lui Kruskal sunt urmtoarele: linia 1: Ordonarea muchiilor dup valoarea costurilor acestora, este condiia preliminar pentru lansarea n execuie a algoritmului. Fiind un algoritm de tip greedy, identificarea elementului cu proprietatea extrem este mult mai rapid ntr-o mulime ordonat. Asocierea fiecrui nod al grafului cu o component conex, sau cu un subarbore minimal, este ideea de la care pornete algoritmul lui Kruskal. Fiecare nod, definete un subarbore, astfel nct nodul i, aparine de subarborele viz[i]. Scopul principal al algoritmului, este obinerea valorii costului arborelui parial minim. Variabila cost, este cea care reine n timpul derulrii algoritmului suma costurilor subarborilor pariali minimi construii pn n acel moment, iar la sfrit costul arborelui parial minim, dac graful este conex. Algoritmul se desfoar sub controlul variabilelor i i k. Trebuie menionat c variabila i este folosit pentru controlul muchiilor, iar variabila k pentru construirea soluiei, n situaia cnd se dorete reinerea indicilor muchiilor care formeaz arborele. Arborele parial minim va trebui s conin exact n-1 muchii din cele m ale grafului iniial. Scopul, este de a alege dintre muchiile grafului a n-1 dintre ele, n aa fel

linia 2-3: linia 4:

linia 5-6:

linia 7:

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

nct n momentul selectrii s nu formeze circuite cu celelalte muchii selectate. Observaie: Condiia de ciclare este valabil doar n cazul grafurilor conexe. n situaia unui graf neconex, cutarea se poate termina cnd toate muchiile au fost testate, ct timp i<=m execut sfrit. linia 8-9: linia 10: Pentru simplificarea referirii la extremitile muchiei i, s-au folosit variabilele x i y. Esena algoritmului lui Kruskal, este alegerea muchiei cu cost minim care nu formeaz circuite mpreun cu celelalte muchii selectate anterior. Acest lucru este garantat, dac la extremitile muchiei vizate n acest moment, se gsesc dou noduri care aparin de subarbori diferii. Vectorul viz, reine apartenena fiecrui nod la un anumit subarbore sau implicit la o anumit component conex. linia 11-12: Reinerea muchiilor care formeaz arborele parial minim, presupune memorarea indicilor muchiilor n vectorul sol, pe msur ce acestea sunt selectate ca elemente ce definesc subarborii minimali. linia 13-16: Deoarece muchia selectat va uni doi subarbori pariali, toate nodurile celor doi subarbori vor trebui s aparin de un nou subarbore. Problema care se pune, este cum poate fi identificat noul subarbore obinut din mbinarea celor doi, folosind muchia de cost minim selectat. O soluie este utilizarea valorilor memorate n vectorul viz. Astfel, se identific valoarea asociat fiecruia dintre cei doi subarbori n discuie n variabilele min, pentru valoarea mai mic, i max pentru valoarea mai mare. linia 17-19: Crearea noului subarbore, presupune trecerea tuturor nodurilor in componenta cu numr de identificare mai mare, n componenta cu numr de identificare mai mic. Dup aceast operaie, noul subarbore va prelua valoarea subarborelui identificat cu valoarea cea mai mic. linia 20: Dup analizarea muchiei cu numrul de ordine i, indiferent dac a fost sau nu integrat n vreun subarbore, se trece la muchia urmtoare. Observaie: La algoritmul lui Kruskal, fiecare muchie va fi testat doar o singur dat. Dac ea nu a putut fi validat la un moment dat, nu va putea s fie valid la niciun alt moment ulterior. n Anexa 7 se gsete codul surs n limbaj C/C++ al algoritmului lui Kruskal.

3.9. Aplicaii ale algoritmilor de optim n probleme


3.9.1. Conexitate. Componente conexe. O gam extins de probleme din teoria grafurilor au ca ipotez sau ca punct de pornire n abordare conexitatea, n cazul grafurilor neorientate, sau tare conexitatea, n cazul grafurilor orientate. n situaiile reale, fenomenele modelate sunt n general formate din entiti care sunt dependente unele de altele. Orice aciune produs asupra unei entiti structurale din fenomenul modelat, poate produce efecte mai mici sau mai mari asupra tuturor elementelor dependente de acesta. Pentru exemplificare, se vor aborda situaiile din cazul grafurilor neorientate, facndu-se apoi trecerea la situaiile aparte ivite n cazul grafurilor orientate. Conexitate Existena drumurilor ntre dou noduri oarecare, sau posibilitatea de a ajunge de la un nod la un alt nod, este o situaie care trebuie rezolvat ntr-o mare gam de probleme. Acest lucru se traduce n limbajul grafurilor prin noiunea de conexitate. ntrebarea care se pune imediat, este, care dintre algoritmii prezentai anterior pot rezolva aceast cerin? Din discuiile i analizele fcute anterior, att explorarea n lime, BFS, ct i explorarea n adncime, DFS, pot rezolva cu uurin aceast problem, prin simpla interpretare

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

a rezultatelor obinute n vectorului viz. Dac toate valorile coninute n vectorul viz sunt egale cu 1, arborele de acoperire conine toate nodurile grafului, n concluzie, ntre oricare dou noduri exist cel puin un drum. n situaia grafurilor ponderate, problema poate fi rezolvat, cu DFS i BFS dac se ignor costurile muchiilor, sau utiliznd ceilali algoritmi, Dijkstra, Kruskal, Prim, care se folosesc de vectorul viz, n obinerea arborelui de acoperire a grafului. n concluzie, utilizarea tuturor algoritmilor amintii anterior, i urmrirea valorilor vectorului viz, poate da informaii legate despre un graf dac este sau nu conex, n situaia n care toate valorile din vector sunt egale. Tare Conexitate n situaia grafurilor orientate, verificarea existenei drumurilor de la un anumit nod la toate nodurile grafului, i de la fiecare nod al grafului ctre acel nod, poate fi uor rezolvat, folosind o strategie similar grafurilor neorientate, constnd n doi pai: 1. explorarea grafului pornind de la un anumit vrf folosind sensul arcelor. 2. explorarea grafului pornind de la acelai vrf folosind sensul invers al arcelor. Pentru memorarea vrfurilor care aparin arborilor de acoperire obinui n cele dou etape se vor folosi doi vectori, viz1 respectiv viz2. La prima explorare se vor obine toate vrfurile care sunt legate prin drumuri de vrful iniial, iar prin a doua explorare se vor obine toate vrfurile de la care se poate ajunge la nodul iniial. Verificarea proprietii de tare conexitate pentru un graf, se rezum n aceast abordare, la verificarea dac toate valorile din vectorii viz1 i viz2 sunt egale cu 1. Componente Conexe. Componenta conex cu numr maxim de noduri. Pentru determinarea componentelor conexe, se pornete de la ideea verificrii dac un graf este sau nu conex. n urma unei aplicri a unuia din algoritmii care au fost amintii la noiunea de conexitate, efectul este determinarea unei componente conexe a grafului respectiv, component recunoscut prin nodurile explorate pn n acel moment. Dac n urma unei apelri se obine o component conex, prin apelri repetate se pot obine pe rnd, toate componentele conexe ale grafului. Singura problem care ar trebui soluionat este identificarea componentelor. Exist dou variante care pot fi folosite: afiarea nodurilor n momentul n care sunt vizitate, sau memorarea n vectorul viz, a numrului componentei conexe din care face parte fiecare nod. A doua variant este mai des utilizat, deoarece permite i alte prelucrri ulterioare. Utiliznd acest principiu, se pornete de la primul nod nevizitat, implicit nodul cu valoarea 1, de la care se declaneaz o explorare a grafului. Toate nodurile care pot fi vizitate pornind de la acesta, vor primi valoarea 1 n vectorul viz, corespunztoare primei componente conexe. Dac au rmas noduri nevizitate, la pasul al doilea se identific primul nod rmas nevizitat, de unde se declaneaz o a doua explorare. La aceast explorare, nodurile care vor fi vizitate vor primi valoarea 2, corespunztoare celei de a doua explorri i implicit celei de a doua componente conexe. Operaiile se repet pn cnd toate nodurile vor fi vizitate. Observaie: Valorile reinute n vectorul viz, precizeaz apartenena fiecrui nod de o anumit component conex. n determinarea i afiarea componentelor conexe folosind valorile reinute n vectorul viz, este necesar parcurgerea repetat a vectorului. La fiecare din aceste parcurgeri, se vor analiza sau afia doar acele noduri a cror valori reinute n vectorul viz sunt egale cu numrul de ordine al parcurgerii. Pentru afiarea componentelor conexe dintr-un graf, se poate folosi secvena de program urmtoare:

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

ct=0 c=0 ct timp ct<n execut c=c+1 scrie Componenta conex ,c, este format din pentru i=1,n execut dac viz[i]=c atunci ct=ct+1 scrie i sfrit sfrit sfrit Obinerea componentei conexe maxime, presupune determinarea valorii cu cea mai mare frecven de apariie n vectorul viz. Toate nodurile grafului care au asociat aceast valoare n vectorul viz aparin componentei conexe cu numr maxim de noduri. Secvena care permite obinerea componentei conexe cu numr maxim de noduri dintr-un graf cu k componente conexe este: max=0 cmax=0 pentru i=1,k execut nr[i]=0 sfrit pentru i=1,n execut nr[viz[i]]=nr[viz[i]]+1 dac nr[viz[i]]>max atunci max=nr[viz[i]] cmax=viz[i] sfrit sfrit pentru i=1,n execut dac viz[i]=cmax atunci scrie i sfrit sfrit Transformarea unui graf neconex ntr-un graf conex folosind un numr minim de muchii. O consecin imediat a determinrii componentelor conexe ale unui graf, este i posibilitatea transformrii acestuia ntr-un graf conex, folosind un numr minim de muchii. n situaii reale, interconectarea diverselor sisteme cu resurse minime, este o cerin care se regsete ca obiectiv principal n dezideratele de dezvoltare ale companiilor. Rezolvarea acestei probleme se rezum la unirea succesiv a dou componente conexe cu ajutorul unei muchii. n urma acestei aciuni, nodurile din cele dou componente conexe astfel unite, vor forma o nou component conex. Pentru exemplificare, dac graful este format din k componente conexe, este nevoie de k-1 muchii pentru a-l transforma ntr-un graf conex. Din punct de vedere algoritmic, se parcurge vectorul viz, care conine informaii legate de apartenena nodurilor la componentele conexe ale grafului. Acolo unde se gsesc dou valori consecutive cu valori diferite (nodurile aparin de componente conexe diferite), se consider c se poate trasa o nou muchie, i toate nodurile aflate n aceeai component conex cu al doilea nod al perechii, vor trece n componenta conex corespunztoare primului nod al perechii.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Secvena care descrie algoritmic, modalitatea de transformare a unui graf neconex n unul conex este: pentru i=1,n-1 execut dac viz[i]viz[i+1] atunci scrie i, i+1 x=viz[i+1] pentru j=i+1,n execut dac viz[j]=x atunci viz[j]=x sfrit sfrit sfrit sfrit Anexa 8, conine scrierea n limbaj de programare C/C++ a programului care determin componentele conexe ale unui graf, cea mai mare dintre ele i transform graful neconex ntr-unul conex folosind un numr minim de muchii. n algoritmul din Anexa 8, s-a folosit o parcurgere BFS. 3.9.2. Graf bipartit Proprietatea de graf bipartit, presupune mprirea, dac este posibil, a mulimii nodurilor grafului n dou partiii, cu proprietile: - fiecare nod dintr-o partiie se leag printr-o muchie de cel puin un nod din cealalt partiie - niciun nod al unei partiii nu se leag de un alt nod al aceleiai partiii. algoritmul Bipartit(x) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: pentru i=1,n execut viz[i]=dist[i]=0 sfrit p=u=1 c[p]=x viz[x]=1 ok=1 ct timp p<=u i u<n i ok=1 execut pentru i=1,n execut dac a[c[p]][i]=1 i viz[i]=0 atunci u=u+1, c[u]=i viz[i]=1 dist[i]=dist[c[p]]+1 altfel dac a[c[p]][i]=1 i viz[i]=1 i (dist[c[p]]+dist[i])%2=0 atunci ok=0 sfrit sfrit p=p+1 sfrit

Ideea folosit n rezolvarea acestei probleme, a fost explorarea grafului n lime. Folosind aceast strategie de explorare, cele dou cerine enunate anterior pot fi cu uurin

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

rezolvate cu ajutorul vectorului care reine distanele fa de nodul iniial dist. Din acest context, problema poate fi reformulat n felul urmtor: un graf este bipartit dac nu exist nicio muchie care s conecteze noduri aflate la distane de aceeai paritate. Observaie: Cele dou partiii, dac exist, sunt formate din nodurile situate la distan par, respectiv din nodurile situate la distan impar. Afiarea componentelor conexe, se poate face parcurgnd de dou ori vectorul distanelor i afind prima dat nodurile aflate la distan impar, iar dup aceea pe cele aflate la distane pare: 1: 2: 3: 4: scrie Partiia 1: pentru i=1,n execut dac dist[i]%2=1 atunci scrie i sfrit sfrit 5: scrie Partiia 2: 6: 7: 8: pentru i=1,n execut dac dist[i]%2=0 atunci scrie i sfrit sfrit

Anexa 9 conine codul surs n limbaj C/C++. 3.9.3. Excentricitatea, raza i diametrul unui graf Excentricitatea unui nod x al grafului, notat cu e(x), se definete ca fiind cel mai mare dintre drumurile minime de la nodul x, la un alt nod al grafului. Pentru un graf G=(X,U), unde dist este vectorul distanelor minime fa de un nod oarecare x: = max , . Determinarea excentricitii unui nod oarecare se face utiliznd algoritmul BFS i aflnd valoarea maxim din vectorul dist. Raza unui graf, r(G), se definete ca fiind cea mai mic dintre excentricitile grafului. Diametrul grafului, d(G), este reprezentat de cea mai mare dintre excentricitile grafului. = min , , = max , . Pentru determinarea razei i a diametrului unui graf trebuie determinate toate distanele minime, dintre oricare dou noduri ale grafului. Acest lucru poate fi determinat cu ajutorul algoritmului Roy-Floyd. Pentru a transpune algoritmul pentru grafuri neponderate, matricea costurilor c, prezentat la 3.6.1., este similar cu matricea drumurilor minime. n acest context, determinarea razei presupune gsirea valorii minime din matrice, iar determinarea diametrului grafului gsirea celei mai mari valori finite. n cazul n care se dorete determinarea excentricitii pentru un anumit nod, aceasta se realizeaz urmrind cea mai mare valoare finit de pe o anumit linie a matricii, tiind c fiecare linie conine informaii despre drumurile optime ale cte unui nod din graf. Determinarea razei i a diametrului grafului se poate face dup terminarea algoritmului Roy-Floyd, cu ajutorul cruia se obin drumurile minime ntre oricare dou noduri, folosind secvena de program urmtoare:

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

1: 2: 2: 3: 4: 5: 6: 7:

8:

r=INF d=0 pentru i=1,n execut pentru j=1,n execut dac c[i][j]<r atunci r=c[i][j] sfrit dac c[i][j]>d i c[i][j]<INF atunci d=c[i][j] sfrit sfrit sfrit scrie r,d

Anexa 10, conine reprezentarea n limbaj C/C++ a algoritmului care determin excentricitatea unui nod, precum i raza i diametrul unui graf. 3.9.4. Drumul cel mai scurt ntre dou noduri Una din problemele foarte des ntlnite este drumul de lungime minim dintre dou noduri. Soluionarea acesteia se face folosind algoritmul BFS, cu meniunea c explorarea pornete de la unul dintre noduri i se termin n momentul atingerii celuilalt. algoritmul Drum_minim(x, y) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 13: 14: 15: 16: pentru i=1,n execut viz[i]=dist[i]=0 sfrit p=u=1 c[p]=x viz[x]=1 pred[x]=0 ok=0 ct timp p<=u i u<n i ok=0 execut pentru i=1,n execut dac a[c[p]][i]=1 i viz[i]=0 atunci u=u+1, c[u]=i viz[i]=1 pred[i]=c[p] dist[i]=dist[c[p]]+1 dac i=y atunci ok=1 sfrit sfrit p=p+1 sfrit

Pentru afiarea nodurilor sau muchiilor care formeaz drumul minim, se folosesc valorile reinute n vectorul pred. Secvena care permite afiarea drumului minim dintre dou noduri este:

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

algoritmul Drum(x, y) 1: l=dist[y]+1 2: 3: 4: 5: 6: pentru i=1,l execut drum[i]=y y=pred[y] sfrit pentru i=l,l,-1 execut scrie drum[i] sfrit

3.9.5. Maze. Drumuri n labirint. O problem clasic ntlnit n jocuri n special, este problema labirintului, Maze. Dintre situaiile care trebuie rezolvate n mod frecvent ntr-un labirint sunt: - ieirea din labirint, - traseul cel mai scurt dintre dou puncte ale labirintului. Primul lucru care trebuie rezolvat este legat de codarea labirintului. Astfel, pentru un labirint reprezentat pe l linii i c coloane, acesta poate fi codificat printr-un graf cu n noduri, unde = .

1 7 13 19 25 a. Labirintul
FIG. 3.49. MAZE

2 8 14 20 26 b.

3 9 15 21 27

4 10 16 22 28

5 11 17 23 29

6 12 18 24 30

Graful asociat

Codarea labirintului Pentru implementarea unui algoritm care s soluioneze problemele ridicate, esenial este modalitatea de codare a labirintului, innd cont de posibilitile de deplasare n acesta. n acest scop, se poate crea graful asociat labirintului. n figura 3.49., se poate observa trecerea de la labirint, figura 3.49.(a), la graful asociat figura 3.49.(b). Trebuie menionat faptul c n graful obinut, posibilitile de deplasare luate n considerare sunt cele patru poziii vecine, stnga, dreapta, sus, jos. Avnd aceste reprezentri, trebuie s se decid asupra reprezentrii interne a datelor, respectiv a modalitii de codare a nodurilor i a muchiilor grafului asociat. Dou sunt variantele cele mai frecvent utilizate: matricea de adiacen i lista de adiacen. Alegerea uneia sau a alteia dintre ele, este determinat de dimensiunea spaiului de memorie avut la dispoziie, cu o meniune special pentru matricea de adiacen, unde pentru un labirint cu l linii i c coloane, este nevoie de o matrice de adiacen cu o dimensiune mai mare, . n exemplificrile care urmeaz, se va folosi codarea grafului asociat labirintului sub form de matrice de adiacen. Se pornete de la labirintul codat n matricea L i se obine matricea de adiacen a.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Labirintul de la care se pornete poate fi codat cu semnificaiile: = 1, 0, .

Pentru transformarea labirintului n graf, fiecrei suprafee elementare din labirint, identificat cu ajutorul coordonatelor i i j, i este asociat un nod al grafului. Pornind de la reperele i i j din labirint, se obine valoarea nodului x din graf, folosind formula: = 1 + Pentru codarea muchiilor, trebuie precizate direciile de micare sau poziiile n care se poate ajunge n urma efecturii unui pas. Dac acestea sunt i1 i j1, folosind formula de mai sus se obine nodul corespunztor punctului final al muchiei: 1 = 1 1 + 1 . Procednd n acest mod se obine codarea muchiei (x,x1), n una din formele cunoscute pentru reprezentarea intern a grafurilor. Similar se realizeaz codarea tuturor micrilor posibile n labirint, fiecare dintre ele avnd asociat o muchie. Secvena de program care permite construirea matricii de adiacen, poate fi: 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: pentru i=1,l-1 execut pentru j=1,c-1 execut dac L[i][j]+L[i][j+1]=0 atunci x=(i-1)*c+j y=(i-1)*c+j+1 a[x][y]=a[y][x]=1 sfrit dac L[i][j]+L[i+1][j]=0 atunci x=(i-1)*c+j y=i*c+j a[x][y]=a[y][x]=1 sfrit sfrit sfrit pentru i=1,l-1 execut dac L[i][c]+L[i+1][c]=0 atunci x=i*c y=(i+1)*c a[x][y]=a[y][x]=1 sfrit sfrit pentru j=1,c-1 execut dac L[l][j]+L[l][j+1]=0 atunci x=(l-1)*c+j y=(l-1)*c+j+1 a[x][y]=a[y][x]=1 sfrit sfrit

11: 12: 13: 14: 15:

16: 17: 18: 19: 20:

Ieirea din labirint Problema obinerii unei variante de ieire din labirint se poate rezolva utiliznd o variant a explorrii n adncime a unul graf. Pentru a putea scrie algoritmul DFS, se pornete de la urmtoarele ipoteze de lucru:

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

dimensiunile labirintului sunt cunoscute l i c, poziia iniial i0, j0, corespunztoare nodului = + se consider c s-a ieit din labirint dac s-a ajuns pe marginea acestuia, graful asociat este reprezentat de matricea de adiacen a de dimensiune n, unde n=l*c.

Algoritmul care permite determinarea unei variante de prsire a labirintului pornind de la nodul x este: algoritmul Ieire_Labirint(x) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: pentru i=1,n execut viz[i]=urm[i]=0 sfrit u=1 st[u]=x viz[x]=1 pred[x]=0 ok=0 ct timp u>0 i ok=0 execut i=urm[st[u]]+1 ct timp (a[st[u]][i]=0 sau viz[i]=1) i i<=n execut i=i+1 sfrit urm[st[u]]=i dac i<=n atunci viz[i]=1 pred[i]=st[u] u=u+1 st[u]=i y=i dac (i-1) div c=0 sau (i-1) div c=l-1 sau i mod c=0 sau i mod c=1 atunci ok=1 sfrit altfel u=u-1 sfrit sfrit

Existena sau nu a unei variante de prsire a labirintului este controlat de variabila ok, iar locul de ieire de variabila y. n acest context, dac se cunoate nodul grafului asociat labirintului, se pot obine coordonatele corespunztoare poziiei curente. Astfel, dac nodul curent este y, linia i coloana corespunztoare sunt: = 1 div + 1, = 1 mod + 1. Condiia de prsire a labirintului este determinat de poziionarea pe conturul matricii, acest lucru fiind reprezentat la linia 18. n cazul existenei unui astfel de drum, acesta poate fi prezentat sub mai multe forme: lista nodurilor grafului, sau coordonatele linie,coloan din reprezentarea labirintului. Dac prima variant a fost prezentat i la subcapitolul 3.9.4, varianta care descrie deplasarea n labirint este:

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

algoritmul Drum(x, y) 1: 2: 3: 4: 5: 6: 7: 8: j=0 while y0 execut j=j+1 li[j]=(y-1)div c+1 co[j]=(y-1)mod c+1 y=pred[y] sfrit pentru i=j,l,-1 execut scrie li[i],co[i] sfrit

Ieirea din labirint pe drumul cel mai scurt Obinerea celui mai scurt drum de prsire a algoritmului se poate face aplicnd un algoritm de tipul BFS grafului asociat labirintului: algoritmul Ieire_Labirint_Min(x) 1: 2: 3: 5: 6: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: pentru i=1,n execut viz[i]=dist[i]=0 sfrit p=u=1 viz[x]=1 pred[x]=0 ok=0 ct timp p<=u i ok=0 execut pentru i=1,n execut dac a[c[p]][i]=1 i viz[i]=0 atunci u=u+1, c[u]=i viz[i]=1 pred[i]=c[p] dist[i]=dist[c[p]]+1 dac (i-1) div c=0 sau (i-1) div c=l-1 sau i mod c=0 sau i mod c=1 atunci ok=1 y=i sfrit sfrit sfrit dac ok=0 atunci p=p+1 sfrit sfrit

17: 18:

Detectarea posibilitii de a iei din labirint se face la linia 14, iar memorarea punctului de ieire la linia 16. Afiarea drumului de ieire din labirint este aceeai ca la algoritmul anterior, ambele variante folosindu-se de informaiile reinute n vectorul pred, cel care codeaz arborele de acoperire.

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

Observaie: Deplasrile n labirint, pot avea ctiguri sau pierderi n urma trecerii dintr-o poziie n alt poziie. O asemenea situaie, presupune o rezolvare similar, folosind drept reprezentare un graf ponderat i utiliznd algoritmii lui Dijkstra sau Bellman-Ford, n funcie de existena sau nu a costurilor negative. 3.9.6. Drumul de lungime maxim ntre dou noduri. Drum hamiltonian. Drum eulerian. Drumul de lungime maxim Obinerea unui drum care s treac printr-un numr maxim de noduri se folosete un algoritm derivat din parcurgerea n adncime. Deosebirea ntre varianta general a DFS i algoritmul care determin drumul de lungime maxim, este anularea marcajului din vectorul viz n momentul revenirii n stiv. Forma aceasta este foarte apropiat de mecanismul de backtracking, n multe aciuni confundndu-se cu acesta. algoritmul Drum_Maxim(x) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: pentru i=1,n execut viz[i]=urm[i]=0 sfrit u=1 st[u]=x viz[x]=1 lmax=0 ct timp u>0 execut i=urm[st[u]]+1 ct timp (a[st[u]][i]=0 sau viz[i]=1) i i<=n execut i=i+1 sfrit urm[st[u]]=i dac i<=n atunci viz[i]=1 u=u+1, st[u]=i altfel dac u>lmax atunci pentru j=1,u execut d[j]=st[j] sfrit lmax=u sfrit urm[st[u]]=0 viz[st[u]]=0 u=u-1 sfrit sfrit

Drumul de lungime maxim este obinut n vectorul d de dimensiune lmax. n algoritmul descris mai sus, trebuie remarcat testul de maxim, la linia 15, unde dac dimensiunea stivei construite ca urmare a explorrii n adncime din acest moment, este mai mare dect cel mai lung drum de pna acum, coninutul stivei reprezint cel mai lung drum i este copiat n vectorul d (liniile 16-17). Trebuie remarcate i aciunile de la liniile 19 i 20, prin care se anuleaz direcia memorat i marcajul elementului din vrful stivei nainte de al elimina din stiv, ceea ce o s

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

permit utilizarea acestuia ulterior, ntr-o alt variant de explorare. Aceste dou linii fac ca mecanismul de mai sus s descrie exact aceleai aciuni ca i algoritmul de backtracking. Observaie: Exist numeroase lucrri de specialitate n care se spune c backtrackingul utilizeaz o tehnic DFS, sau pur i simplu ignor noiunea de backtracking, preciznd c este vorba de explorarea n adncime a tuturor strilor unui graf Drumul hamiltonian, ciclu hamiltonian Problema clasic a drumului hamiltonian, este problema comis voiajorului. n cadrul acestei probleme, o persoan trebuie s depisteze un traseu, cu ajutorul cruia s poat s treac prin toate locaiile, o singur dat. Se cunosc legturile existente ntre diferite locaii. Problema presupune detectarea unui drum hamiltonian sau a unui ciclu hamiltonian n funcie de modul n care se finalizeaz drumul, n orice punct al grafului sau n punctul de pornire. Pentru a obine un drum hamiltonian n graf, care s treac prin toate nodurile grafului o singur dat, se poate folosi algoritmul scris anterior, verificnd la sfrit dac lmax=n, sau modificnd doar linia 15, i renunnd la liniile 5 i 18. Linia 15 devine astfel: 15: dac u=n atunci n cazul ciclului hamiltonian, algoritmul este similar cu cel al drumului hamiltonian, la linia 15 intervenind n plus existena unei muchii care s nchid circuitul: 15: dac u=n i a[st[1]][st[u]]=1 atunci

Drumul eulerian Identificarea unui ciclu eulerian, care s conin toate muchiile grafului, presupune verificarea n prealabil a precondiiei legate de paritatea gradelor tuturor nodurilor grafului i eventual a conexitii acestuia. n depistarea drumului hamiltonian se poate folosi tot un algoritm derivat din DFS, singura noutate fiind c n acest caz, vizate sunt muchiile i nu nodurile. Algoritmul se poate modifica cu uurin, modificnd valoarea reinut n matricea de adiacen din 1 n -1 atunci cnd o muchie este selectat. algoritmul Drum_Eulerian(x) 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: pentru i=1,n execut urm[i]=0 sfrit u=1 st[u]=x ok=0 ct timp u>0 i ok=0 execut i=urm[st[u]]+1 ct timp a[st[u]][i]<=0 i i<=n execut i=i+1 sfrit urm[st[u]]=i dac i<=n atunci u=u+1 st[u]=i a[st[u]][st[u-1]]=a[st[u-1]][st[u]]=-1 altfel dac u=m atunci ok=1

FORMAREA STRATEGIILOR COGNITIVE N ABORDAREA PROBLEMELOR DE OPTIM N TEORIA GRAFURILOR

17: 18: 19:

altfel a[st[u]][st[u-1]]=a[st[u-1]][st[u]]=1 urm[st[u]]=0 u=u-1 sfrit sfrit sfrit

n algoritmul prezentat mai sus, variabila ok detecteaz momentul depistrii drumului eulerian, oprind desfurarea cutrilor. Marcarea muchiei selectate la naintarea n explorarea grafului, se face la linia 13, iar eliminarea marcajului la ntoarcere, la linia 19. n secvena de la liniile 15-16 se detecteaz momentul identificrii drumului eulerian, acesta fiind chiar valoarea reinut n stiv n acel moment.

ANEXE

ANEXE
Anexa 1 DFS.cpp
#include<iostream.h> #include<fstream.h> int a[20][20],n,m,viz[20],pred[20],urm[20],d[20],st[20],sol[20]; int u,p; int main(void) { int i,j,x,y,x0; ifstream f("grafn.in"); f>>n>>m; for(i=1;i<=m;i++) { f>>x>>y; a[x][y]=a[y][x]=1; } cout<<"nodul initial:"; cin>>x0; u=p=1; viz[x0]=1; sol[p]=st[u]=x0; while(p<n&&u>0) { i=urm[st[u]]+1; while(i<=n && (viz[i]==1 || a[st[u]][i]==0)) i++; urm[st[u]]=i; if(i<=n) { sol[++p]=i; viz[i]=1; pred[i]=st[u]; d[i]=d[st[u]]+1; st[++u]=i; } else u--; } if(p==n) { cout<<"Rezultate\n"; cout<<"Ordinea de explorare a nodurilor:"; for(i=1;i<=n;i++) cout<<sol[i]<<' '; } else cout<<"Graful NU E CONEX"; f.close(); }

ANEXE

Anexa 2 BFS.cpp
#include<iostream.h> #include<fstream.h> int a[20][20],n,m,viz[20],pred[20],d[20],c[20]; int u,p; int main(void) { int i,j,x,y,x0; ifstream f("grafn.in"); f>>n>>m; for(i=1;i<=m;i++) { f>>x>>y; a[x][y]=a[y][x]=1; } cout<<"nodul initial:"; cin>>x0; u=p=1; viz[x0]=1; c[p]=x0; while(p<=u&&u<n) { for(i=1;i<=n;i++) if(viz[i]==0 && a[c[p]][i]==1) { c[++u]=i; viz[i]=1; pred[i]=c[p]; d[i]=d[c[p]]+1; } p++; } if(u==n) { cout<<"Rezultate\n"; cout<<"Ordinea de explorare a nodurilor:"; for(i=1;i<=n;i++) cout<<c[i]<<' '; } else cout<<"Graful NU E CONEX"; f.close(); }

ANEXE

Anexa 3 Dijkstra.cpp
#include<iostream.h> #include<fstream.h> int a[20][20],n,m,viz[20],pred[20],d[20],INF=999,drum[20],u,p; int main(void) { int i,j,x,y,z,x0,ok,MIN; ifstream f("grafop.in");//graf orientat cu arce pozitive f>>n>>m; for(i=1;i<=m;i++) { f>>x>>y>>z; a[x][y]=z; } for(i=1;i<=n;i++) d[i]=INF; cout<<"nodul initial:"; cin>>x0; d[x0]=0; ok=1; while(ok) { MIN=INF; for(i=1;i<=n;i++) if(viz[i]==0 && d[i]<MIN) { MIN=d[i]; y=i; } if(MIN!=INF) { viz[y]=1; for(z=1;z<=n;z++) if(viz[z]==0 && a[y][z]!=0 && d[z]>d[y]+a[y][z]) { d[z]=d[y]+a[y][z]; pred[z]=y; } } else ok=0; } cout<<"Rezultate\n"; cout<<"Afisarea drumurilor de cost minim fata de " <<x0<<":\n"; for(i=1;i<=n;i++) if(i!=x0) if(d[i]==INF) cout<<"Nu se poate ajunge de la "<<x0 <<" la "<<i<<'\n'; else { x=i; j=0; while(x) {

ANEXE

drum[++j]=x; x=pred[x]; } for(int k=j;k>0;k--) cout<<drum[k]<<' '; cout<<'\n'; } f.close(); }

ANEXE

Anexa 4 Bellman_Ford.cpp
#include<iostream.h> #include<fstream.h> int a[20],b[20],c[20],d[20],n,m,pred[20],INF=999,drum[20]; int main(void) { int i,j,x,y,z,x0,k,MIN,aux,ct,ok; ifstream f("grafon.in"); f>>n>>m; for(i=1;i<=m;i++) f>>a[i]>>b[i]>>c[i]; for(i=1;i<n;i++) for(j=i+1;j<=n;j++) if(c[i]>c[j]) { aux=c[i];c[i]=c[j];c[j]=aux; aux=a[i];a[i]=a[j];a[j]=aux; aux=b[i];b[i]=b[j];b[j]=aux; } for(i=1;i<=n;i++) d[i]=INF; cout<<"varful initial:";cin>>x0; d[x0]=0; ct=0; do { ok=0; ct++; for(k=1;k<=m;k++) { i=a[k]; j=b[k]; if(d[i]<INF && d[j]>d[i]+c[k]) { d[j]=d[i]+c[k]; pred[j]=i; ok=1; } } } while(ok!=0 && ct<n); cout<<"Rezultate\n"; cout<<"Afisarea drumurilor de cost minim fata de " <<x0<<":\n"; for(i=1;i<=n;i++) if(i!=x0) if(d[i]==INF) cout<<"Nu se poate ajunge de la "<<x0 <<" la "<<i<<'\n'; else { x=i; j=0; while(x) { drum[++j]=x;

ANEXE

x=pred[x]; } for(int k=j;k>0;k--) cout<<drum[k]<<' '; cout<<'\n'; } f.close(); }

ANEXE

Anexa 5 Roy_Floyd.cpp
#include<iostream.h> #include<fstream.h> int c[20][20],n,m,pred[20][20],INF=999,drum[20]; int main(void) { int i,j,x,y,z,x0,k,MIN; ifstream f("grafop.in");//graf orientat cu arce pozitive f>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=n;j++) c[i][j]=INF; for(i=1;i<=m;i++) { f>>x>>y>>z; c[x][y]=z; pred[x][y]=x; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(c[i][k]<INF && c[k][j]<INF && i!=j && j!=k) if (c[i][j]>c[i][k]+c[k][j]) { c[i][j]=c[i][k]+c[k][j]; pred[i][j]=pred[k][j]; } cout<<"varf 1=";cin>>x; cout<<"varf 2=";cin>>y; k=y; j=0; while(k!=0) { drum[++j]=k; k=pred[x][k]; } cout<<"drumul de cost minim de la "<<x<<" la "<<y<<":"; for(k=j;k>0;k--) cout<<drum[k]<<' '; f.close(); }

ANEXE

Anexa 6 Prim.cpp
#include<iostream.h> #include<fstream.h> int a[20],b[20],c[20],d[20],n,m,viz[20],sol[20],pred[20], INF=999,drum[20]; int main(void) { int i,j,x,y,z,x0,k,MIN,aux,cost,ok; ifstream f("grafncost.in");//graf orientat cu arce pozitive f>>n>>m; for(i=1;i<=m;i++) f>>a[i]>>b[i]>>c[i]; for(i=1;i<n;i++) for(j=i+1;j<=n;j++) if(c[i]>c[j]) { aux=c[i];c[i]=c[j];c[j]=aux; aux=a[i];a[i]=a[j];a[j]=aux; aux=b[i];b[i]=b[j];b[j]=aux; } cout<<"varful initial:";cin>>x0; d[x0]=0; viz[x0]=1; cost=0; for(k=1;k<n;k++) { ok=0; i=1; while(ok==0) { x=a[i]; y=b[i]; if(viz[x]+viz[y]==1) ok=1; else i++; } cost+=c[i]; sol[k]=i; if(viz[x]==0) pred[x]=y; else pred[y]=x; viz[x]=viz[y]=1; } cout<<"Rezultate\n"; cout<<"Cost APM="<<cost<<'\n'; cout<<"Muchiile selectate:\n"; for(i=1;i<n;i++) cout<<"Muchia "<<sol[i]<<" ("<<a[sol[i]]<"," <<b[sol[i]]<<") de cost "<<c[sol[i]]<<'\n'; f.close(); }

ANEXE

Anexa 7 Kruskal.cpp
#include<iostream.h> #include<fstream.h> int a[20],b[20],c[20],d[20],n,m,viz[20],sol[20],pred[20], INF=999,drum[20]; int main(void) { int i,j,x,y,z,x0,k,MIN,aux,cost,ok; ifstream f("grafncost.in");//graf orientat cu arce pozitive f>>n>>m; for(i=1;i<=m;i++) f>>a[i]>>b[i]>>c[i]; for(i=1;i<n;i++) for(j=i+1;j<=n;j++) if(c[i]>c[j]) { aux=c[i];c[i]=c[j];c[j]=aux; aux=a[i];a[i]=a[j];a[j]=aux; aux=b[i];b[i]=b[j];b[j]=aux; } cout<<"varful initial:";cin>>x0; d[x0]=0; viz[x0]=1; cost=0; for(k=1;k<n;k++) { ok=0; i=1; while(ok==0) { x=a[i]; y=b[i]; if(viz[x]+viz[y]==1) ok=1; else i++; } cost+=c[i]; sol[k]=i; if(viz[x]==0) pred[x]=y; else pred[y]=x; viz[x]=viz[y]=1; } cout<<"Rezultate\n"; cout<<"Cost APM="<<cost<<'\n'; cout<<"Muchiile selectate:\n"; for(i=1;i<n;i++) cout<<"Muchia "<<sol[i]<<" ("<<a[sol[i]]<<"," <<b[sol[i]]<<") de cost "<<c[sol[i]]<<'\n'; f.close(); }

ANEXE

Anexa 8 Conex.cpp
#include<iostream.h> #include<fstream.h> int a[20][20],n,m,viz[20],pred[20],d[20],c[20]; int bfs(int x0, int cc) { int u,p,i; u=p=1; viz[x0]=cc; c[p]=x0; while(p<=u&&u<n) { for(i=1;i<=n;i++) if(viz[i]==0 && a[c[p]][i]==1) { c[++u]=i; viz[i]=cc; pred[i]=c[p]; d[i]=d[c[p]]+1; } p++; } return u; } int main(void) { int i,j,x,y,x0,k; ifstream f("grafn.in"); f>>n>>m; for(i=1;i<=m;i++) { f>>x>>y; a[x][y]=a[y][x]=1; } int ct=0,cc=0; i=1; while(ct<n) { if(viz[i]==0) { cc++; k=bfs(i,cc); ct+=k; } i++; } for(i=1;i<=cc;i++) { cout<<"componenta conexa "<<i<<":"; for(j=1;j<=n;j++) if(viz[j]==i) cout<<j<<' '; cout<<'\n'; }

ANEXE

//determinarea celei mai mari componente conexe int max=0,dmax=0; for(i=1;i<=cc;i++) { int ct=0; for(j=1;j<=n;j++) if(viz[j]==i) ct++; if(ct>dmax) { dmax=ct; max=i; } } cout<<"\nComponenta conexa maxima:"; for(i=1;i<=n;i++) if(viz[i]==max) cout<<i<<' '; //Transformarea grafului neconex in unul conex cout<<"\nMuchiile care transforma graful in sunt:\n"; ct=0; i=1; while(ct<cc-1) { if(viz[i]!=viz[i+1]) { ct++; cout<<'('<<i<<','<<i+1<<")\n"; k=viz[i+1]; for(j=i+1;j<=n;j++) if(viz[j]==k) viz[j]=viz[i]; } i++; } f.close(); }

unul

conex

ANEXE

Anexa 9 Bipartit.cpp
#include<iostream.h> #include<fstream.h> int a[20][20],n,m,viz[20],pred[20],d[20],c[20]; int u,p; int main(void) { int i,j,x,y,x0; ifstream f("grafn.in"); f>>n>>m; for(i=1;i<=m;i++) { f>>x>>y; a[x][y]=a[y][x]=1; } x0=1; u=p=1; viz[x0]=1; c[p]=x0; int ok=1; while(p<=u&& ok==1) { for(i=1;i<=n;i++) if(viz[i]==0 && a[c[p]][i]==1) { c[++u]=i; viz[i]=1; pred[i]=c[p]; d[i]=d[c[p]]+1; } else if(viz[i]==1 && a[c[p]][i]==1 && (d[i]+d[c[p]])%2==0) ok=0; p++; } if(ok==1) { cout<<"Graf bipartit\n"; cout<<"Partitiile sunt:\n"; cout<<"Partitia 1:"; for(i=1;i<=n;i++) if(d[i]%2==0) cout<<i<<' '; cout<<"\nPartitia 2:"; for(i=1;i<=n;i++) if(d[i]%2==1) cout<<i<<' '; } else cout<<"Graful NU E BIPARTIT"; f.close(); }

ANEXE

Anexa 10 Raza_Diam.cpp
#include<iostream.h> #include<fstream.h> int c[20][20],n,m,pred[20][20],INF=999,drum[20]; int main(void) { int i,j,x,y,z,x0,k,MIN; ifstream f("grafn.in");//graf neorientat f>>n>>m; for(i=1;i<=n;i++) for(j=1;j<=n;j++) c[i][j]=INF; for(i=1;i<=m;i++) { f>>x>>y; c[x][y]=c[y][x]=1; pred[x][y]=x; } for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) if(c[i][k]<INF && c[k][j]<INF && i!=j && j!=k) if (c[i][j]>c[i][k]+c[k][j]) { c[i][j]=c[i][k]+c[k][j]; pred[i][j]=pred[k][j]; } cout<<"nod 1=";cin>>x; int e=0; for(i=1;i<=n;i++) if(c[x][i]>e && c[x][i]!=INF) e=c[x][i]; cout<<"excentricitatea nodului "<<x<<"="<<e<<'\n'; int r=INF,d=0; for(i=1;i<=n;i++) for(j=1;j<=n;j++) { if(c[i][j]<r) r=c[i][j]; if(c[i][j]>d && c[i][j]<INF) d=c[i][j]; } cout<<"raza grafului ="<<r<<'\n'; cout<<"diametrul grafului ="<<d; f.close(); }

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