Sunteți pe pagina 1din 11
1.4. ALGORITMUL LUI DIJKSTRA Ideea de baz& a algoritmului lui Dijkstra este ge a pleca din nodul s gi a eticheta celelalte noduri fn, ordinea dep&rt&rii lor, fn sensul lungimii, de nodul 8- Fiec&rui nod j i se asociaz& o variabila p(j), care in orice moment retine cea mai micd lungime a Gyumurilor de la nodul s la i. p(s)=0. Se consider& doud liste L si T. L este o lista cu noduri permanente (valorile sunt fixate), iar To jist’ cu noduri temporare modificate) - Initial, L={s} $i T se compune din acele noduri jeX pentru care ruta orientata (s,j) este permisa. Un nod 4° din lista T a c&rui variabild p(i’) are valoarea cea mai mic& se include in lista L. Nodui i° devine permanent. in lista T se includ apoi, toate nodurile j, care nu sunt Jnscrise in aceasta list si ruta (i7,j) este PERMISA. Pentru a reconstitui drumurile de lungime minim& de la s la toate nodurile ce pot fi atinse din s, folosind rute orintate PERMISE ale grafului, introduce pentru fiecare nod j#s (valorile pot fi se din graf un 23 N i \ | indicator PRED(j). Acest indicator va retine in 0% ja) moment, ultimul nod dinaintea lui 3, pe drumul 6° yx s la j care a fost gisit a avea cea mai sc lungime pan& in acel moment. PRED(s) = 9. Algoritmul lucreaz& intr-un tabel cu coloanel®: iteratia, lista Lb, nodul 4, variabila pij) 9 indicatorul PRED(j). Faptul c& un nod j este inclus fn lista permanent& L, se marcheaz& prin "*" fn stanga tabelului (colana L), in dreptul nodului 3. th orice moment, nodurile din tabel f&r& marcajul "*» apartin listei temporare T. fin stanga tabelului se precizeazd iteratia in care nodul respectiv este permanentizat in lista L, prin marcarea cu "*": INITIALIZARE. in start, tabelul contine nodul s marcat cu "*" gsi acele noduri j pentru care ruta orientat& (s,j) este permisa. Corespunzator p(s)=0, P(j)=vy PRED (3) Se considera marcarea nodului s ca fiind iteratia 0 (zero). CONTINUTUL UNEI ITERATII. © PASUL 1. Dac&, in tabel, lista T este vid&, atunci toate nodurile sunt permanente (marcate cu "*"), Graful este analizat in intregime si algoritmul se opreste. @ PASUL 2. Se alege i’eT cu proprietatea p(i*) = min p(j) er Dac& ivst algoritmul se opreste, gsi se determina drumul de lungime minima de la s la t. in caz contrar, nodul i° este transferat in lista L, prin marcarea cu "*" si astfel, este scos din litera T. in lista T se inscriu toate nodurile jéT cu proprietatea c& ruta (i*,j) este permis&. se ia p(j)= si PRED(j)=0 @ PASUL 3. Se corécteaz& valorile variabi- lelor corespunzdtoare nodurilor jeT adiacente cu nodul i° comparand 24 e eous . PG) cu pli dev. a) Pact p(j) > pli )+y., atunci p(j)=plid+yy si ED (3) =4 . . = PANS 'p) Dac P(J)=P IL) +) atunci ie PREDLS) ce) Dack p(j) 4) -1 po) P(A) t May ofa} | p(7) =00> P(A) + Vy, = 14788 PAT) = By PRED) ~ | ‘| ge i gi fig. 1.23 sunt PU yim in tabelul 1.6 algoritmului dupa evident’ rezultatele iteratie- ITERAFIA 2. P;) r= {1-2,5.71 *2 2 =p) = beads P,) min p(j) jer : Nodul 1 este inclus fin lista L si scos din lista T. Noduri adiacente cu nodul 1, neincluse in lista T, nu exist&, deci, T= 2,5,7} P,) p(2)=3=p(1) #y,22+1=3 =» 1€PRED(2) Iteratia 2 este pusa& in evidenta in tabelul 1.7. gi fig. 1.14. Se observa ca PRED (y= {a2 Tabelul 1.7. rc Iteratia L a pl) | PRED (j) 0 fle 0 | : 2 * a 2 3 i 2 3 a)1 1 { * 1 4 2 > = ae | ZO 14 Ee i | 28 14 ul J Fig.1.14. Rute dupa iteratia 2 ITERATIA 3. P,) T={2,5,7i #0 P,) min p(f) =3.=pl2) = per Nodul 2 este marcat cu (*) in lista L. in lista q mu se introduce un alt nod adiacent, pentru ci, acestea, sunt deja in list&. T-(s,7} p3) p(S) = 7 < pl2)4va= 345-8 p(7) = 8 > pl2)+vy= 344-7 - P(7)=7 pred(7)={2} Dupa a treia iteratie rezultatele sunt evidentiate in tabelul 1.8. gi noile rute in graful din fig. 1.15. Tabelul 1.8 Iteratia L 3. |p PRED (3) oO * 3 oO . 2 * 1 2 | 3 3 ~|2[3 3;l 1 * | 4 1 __| 3 s 7 14 7 lee |= ke | 29 Fig.1.15. Rute dup& iteratia 3 ITERATIA 4. P,) T=15,7!42 P.) minp(j)=7=p(5)=p(7) + 4 _ Se permanentizeazi gsi nodul 5 gi nodul 7, Marcéndu-le pe amandoud cu (*) in lista L. fn lista T se introduc nodurile 6 gi 8 fiind adiacente cu nodurile 5 si 7. Se ia P(6)=p(8) =0, PRED (6) =PRED(8)=9. T={6,8}. Tabelul 1.9. ji [| ego PRED (j) 7 Oo a 2 : | | Iteratia | L oO * {tt | 2, 3 1 * 4 4 3 1 2 4 5 7 6 8 = 30 Fig.1.16. Rute dup& iteratia 4 ees 9 = p(6)= 9, PRED(6)={5} 9 < p(7)+ nu se corecteazd © 5 p{S) +Vs¢: eae = p(8)=11, peeDieale } p(8)=11 > p(7)+v_=7+3=10 = p(8)=10, PRED(8)={7} TTRRATIA S. FL) PF ={6,.8}4 0 P,) min p(j) =9 =p(6) = er Se permanentizeaz& nodul 6. T={8}. P3) p(s) + 10 « (6) + Vm = 9+ 2 = 11, nu se corecteaza. Tabe. i, 1.10. 1 tera’ L +} pi) _}_PRED (i) ° 7 Ff 0 = 2 ¥. i. 2 3 - {| a 3 3:1 | 1 a 4 A. 3 4 }_ _* 21} = 4 cE A Aa ay 5 * 6 ae) =.5 8 | 6,10 xT. 31 oye” ia jrexat™ Rutele nu se modific& si situatia dupa este prezentata in tabelul 1-10. ITERAFIA 6. P,) T= {8} *@ P,) min P(j) =10 = pls) = if der Nodul 8 se permanentizeazd si se S¢ lista T. T=0. Tabelul 1.11 Iteratia : PRED (3) ° . 2 3 ITERAFIA 7. P,) T=0 Algoritmul se opreste. Graficul rutelor de valoare minima, conform tabelului 1.11. este prezentat in fig. 1.17. Valoarea minima este scrisX la fiecare nod intre Paranteze patrate. De exemplu, de la nodul 3 1a P nodul 8 existg nime cu lungime egalx i mi (3,1,2,7,8] $i ws=(3,2,7,8), 32

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