Documente Academic
Documente Profesional
Documente Cultură
- Curs 2-
Cuprins – Curs 2: Drumuri de valoare minimă
1. Preliminarii
2. Algoritmul Dijkstra
3. Exemple de aplicații
4. Recapitulare
camelia.delcea@csie.ase.ro 2
Urmează:
1. Preliminarii
camelia.delcea@csie.ase.ro 3
1. Preliminarii
1.1. Problema drumului de valoare minimă
Dacă e E este o muchie cu extremităţile xi şi xj atunci această muchie are o orientare permisă
prin arcele (xi, xj) şi (xj, xi). În acest mod, un graf neorientat este tratat ca graf orientat G = (V, U).
În continuare, ne referim numai la grafuri orientate finite.
Dacă arcul u este dat prin extremităţile sale u = (xi, xj), cu xi, xj V, valoarea arcului va fi dată prin
notaţiile v(xi, xj) sau vij.
Dacă u este o muchie în graful G = (V, E) atunci v(u) = v(xi, xj) = v(xj, xi), deci pe ambele sensuri
arcele au aceeaşi valoare
camelia.delcea@csie.ase.ro 4
1. Preliminarii
1.1. Problema drumului de valoare minimă
Pentru un drum între nodul xi şi nodul xj , precizat prin specificarea arcelor componente, se
defineşte valoarea drumului ca fiind suma valorilor arcelor componente:
v() = vu .
u
Din noţiunile introductive ştim că un drum este o succesiune de arce permise și orientate în
acelaşi sens, de la nodul iniţial al arcului u1 către nodul final al arcului uq.
Dacă u1 = (x0, x1), u2 = (x1, x2), ..., uq = (xq-1, xq) sunt arcele date prin extremităţile lor, atunci un
drum poate fi definit şi prin succesiunea de noduri:
= (x0, x1, x2, ..., xq)
Nodul x0 este extremitatea de start a drumului iar nodul xq extremitatea finală. Dacă
extremităţile sale coincid (x0 = xq) atunci drumul este un circuit.
camelia.delcea@csie.ase.ro 5
1. Preliminarii
1.1. Problema drumului de valoare minimă
Un drum este elementar dacă nodurile sale sunt distincte (drumul trece o singură dată prin fiecare
nod al său).
Un drum este simplu dacă arcele sale sunt distincte (drumul trece o singură dată prin fiecare arc
al său). Evident, orice drum elementar este şi simplu. Reciproca nu este, în general, adevărată.
camelia.delcea@csie.ase.ro 6
1. Preliminarii
1.1. Problema drumului de valoare minimă
O problemă: determinarea unui drum elementar (sau a drumurilor elementare), între două noduri
date, de valoare minimă (sau de valoare maximă).
Dacă graful G nu este conex şi nodurile s şi t nu fac parte din aceeaşi componentă conexă sau
orientările pe arce nu permit atingerea nodului t din nodul s, există posibilitatea ca în graful G să
nu existe drumuri de la s la t.
camelia.delcea@csie.ase.ro 7
1. Preliminarii
1.2. Etichete și notații
Eticheta d(i)
Fie s nodul inițial al unui drum ce se dorește a fi aflat și t nodul terminal al acestuia.
Fiecărui nod din graf, i, i se va asocia o variabilă d(i) numită eticheta nodului i.
d(i) reţine valoarea unui drum de la s la i găsit de algoritm până în acel moment
Dacă algoritmul nu a găsit încă un drum de la s la i variabila d(i) are valoarea +∞.
La finalul aplicării metodei, eticheta indică valoarea celui mai „scurt” drum de la nodul s la nodul i.
camelia.delcea@csie.ase.ro 8
1. Preliminarii
1.2. Etichete și notații
Fiecărui nod din graf, i, iferit de s, i se va asocia o altă variabilă d(i) numită indicator de
precedență cu următoarea semnificaţie: în oricare moment al aplicării algoritmului:
PRED(i) conţine ultimul nod dinaintea lui i pe drumul de la s la i găsit de algoritm până
în acel moment.
Atâta timp cât un asemenea drum nu a fost găsit d(i) = +∞, indicatorul PRED(i) nu este definit el
fiind o locaţie vidă (PRED(i) = ø).
camelia.delcea@csie.ase.ro 9
1. Preliminarii
1.2. Etichete și notații
Listele P și T
În vederea aplicării algoritmului Dijkstra, se vor inițializqaa două liste după cum urmează:
• o listă P în care vom include toate nodurile i pentru care algoritmul a găsit un drum de valoare
minimă de la i la s (lista nodurilor cu eticheta declarată permanentă). La start P se reduce la
nodul de plecare s.
• o listă T în care vom include toate nodurile i care sunt vecine cu noduri din lista P: un nod j
este vecin cu i dacă arcul (i,j) este permis. T este lista nodurilor cu eticheta declarată
temporară.
camelia.delcea@csie.ase.ro 10
1. Preliminarii
1.2. Etichete și notații
Listele P și T
Nodurile cu etichetă permanentă din lista P se selectează din lista T a nodurilor candidate.
Corectarea unei etichete se face după următoarea schemă echivalentă:
camelia.delcea@csie.ase.ro 11
1. Preliminarii
1.2. Etichete și notații
Listele P și T
Dacă d(i) + v(i,j) < d(j) atunci primul drum are o valoare mai mică şi ca urmare va fi reţinut de
algoritm ca fiind cel mai bun drum de la s la j găsit până în acest moment.
Memorarea acestui nou drum se face prin corectarea etichetei d(j) care ia valoarea d(j) = d(i) +
v(i,j) şi actualizarea indicatorului de precedenţă PRED (j): PRED (j) = i.
camelia.delcea@csie.ase.ro 12
Urmează
2. Algoritmul Dijkstra
2.1. START
2.2. Cuprinsul unei iterații
2.3. Condiția de oprire
2.4. Observații
camelia.delcea@csie.ase.ro 13
2. Algoritmul Dijkstra
2.1. START
START: Iniţializăm:
P s;
T i V / există arcul permis s, i U ;
d s 0 ; d i vs, i pentru i T si d i în rest;
PRED i s pentru i T şi PRED j nedefinit în rest.
camelia.delcea@csie.ase.ro 14
2. Algoritmul Dijkstra
2.2. Cuprinsul unei iterații
ITERAŢIE:
Pas 1: Dacă lista T e vidă, STOP: algoritmul a găsit toate nodurile ce pot fi atinse din s de-a lungul
unor drumuri de valoare minimă, toate nodurile sunt în lista P şi valorile minime ale drumurilor de la s la aceste
noduri sunt indicate de etichetele corespunzătoare. Identificarea drumului de valoare minimă se face cu ajutorul
indicatorului de precedenţă, din aproape în aproape, de la t (sau de la fiecare nod al grafului) către s.
Dacă T se trece la pasul 2.
Pas 2: Se selectează nodul i T cu proprietatea: d i min d i , i T
Se transferă nodul i din lista T în lista P ( i devine nod cu eticheta permanentă). Drumul de la s la
i găsit până în momentul selectării este un drum de valoare minimă. Se adaugă la lista T toate nodurile
j V s care nu figurau în această listă, noduri adiacente lui i pentru care există arcul i , j U .
camelia.delcea@csie.ase.ro 15
2. Algoritmul Dijkstra
2.2. Cuprinsul unei iterații
Pas 3: Pentru fiecare nod j T , vecin cu i se compară d j cu suma d (i* ) v i , j
- Dacă d i v i , j d j se trece la examinarea altui nod din T vecin cu i ;
- Dacă d i vi , j d j se fac actualizările:
d j d i vi , j şi
PRED j i
după care se trece la examinarea altui nod din lista T vecin cu i .
După examinarea tuturor vecinilor lui i din T se revine la Pasul 1 în cadrul unei noi iteraţii.
camelia.delcea@csie.ase.ro 16
2. Algoritmul Dijkstra
2.3. Condiția de oprire
camelia.delcea@csie.ase.ro 17
2. Algoritmul Dijkstra
2.4. Observații
NOTĂ:
1) Dacă algoritmul se termină la Pasul 1 şi d(t) = +, în graful G NU există nici un drum de la s la
t (vezi situaţiile din figura 1.13).
2) Aplicarea Algoritmului Dijkstra nu rezolvă doar problema găsirii drumului de valoare minimă
de la s la t ci a TUTUROR drumurilor de valoare minimă de la s la toate celelalte noduri ale
grafului G.
camelia.delcea@csie.ase.ro 18
Urmează
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
3.2. Aplicația 2
3.3. Aplicația 3
3.4. Aplicația 4 – rezolvată QM
camelia.delcea@csie.ase.ro 19
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
camelia.delcea@csie.ase.ro 20
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
START: Iniţializăm:
Listele P s, T x, y, z
d s 0; d x 4, d y 8, d z 3; d i în rest;
PRED i s pentru i T şi PRED j nedefinit în rest.
ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
camelia.delcea@csie.ase.ro 21
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
IT 1 - 4 s 8 s 3* s 6 z +∞ -
camelia.delcea@csie.ase.ro 22
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
IT 1 - 4 s 8 s 3* s 6 z +∞ -
IT 2 - 4* s 7 x - - 5 x +∞ -
camelia.delcea@csie.ase.ro 23
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
IT 1 - 4 s 8 s 3* s 6 z +∞ -
IT 2 - 4* s 7 x - - 5 x +∞ -
IT 3 - - - 7 x - - 5* x +∞ -
camelia.delcea@csie.ase.ro 24
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
Iteraţia 4: i y
P s, z, x, t , y; T
i y nu are nici un vecin cu etichetă nepermanentă.
STOP, pentru că T .
ITERAŢIA d(s) d(x) PRED(x) d(y) PRED d(z) PRED d(t) PRED d(w) PRED
(y) (z) (t) (w)
START 0* 4 s 8 s 3 s +∞ - +∞ -
IT 1 - 4 s 8 s 3* s 6 z +∞ -
IT 2 - 4* s 7 x - - 5 x +∞ -
IT 3 - - - 7 x - - 5* x +∞ -
IT 4 - - - 7* x - - - - +∞ -
STOP 0 4* s 7 x 3 s 5 x +∞ -
camelia.delcea@csie.ase.ro 25
3. Exemple de aplicații
3.1. Aplicația 1 - rezolvată
Drumurile de valoare minimă se construiesc cu ajutorul indicelui de precedenţă şi sunt vizualizate în figura
următoare
camelia.delcea@csie.ase.ro 26
3. Exemple de aplicații
3.2. Aplicația 2
camelia.delcea@csie.ase.ro 27
3. Exemple de aplicații
3.3. Aplicația 3
Se dă graful de mai jos.
Să se găsească drumul de valoare minimă de la vârful v1 la vârful v9.
camelia.delcea@csie.ase.ro 28
3. Exemple de aplicații
3.3. Aplicația 4
Se dă graful de mai jos.
Să se găsească drumul de valoare minimă de la nodel 5 la nodul 4.
camelia.delcea@csie.ase.ro 29
3. Exemple de aplicații
3.3. Aplicația 4
camelia.delcea@csie.ase.ro 30
3. Exemple de aplicații
3.3. Aplicația 4
camelia.delcea@csie.ase.ro 31
3. Exemple de aplicații
3.3. Aplicația 4
camelia.delcea@csie.ase.ro 32
3. Exemple de aplicații
3.3. Aplicația 4
camelia.delcea@csie.ase.ro 33
4. Recapitulare
Despre ce am discutat astăzi?
• Algoritmul Dijkstra
• Circuit
• Distanța de la nodul inițial la nodul curent, i: d(i)
• Drum elementar
• Drum simplu
• Lista nodurilor permanente, P
• Lista nodurilor temporare, T
• Predecesorul nodului i: PRED(i)
camelia.delcea@csie.ase.ro 34
Mulțumesc!