Documente Academic
Documente Profesional
Documente Cultură
3 D
A
9 5 1
1 G
9 C 5 1 2 H
2 F 4
B
4 E 1 8
ALGORITMUL LUI DIJKSTRA
Algoritmul trebuie sa returneze urmatorul rezultat:
D=
- 7 1 3 3 4 5 ∞
T=
A E A A C E F -
A B C D E F G H
Tabloul D are cate o intrare pentru fiecare nod al grafului,
corespunzand lungimii drumului minim de la nodul A pana
la respectivul nod
Astfel, drumul minim de la A la A nu intereseaza (-),
drumul minim de la A la F are lungimea 4, drumul minim
de la A la H nu exista (∞), etc. 9
ALGORITMUL LUI DIJKSTRA
D: - 9 1 3 ∞ ∞ 9 ∞
3 D T: A A A A A A A A
A
9 5 1 A B C D E F G H
1 G
9 C 5 1 2 Nodurile marcate
H astfel sunt noduri
2 F 4 vizitate in graf de
B algoritmul lui Dijkstra
4 E 1 10
ALGORITMUL LUI DIJKSTRA
Cu alte cuvinte, presupunem ca drumurile
minime de la nodul A la celelalte noduri
din graf sunt alcatuite dintr-un singur
arc, adica arcul direct de la A la fiecare
din nodurile respective (simbolul ∞
semnifica lipsa arcului)
Astfel, drumurile minime gasite dupa
primul pas sunt cele ingrosate pe figura
anterioara
11
ALGORITMUL LUI DIJKSTRA
13
ALGORITMUL LUI DIJKSTRA
Exemplu pentru nodul E:
D[E] = ∞ este drumul cel mai scurt de la A la E pe care-l
aveam
D[C] + Arc(C , E) = 1 + 2 = 3 este drumul alternativ care trece
prin nodul C (nodul ales)
Deoarece noul drum este mai scurt decat drumul pe care-l
aveam rezulta ca D[E] se modifica din ∞ in 3 si T[E] se
modifica in C (nodul ales)
Se observa ca drumul alternativ trece prin nodul C (nodul
ales)
Drumul de la A la C de lungime D[C] fiind minim, daca
adaugam arcul C->E obtinem obligatoriu drumul minim de la
A la E care trece prin C
14
ALGORITMUL LUI DIJKSTRA
Procedand la fel pentru toate nodurile
nemarcate, obtinem urmatorul rezultat:
D: - 9 1 3 3 6 9 ∞
3 D T: A A A A C C A A
A
9 5 1 A B C D E F G H
1 G
9 C 5 1 2 Din nodul C au fost
H descoperite aceste 2
2 F 4 drumuri noi (mai
B scurte) catre E si 15
F
4 E 1
ALGORITMUL LUI DIJKSTRA
17
ALGORITMUL LUI DIJKSTRA
Exemplu pentru nodul G:
D[G] = 9 este drumul cel mai scurt de la A la G pe care-l
aveam
D[D] + Arc(D , G) = 3 + 5 = 8 este drumul alternativ care trece
prin nodul D (nodul ales)
Deoarece noul drum este mai scurt decat drumul pe care-l
aveam rezulta ca D[G] se modifica din 9 in 8 si T[G] se
modifica in D (nodul ales)
Se observa ca drumul alternativ trece prin nodul D (nodul
ales)
Drumul de la A la D de lungime D[D] fiind minim, daca
adaugam arcul D->G obtinem obligatoriu drumul minim de la
A la G care trece prin D
18
ALGORITMUL LUI DIJKSTRA
Procedand la fel pentru toate nodurile
nemarcate, obtinem urmatorul rezultat:
D: - 9 1 3 3 6 8 ∞
3 D T: A A A A C C D A
A
9 5 1 A B C D E F G H
1 G
9 C 5 1 2 Din nodul D a fost
H descoperit acest drum
2 F 4 nou (mai scurt) catre
B G
4 E 1 19
ALGORITMUL LUI DIJKSTRA
21
ALGORITMUL LUI DIJKSTRA
Exemplu pentru nodul B:
D[B] = 9 este drumul cel mai scurt de la A la B pe care-l
aveam
D[E] + Arc(E , B) = 3 + 4 = 7 este drumul alternativ care trece
prin nodul E (nodul ales)
Deoarece noul drum este mai scurt decat drumul pe care-l
aveam rezulta ca D[B] se modifica din 9 in 7 si T[B] se
modifica in E (nodul ales)
Se observa ca drumul alternativ trece prin nodul E (nodul
ales)
Drumul de la A la E de lungime D[E] fiind minim, daca
adaugam arcul E->B obtinem obligatoriu drumul minim de la
A la B care trece prin E
22
ALGORITMUL LUI DIJKSTRA
Procedand la fel pentru toate nodurile
nemarcate, obtinem urmatorul rezultat:
D: - 7 1 3 3 4 8 ∞
3 D T: A E A A C E D A
A
9 5 1 A B C D E F G H
1 G
9 C 5 1 2 Din nodul E au fost
H descoperite aceste 2
2 F 4 drumuri noi (mai
B scurte) catre B si 23
F
4 E 1
ALGORITMUL LUI DIJKSTRA
D: - 7 1 3 3 4 8 ∞
3 D A B C D E F G H
A
9 5 1
1 G
9 C 5 1 2 H
2 F 4
B
4 E 1 24
ALGORITMUL LUI DIJKSTRA
Tabloul D este:
- 7 1 3 3 4 8 ∞
A B C D E F G H
Pentru toate nodurile nemarcate trebuie sa verificam daca
nu exista un drum mai scurt care trece prin nodul F
Exemplu pentru nodul B:
D[B] = 7 este drumul cel mai scurt de la A la B pe care-l
aveam
D[F] + Arc(F , B) = 4 + ∞ = ∞ este drumul alternativ care trece
prin nodul F (nodul ales)
Acest al doilea drum este mai lung decat drumul pe care-l
aveam deci D[B] nu se modifica la acest pas
25
ALGORITMUL LUI DIJKSTRA
Exemplu pentru nodul G:
D[G] = 8 este drumul cel mai scurt de la A la G pe care-l
aveam
D[F] + Arc(F , G) = 4 + 1 = 5 este drumul alternativ care trece
prin nodul F (nodul ales)
Deoarece noul drum este mai scurt decat drumul pe care-l
aveam rezulta ca D[G] se modifica din 8 in 5 si T[G] se
modifica in F (nodul ales)
Se observa ca drumul alternativ trece prin nodul F (nodul
ales)
Drumul de la A la F de lungime D[F] fiind minim, daca
adaugam arcul F->G obtinem obligatoriu drumul minim de la
A la G care trece prin F
26
ALGORITMUL LUI DIJKSTRA
Procedand la fel pentru toate nodurile
nemarcate, obtinem urmatorul rezultat:
D: - 7 1 3 3 4 5 ∞
3 D T: A E A A C E F A
A
9 5 1 A B C D E F G H
1 G
9 C 5 1 2 Din nodul F a fost
H descoperit acest drum
2 F 4 nou (mai scurt) catre
B G
4 E 1 27
ALGORITMUL LUI DIJKSTRA
D: - 7 1 3 3 4 5 ∞
3 D A B C D E F G H
A
9 5 1
1 G
9 C Nu exista drumuri mai
5 1 2 scurte spre B sau H
H
2 F 4
trecand prin G, deci
B tablourile D si T raman
4 E 1 nemodificate 28
ALGORITMUL LUI DIJKSTRA
D: - 7 1 3 3 4 5 ∞
3 D A B C D E F G H
A
9 5 1
1 G
9 C Nu exista drum mai
5 1 2 scurt spre H trecand
H
2 F 4
prin B, deci tablourile
B D si T raman
4 E 1 nemodificate 29
ALGORITMUL LUI DIJKSTRA
D: - 7 1 3 3 4 5 ∞
3 D A B C D E F G H
A
9 5 1
1 G
9 C Nu mai exista noduri
5 1 2 nemarcate care sa fie
H
2 F 4
actualizate, deci
B tablourile D si T raman
4 E 1 nemodificate 30
ALGORITMUL LUI DIJKSTRA
Algoritmul se incheie deoarece nu mai sunt
noduri nemarcate
Rezultatul este:
D: - 7 1 3 3 4 5 ∞
T: A E A A C E F -
A B C D E F G H
Lungimile drumurilor minime de la A la celelalte
noduri din graf sunt disponibile in tabloul D
Tabloul T serveste la reconstituirea drumurilor
31
ALGORITMUL LUI DIJKSTRA
3 D
A
9 5 1
1 G
9 C 5 1 2 H
2 F 4
B
4 E 1 32
ALGORITMUL LUI DIJKSTRA
Tabloul T este:
A E A A C E F -
A B C D E F G H
Daca consideram ca acest tablou reprezinta un arbore
generalizat in implementarea cu indicatori spre parinte,
atunci drumul minim de la A la G poate fi reconstituit
pornind de la G:
T[G] = F
T[F] = E
T[E] = C
T[C] = A
34