90 likes | 245 Views
Teoria grafurilor orientate si modul in care l-au ajutat pe aladin. Intr -o pestera intunecata Aladin a gasit o lampa fermecata . Nu stia cui apartine asa ca a furat -o, iesind in fuga in noaptea instelata . La lumina lunii a stat si s-a gadit :
E N D
Teoriagrafurilor orientate simodul in care l-au ajutatpealadin Intr-o pesteraintunecata Aladin a gasit o lampafermecata. Nu stia cui apartineasa ca a furat-o, iesind in fuga in noapteainstelata. La luminalunii a stat si s-a gadit: “La cesafolosesclampa cu aurpoleit’? Stand pe o piatra a inceput s-o frecenestiindputereaeimagica.
Un duh magic a iesit din lampa, era albastrusi cam grasiarAladin s-a speriat. Acestai-a promisindeplinirea a 3 dorinte. Aladinneincrezator in putereaduhului a cerut-o chiarpefrumoasaprinteza din castel. Atunciduhuli-a spus : “Problemataesteusor de rezolvat, solutiatasta in grafuri”. Aladini-a cerutsa I le explice…
Grafuri: noţiuni de bază Definiţia Un graf orientat este un cuplu G(X,U), unde X este o mulţime finită şi nevidă de elemente numite vîrfuri, şi UXX este o mulţime de elemente numite arce. Fie un arc u=(x,y)U. Spunem că arcul u are sensul (sau orientarea) de la x la y. Vîrful x este extremitate iniţială şi predecesorul lui y, şi vîrful y este extremitate finală şi succesorul lui x. Deci în precizarea unui arc contează ordinea vîrfurilor. Două vîrfuri sînt adiacente dacă între ele există un arc. Două arce distincte sînt adiacente dacă au o extremitate comună. Fiind dat un graf orientat G(X,U), un drum în graful G este o succesiune de arce cu proprietatea că extremitatea terminală a unui arc coincide cu extremitatea iniţială a arcului următor din drum. Un drum se poate defini şi prin succesiunea de vîrfuri care sînt extremităţi ale arcelor ce compun drumul: o succesiune de vîrfuri cu proprietatea că orice două vîrfuri consecutive sînt unite printr-un arc. Să observăm că într-un drum toate arcele au aceeaşi orientare, de la vîrful iniţial la vîrful final. În schimb într-un lanţ fiecare arc poate avea orice orientare.
Aladin a inceputsaisidesenezehartasisadecidace drum artrebuisaaleaga. • Problemaceluimaiscurt drum • Presupunem ca avem un grafcecontine n nodurinumerotate de la 1 la n. Notam cu A(i) multimeanodurilor • j pentru care exista un arc (i, j) de la noduli. Nodul 1 este un nod special numitdestinatie. Presupunme • ca A(1) estevida. Pentrufiecare arc (i, j) avem un scalar aij care reprezintalungimeaarcului. Lungimea • drumului {(i, i1), . . . ,(ik, j)} care incepe din nodulisi se termina in nodul j prinsuma aii1 + · · · + aikj. Se • puneproblemagasiriideluimaiscurt drum sau a unui drum de lungime minima pornind din fiecare nod i. • Presupunem ca exista un drum de la fiecare nod i = 2, . . . , n la noduldestinatie 1 si ca fiecareciclu are • lungimepozitiva. • Drumul de lungimeminmareprezintasolutiasistemului .
Aladintrebuiesaajunga din nodul 2 in nodul 1. Pentru a determinacelmai rapid drum acestailroagape duh sa ii aratealgoritmul. AstfelduhulilinvataAlgoritmulFloyd-Warshall.
Algoritmul Floyd-Warshall Algoritmul Floyd-Warshall Incepe cu conditiileinitiale: x0ij ={aij, dacaj ∈ A(i) ∞, altfel sigenereazasecventialpentru k = 0,1, . . . , n − 1 sipentrutoatenodurileisi j xk+1ij ={min{xkij, xkik+1 + xkk+1j}, dacaj ̸= I ∞, altfel} • Algoritmul de dublareestedat de urmatoareleformule: x1ij ={aij, daca j ∈ A(i) 0, dacai = j ∞, altfel} xk+1ij ={min m{xkim + xkjm}, daca j ̸= I; 0, dacai = j} Acum ca Aladinstiealgoritmulpoate merge dupafrumoasaluiprintesa.
Matricea drumurilor. Este o matrice d cu n linii şi n coloane, în care fiecare element d[i,j] este : - 1, dacă există drum de la nodul i la nodul j în graf; - 0, în caz contrar. Algoritmul de determinare a matricei drumurilor Matricea drumurilor se obţine aplicând matricei de adiacenţă transformări succesive. Vom spune că există drum de la nodul i la nodul j, dacă găsim un nod k (diferit de i, j) cu proprietatea că există drum de la i la k şi drum de la j la k. Astfel: un element a[i, j] care este 0, devine 1, dacă există un nod k astfel încât a[i, k]=1 şi a[k, j]=1. Pentru a găsi arcele nodului k, trebuie parcurse pe rând în varianta k toate nodurile 1, 2, …, n. for k:=1 to n do for i:=to n do {i≠k} for j:=1 to n do {j≠k} if (a[i, j]=0) and (i<>k) and (j<>k) then a[i, j]:=a[i,k]*a[k, j]; Atribuirea a[i, j]:=a[i,k]*a[k, j] este o scriere elegantă a regulii de mai sus: în cazul în care unul din elementele a[i,k], a[k, j] este 0, a[i, j] va rămâne 0; dacă a[i, k]=1 şi a [k, j]=1, atunci a[i, j] devine 1.
Cu ajutorulgrafurilor orientate aladinsi-a salvatprintesasi au zburatamandoipecovorul magic. SFARSIT.