tipuri de grafuri

Download tipuri de grafuri

Post on 23-Oct-2015

14 views

Category:

Documents

1 download

Embed Size (px)

DESCRIPTION

definitia grafurilortipuri de grafurialgoritmi pentru determinarea drumului minim intr-un graf

TRANSCRIPT

Notiuni generale. n general, pentru situaiile care necesit la rezolvare un oarecare efort mintal (i un caz tipic este cel al celor din economie), se caut, n primul rnd, o metod de reprezentare a lor care s permit receptarea ntregii probleme dintr-o privire (pe ct posibil) i prin care s se evidenieze ct mai clar toate aspectele acesteia.

n acest scop se folosesc imagini grafice gen diagrame, schie, grafice etc. O reprezentare dintre cele mai utilizate este cea prin grafuri. Acestea sunt utilizate n special pentru vizualizarea sistemelor i situaiilor complexe. n general, vom reprezenta componentele acestora prin puncte n plan iar relaiile (legturile, dependenele, influenele etc) dintre componente prin arce de curb cu extremitile n punctele corespunztoare. ntre dou puncte pot exista unul sau mai multe segmente (n funcie de cte relaii dintre acestea, care ne intereseaz, exist) iar segmentelor li se pot asocia sau nu orientri (dup cum se influeneaz cele dou componente ntre ele), numere care s exprime intensitatea relaiilor dintre componente etc.

Este evident, totui, c aceast metod are limite, att din punct de vedere uman (prea multe puncte i segmente vor face desenul att de complicat nct se va pierde chiar scopul pentru care a fost creat claritatea i simplitatea reprezentrii, aceasta devenind neinteligibil) ct i din punct de vedere al tehnicii de calcul (un calculator nu poate "privi" un desen ca un om).

Din acest motiv, alturi de expunerea naiv-intuitiv a ceea ce este un graf, dat mai sus, se impune att o definiie riguroas ct i alte modaliti de reprezentare a acestora, adecvate n general rezolvrilor matematice.

Definiia 1 Se numete multigraf un triplet G = (X, A, f) n care X i A sunt dou mulimi iar f este o funcie, definit pe produsul vectorial al lui X cu el nsui (X2 = XX), care ia valori n mulimea prilor mulimii A (notat P(A))

Mulimea X se numete mulimea nodurilor multigrafului i elementele sale se numesc noduri (sau vrfuri) ale multigrafului, iar A reprezint mulimea relaiilor (legturilor) posibile ntre dou noduri ale multigrafului.

Definiia 2 Se numete graf orientat un multigraf n care mulimea A are un singur element: A = {a}.

n acest caz mulimea prilor mulimii A are doar dou elemente: mulimea vid i ntreaga mulime A. Dac unei perechi orientate (xi, xj) din X2 i se asociaz prin funcia f mulimea A atunci spunem ca exist arc de la nodul xi la nodul xj iar perechea (xi,xj) se va numi arcul (xi,xj). Nodul xi se numete nod iniial sau extremitate iniial a arcului (xi,xj) iar nodul xj se numete nod final sau extremitate final a arcului (xi,xj). Arcul (xi,xj) este incident spre interior vrfului xj i incident spre exterior vrfului xi. Dac pentru un arc nodul iniial coincide cu nodul final atunci acesta se numete bucl. Nodurile xi i xj se vor numi adiacente dac exist cel puin unul din arcele (xi,xj) i (xj,xi).

Dac unei perechi orientate (xi, xj) din X2 i se asociaz prin funcia f mulimea vid atunci spunem c nu exist arc de la nodul xi la nodul xj.

Este evident c a cunoate un graf orientat este echivalent cu a cunoate vrfurile i arcele sale. Din acest motiv putem defini un graf orientat prin perechea (X,U), unde X este mulimea vrfurilor sale iar U mulimea arcelor sale.

De asemenea, putem cunoate un graf orientat cunoscnd mulimea nodurilor i, pentru fiecare nod, mulimea arcelor incidente spre exterior. Din acest motiv putem defini un graf orientat ca o pereche (X,) unde X este perechea nodurilor iar este o funcie definit pe X cu valori nmulimea prilor lui X, valoarea acesteia ntr-un nod xi, (xi) X fiind mulimea nodurilor adiacente nodului xi, prin arce pentru care xi este extremitatea iniial.

Definiia 3 Se numete graf neorientat un multigraf n care mulimea A are un singur element iar funcia f are proprietatea:

f[(xi,xj)] = f[(xj,xi)] , oricare ar fi nodurile xi i xj din X

n aceste condiii, dac f[(xi,xj)] = f[(xj,xi)] = A atunci perechea neorientat {xi,xj} este o muchie iar dac f[(xi,xj)] = f[(xj,xi)] = spunem c nu exist muchie ntre vrfurile xi i xj.

Deoarece, n cele mai multe din cazurile practice care vor fi analizate n acest capitol, situaia este modelat matematic printr-un graf orientat, vom folosi, pentru simplificarea expunerii, denumirea de graf n locul celei de graf orientat iar n cazul n care graful este neorientat vom specifica acest fapt la momentul respectiv.Moduri de prezentare ale unui graf

A. O prim modalitate de reprezentare este listarea efectiv a tuturor nodurilor i a arcelor sale.

B. Putem reprezenta graful dnd pentru fiecare nod mulimea nodurilor cu care formeaz arce n care el este pe prima poziie.

C. Putem reprezenta geometric graful, printr-un desen n plan, reprezentnd fiecare nod printr-un punct(cercule) i fiecare arc printr-un segment de curb care are ca extremiti nodurile arcului i pe care este trecut o sgeat orientat de la nodul iniial spre cel final.

D. Putem folosi o reprezentare geometric n care nodurile sunt reprezentate de dou ori, n dou iruri paralele, de la fiecare nod din unul din iruri plecnd sgei spre nodurile cu care formeaz arce n care el este pe prima poziie, de pe al doilea ir (reprezentarea prin coresponden).

E. Un graf poate fi reprezentat printr-o matrice ptratic boolean, de dimensiune egal cu numrul de noduri, n care o poziie aij va fi 1 dac exist arcul (xi,xj) i 0 n caz contrar, numit matricea adiacenelor directe.

F. Un graf poate fi reprezentat printr-o matrice ptratic latin, de dimensiune egal cu numrul de noduri, n care pe o poziie aij va fi xixj dac exist arcul (xi,xj) i 0 n caz contrar.

Exemplu: Dac n reprezentarea A avem graful G = (X,U), unde X = {x1, x2, x3, x4, x5, x6} i U = {(x1,x1), (x1,x2), (x1,x4), (x1,x5), (x2,x3), (x2,x4), (x2,x6), (x3,x1), (x3,x2), (x4,x5), (x5,x2), (x6,x4)}, atunci n celelalte reprezentri vom avea:

n teoria grafurilor, problema celui mai scurt drum const n gsirea unui drum astfel nct suma costurilor muchiilor constituente s fie minim. Un exemplu l constituie gsirea celei mai rapide modaliti de a trece de la o locaie la alta pe o hart; n acest caz nodurile sunt reprezentate de ctre locaiile respective, iar muchiile reprezint segmentele de drum, i

sunt ponderate, costurile constituind timpul necesar parcurgerii acelui segment.

Formal, fiind dat un graf ponderat (adic, o mulime de vrfuri V, o mulime a muchiilor E, i o funcie de cost:

f : E Rcu valori reale) i un element v al lui V, s se gseasc un drum P de la v la fiecare v din V astfel nct

s fie minim ntre toate drumurile ce leag v de v .

Uneori mai poate fi recunoscut sub numele de problema drumului cel mai scurt corespunztor perechii singulare, cu scopul deosebirii acesteia de urmtoarele generalizri: problema drumului cel mai scurt corespunztor sursei unice, o problem mai general, n care trebuie s gsim cele mai scurte drumuri de la un nod surs v la toate celelalte noduri ale grafului. problema drumului cel mai scurt corespunztor tuturor perechilor reprezint o problem i mai general, n care trebuie s gsim cele mai scurte drumuri ntre oricare pereche de noduri (vrfuri) v, v din graf. Ambele generalizri amintite au algoritmi mai performani n practic dect simpla rulare a algoritmului corespunztor drumului cel mai scurt n cazul perechii-unice (singulare) pentru toate perechile relevante de vrfuri.Algoritmi

Cei mai importani algoritmi care rezolv aceast problem sunt: Algoritmul lui Dijkstra rezolv problema sursei unice, dac toate muchiile sunt ponderate pozitiv Acest algoritm poate genera cele mai scurte drumuri de la un anumit punct de placare s la toate celelalte noduri.

Algoritmul Bellman-Ford rezolv problema sursei unice i pentru costuri negative ale muchiilor. Algoritmul Floyd-Warshall rezolv problema celor mai scurte drumuri corespunztoare tuturor perechilor. Algoritmul lui Kruskal este un algoritm n teoria grafurilor care gsete arborele parial de cost minim pentru un graf conex ponderat.Algoritmul lui Dijkstra

Prezentare algoritmAlgoritmul lui Dijkstra este un algoritm care calculeaza drumurile minime de la un nod dat pana la toate celalalte noduri. Grafurile pe care se aplica acest algoritm sunt, in general, ponderate si orientate si au un anumit cost de care se va tine seama in calcularea drumului minim.Un graf orientat este acel graf care poate avea muchie intre doua noduri cu o singura directie: ori se merge de la nodul A in nodul B, ori se merge de la nodul B in nodul A (ambele variante in acelasi timp sunt imposibile, altfel am avea un graf neorientat).

Un graf ponderat, este un graf in care avem asociat un cost fiecarei muchii. In cazul in care avem un graf neponderat, putem asocia ca drum de la un nod la altul minimul de muchii prin care se trece.

Algorimul lui Dijkstra, pentru a se putea rula, are nevoie ca date de intrare de un graf cu n noduri, de matricea de adiacenta a acestuia si de costul fieacrei muchii (toate acestea reprezentand un graf cu toate elementele sale) si nodul de start.

Dupa rularea algoritmului, acesta obtine un vector in care pune distanta minima de la nodul de start pana la fiecare nod in parte astfel:

D = [ dist A-A ; dist A-B ; dist A-C ; ; dist A-N ]

si un vector in care salveaza parintele direct al nodului la care afiseaza distanta minima. Acesta este un vector T care are n elemente.

EXEMPLU DE DATE INTRARE IESIRE:

Numarul de noduri: 3

Matrice de adiacenta:

010

001

000

Matrice de cost:

010

002

000

Nod de start: A

Acestea sunt datele de intrare care definesc graful desenat mai sus.

Datele de iesire vor fi:

D = [ 0 ; 1 ; 3 ] -> distanta A-A=0, distanta A-B=1 si distanta A-C=3;

T = [ - ; A ; B ] -> din A plecam, punem -, in nodul