Documente Academic
Documente Profesional
Documente Cultură
1. Notiuni introductive
2. Drumul minim între două vârfuri ale grafului
(algoritmul Dijkstra)
3. Drumul minim de la un vârf la toate vârfurile
grafului(algoritmul Dijkstra)
4. Drumul minim între toate perechile de vârfuri
(algoritmul Floyd)
1. Notiuni introductive.
Ponderea unei muchii (x,y) în graf este o caracteristică
numerică a relaţiei între vârfurile x şi y. Ea poate specifica
distanţa dintre vârfuri, sau capacitatea unui canal de
transmitere a datelor, a unei conducte, magistrale auto, etc.
Atribuirea ponderilor la muchiile unui graf permite formularea
unei serii noi de probleme, inclusiv probleme de optimizare.
Una dintre aceste probleme este problema drumurilor
minime.
Problema drumurilor minime într-un graf arbitrar G(X,U), muchiile
căruia au ponderi nenegative descrise de matricea costurilor C(i,j) este
de a determina un drum de lungime minimă între două vârfuri date s şi
t ale grafului, în condiţia că un asemenea drum există. Pentru problema
dată există mai multe formulări:
it. 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
0 0* ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ 1 1 1 1 1 1 1 1 1 1
It.1
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete di
It. 1 2 3 4 5 6 7 8 9 10
1 0* 10 ∞ 5 ∞ ∞ 6 ∞ ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 1 1 1 1 1 1
It.1
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
d5=min{d2, d4, d7}.
M={1, 4}
varf 1 2 3 4 5 6 7 8 9 10
1 0* 10 ∞ 5∗ ∞ ∞ 6 ∞ ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 1 1 1 1 1 1
It.1
Pas 4. Varful 10 are etichetă
constantă?
Repetăm pasul 2
it 1 2 3 4 5 6 7 8 9 10
1 0* 10 ∞ 5∗ ∞ ∞ 6 ∞ ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 1 1 1 1 1 1
It.2
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete di
M={1, 4}
Se vor recalcula
It. 1 2 3 4 5 6 7 8 9 10 următoarele etichete
1 0* 10 ∞ 5∗ ∞ ∞ 6 ∞ ∞ ∞ d =min{d , d +c }
2 2 1 12
d7=min{d7, d1+c17 d4+c47}
d5=min{d5, d4+c45}
1 2 3 4 5 6 7 8 9 10
d8=min{d8, d4+c48}
1 1 1 1 1 1 1 1 1 1
It.2
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete di
Se vor recalcula
următoarele etichete
It. 1 2 3 4 5 6 7 8 9 10 d =min{d , d +c }
2 2 1 12
2 0* 10 ∞ 5∗ 10 ∞ 6 10 ∞ ∞ d =min{d , d +c }
5 5 4 45
d7=min{d7, d1+c17 d4+c27}
1 2 3 4 5 6 7 8 9 10 d8=min{d8, d4+c48}
1 1 1 1 4 1 1 4 1 1
It.2
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
d7=min{d2, d5, d7, d8}.
M={1, 4,7}
It. 1 2 3 4 5 6 7 8 9 10
2 0* 10 ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 4 1 1 4 1 1
It.2
Pas 4. Varful 10 are etichetă
constantă?
Repetăm pasul 2
it 1 2 3 4 5 6 7 8 9 10
2 0* 10 ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 4 1 1 4 1 1
It.3
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete di
M={1, 4,7 }
Se vor recalcula
it 1 2 3 4 5 6 7 8 9 10 următoarele etichete
2 0* 10 ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞ d2=min{d2, d1+c12}
d5=min{d5, d4+c45}
1 2 3 4 5 6 7 8 9 10 d8=min{d8, d4+c48 d7+c78}
1 1 1 1 4 1 1 4 1 1
It.3
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete di
M={1, 4,7 }
Se vor recalcula
It. 1 2 3 4 5 6 7 8 9 10 următoarele etichete
3 0* 10 ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞ d2=min{d2, d1+c12}
d5=min{d5, d4+c45}
1 2 3 4 5 6 7 8 9 10 d8=min{d8, d4+c48 d7+c78}
1 1 1 1 4 1 1 4 1 1
It.3
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d2, d5, d8}.
it 1 2 3 4 5 6 7 8 9 10
3 0* 10 ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 4 1 1 4 1 1
It.3
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d2, d5, d8}.
Se alege doar unul
M={1, 2, 4, 7}
it 1 2 3 4 5 6 7 8 9 10
3 0* 10∗ ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 4 1 1 4 1 1
It.3
Pas 4. Varful 10 are etichetă
constantă?
Repetăm pasul 2
it 1 2 3 4 5 6 7 8 9 10
3 0* 10∗ ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 4 1 1 4 1 1
It.4
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete
di
M={1,2,4,7 }
it 1 2 3 4 5 6 7 8 9 10 Se vor recalcula
3 0* 10∗ ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞ următoarele etichete
d3=min{d2, d2+c23}
d6=min{d2, d2+c26}
1 2 3 4 5 6 7 8 9 10 d5=min{d5, d4+c45}
1 1 1 1 4 1 1 4 1 1 d8=min{d8, d4+c48
d7+c78}
It.4
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete
di
M={1,2,4,7 }
it 1 2 3 4 5 6 7 8 9 10 Se vor recalcula
4 0* 10∗ 30 5∗ 10 18 6∗ 10 ∞ ∞ următoarele etichete
d3=min{d2, d2+c23}
d6=min{d2, d2+c26}
1 2 3 4 5 6 7 8 9 10 d5=min{d5, d4+c45}
1 1 2 1 4 2 1 4 1 1 d8=min{d8, d4+c48
d7+c78}
It.4
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d5, d8}.
Se alege doar unul
M={1, 2, 4, 7}
it 1 2 3 4 5 6 7 8 9 10
4 0* 10∗ 30 5∗ 10 18 6∗ 10 ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 2 1 4 2 1 4 1 1
It.4
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d5, d8}.
Se alege doar unul
M={1, 2, 4,5,7}
it 1 2 3 4 5 6 7 8 9 10
4 0* 10∗ 30 5∗ 10* 18 6∗ 10 ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 2 1 4 2 1 4 1 1
It.4
Pas 4. Varful 10 are etichetă
constantă?
Repetăm pasul 2
It. 1 2 3 4 5 6 7 8 9 10
4 0* 10∗ 30 5∗ 10* 18 6∗ 10 ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 2 1 4 2 1 4 1 1
It.5
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete di
M={1, 2, 4,5,7}
Se vor recalcula
it 1 2 3 4 5 6 7 8 9 10 următoarele etichete
4 0* 10∗ 30 5∗ 10* 18 6∗ 10 ∞ 30 d3=min{d3, d2+c23}
d6=min{d6, d2+c26 d5+c56}
d8=min{d8, d4+c48 d7+c78}
1 2 3 4 5 6 7 8 9 10
d10=min{d10, d5+c5 10}
1 1 2 1 4 2 1 4 1 5
It.5
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d3, d6, d8, d10}.
M={1, 2, 4,5,7}
It. 1 2 3 4 5 6 7 8 9 10
5 0* 10∗ 30 5∗ 10* 18 6∗ 10 ∞ 30
1 2 3 4 5 6 7 8 9 10
1 1 2 1 4 2 1 4 1 5
It.5
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d2, d5, d8}.
M={1, 2, 4,5,7,8}
it 1 2 3 4 5 6 7 8 9 10
5 0* 10∗ ∞ 5∗ 10∗ ∞ 6∗ 10∗ ∞ 30
1 2 3 4 5 6 7 8 9 10
1 1 1 1 4 1 1 4 1 5
It.5
Pas 4. Varful 10 are etichetă
constantă?
Repetăm pasul 2
It. 1 2 3 4 5 6 7 8 9 10
5 0* 10∗ ∞ 5∗ 10∗ ∞ 6∗ 10∗ ∞ ∞
1 2 3 4 5 6 7 8 9 10
1 1 1 1 4 1 1 4 1 1
It.6
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete
di
M={1, 2, 4,5,7,8}
Se vor recalcula
it 1 2 3 4 5 6 7 8 9 10 următoarele etichete
6 0* 10∗ 30 5∗ 10∗ 18 6∗ 10∗ 30 30 d3=min{d3, d2+c23}
d6=min{d6, d2+c26 d5+c56}
d10=min{d10, d5+c5 10
1 2 3 4 5 6 7 8 9 10 d8+c810}
1 1 2 1 4 2 1 4 8 5 d9=min{d9, d8+c89}
It.6
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d3, d6, d9 , d10}.
M={1, 2, 4,5,7,8}
it 1 2 3 4 5 6 7 8 9 10
6 0* 10∗ 30 5∗ 10∗ 18 6∗ 10∗ 30 30
1 2 3 4 5 6 7 8 9 10
1 1 2 1 4 2 1 4 8 5
It.6
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d3, d6, d9 , d10}.
M={1, 2, 4,5,6,7,8}
It. 1 2 3 4 5 6 7 8 9 10
6 0* 10∗ 30 5∗ 10∗ 18* 6∗ 10∗ 30 30
1 2 3 4 5 6 7 8 9 10
1 1 2 1 4 2 1 4 8 5
It.6
Pas 4. Varful 10 are etichetă
constantă?
Repetăm pasul 2
it 1 2 3 4 5 6 7 8 9 10
6 0* 10∗ 30 5∗ 10∗ 18* 6∗ 10∗ 30 30
1 2 3 4 5 6 7 8 9 10
1 1 2 1 4 2 1 4 8 5
It.7
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete di
M={1, 2, 4,5,6,7,8}
Se vor recalcula
it 1 2 3 4 5 6 7 8 9 10 următoarele etichete
6 0* 10∗ 30 5∗ 10∗ 18* 6∗ 10∗ 30 30 d3=min{d3, d2+c23 ,d6+c63}
d9=min{d9, d8+c89}
d10=min{d10, d5+c5 10,
1 2 3 4 5 6 7 8 9 10 d6+c610 , d8+c810}
1 1 2 1 4 2 1 4 8 5
It.7
Pas 2. Pentru varfurile care nu
ai etichete constane, se
recalculeză componete di
M={1, 2, 4,5,6,7,8}
Se vor recalcula
it 1 2 3 4 5 6 7 8 9 10 următoarele etichete
7 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24 d3=min{d3, d6+c63}
d9=min{d9, d8+c89}
d10=min{d10, d5+c5 10,
1 2 3 4 5 6 7 8 9 10 d6+c610 , d8+c810}
1 1 6 1 4 2 1 4 8 6
It.7
Pas 3. Determinarea vârfului
care va obține eticheta
permanenta df
min{d3, d9 , d10}.
M={1, 2, 4,5,6,7,8}
It. 1 2 3 4 5 6 7 8 9 10
7 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24
1 2 3 4 5 6 7 8 9 10
1 1 6 1 4 2 1 4 8 6
It.7
Pas 3-4 Determinarea vârfului
care va obține eticheta
permanenta df
min{d3, d9 , d10}.
M={1, 2, 4,5,6,7,8}
it 1 2 3 4 5 6 7 8 9 10
7 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24*
1 2 3 4 5 6 7 8 9 10
1 1 6 1 4 2 1 4 8 6
3. Drumul minim de la un vârf la toate
vârfurile grafului(algoritmul Dijkstra)
Pentru determinarea drumului minim intre varful x
către toate celelate varfuri cu ajutorul algoritmul
Dijkstra este necesar de a determina etichete constante
tuturor varfurilor.
Exemplu.
In exemplu analizat anterior
algoritmul s-a stopat din
cauza ca vârful 10 a primit
eticheta constantă, cea ce
corespondea cerintelor
problemei.
it 1 2 3 4 5 6 7 8 9 10 La reformularea problemei:
7 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24* Sa se determine drumul
minimde la varful 1 catre
toate celelate varfuri, este
1 2 3 4 5 6 7 8 9 10
necesar de a continua
1 1 6 1 4 2 1 4 8 6 iteratiile.
Exemplu.
Nu toate varfurile au
eticheta constanta.
E
it 1 2 3 4 5 6 7 8 9 10
7 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24*
1 2 3 4 5 6 7 8 9 10
1 1 6 1 4 2 1 4 8 6
It.7
Pas 4 Varful 10 a obținut
eticheta constanta
M={1, 2, 4,5,6,7,8,10}
Nu toate varfurile au
eticheta constanta.
It. 1 2 3 4 5 6 7 8 9 10
7 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24* Trecem la pasul 2,
urmatoarea iterație
1 2 3 4 5 6 7 8 9 10
1 1 6 1 4 2 1 4 8 6
It.8
Pas 2 Pentru varfurile care nu
ai etichete constane, se
recalculeză componete
di
M={1, 2, 4,5,6,7,8,10}
It. 1 2 3 4 5 6 7 8 9 10
8 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24*
1 2 3 4 5 6 7 8 9 10
1 1 6 1 4 2 1 4 8 6
It.8
Pas 3 Determinarea vârfului
care va obține eticheta
permanenta df
min{d3, d9 }.
M={1, 2, 4,5,6,7,8,9,10}
It. 1 2 3 4 5 6 7 8 9 10
∗
8 0 10 28 5∗ 10∗ 18* 6∗ 10∗ 30 24*
* ∗
1 2 3 4 5 6 7 8 9 10
1 1 6 1 4 2 1 4 8 6
It.8
Pas 4 Toate varfurile au
etichetă constantă?
Repetăm pasul 2
It. 1 2 3 4 5 6 7 8 9 10
∗
8 0 10 28 5∗ 10∗ 18* 6∗ 10∗ 30 24*
* ∗
1 2 3 4 5 6 7 8 9 10
1 1 6 1 4 2 1 4 8 6
It.9
Iteratia finala!
It. 1 2 3 4 5 6 7 8 9 10
∗ ∗ ∗ ∗ ∗ ∗ ∗
9 0 10 28 5 10 18
* * 6 10 30 24*
1 2 3 4 5 6 7 8 9 10
1 1 6 1 4 2 1 4 8 6
Componenta distantei
1 2 3 4 5 6 7 8 9 10
0 0* ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞
1 0* 10 ∞ 5∗ ∞ ∞ 6 ∞ ∞ ∞
2 0* 10 ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞
3 0* 10∗ ∞ 5∗ 10 ∞ 6∗ 10 ∞ ∞
4 0* 10∗ ∞ 5∗ 10∗ ∞ 6∗ 10 ∞ ∞
5 0* 10∗ ∞ 5∗ 10∗ ∞ 6∗ 10∗ ∞ ∞
6 0* 10∗ 30 5∗ 10∗ 18* 6∗ 10∗ 30 30
7 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24*
∗
8 0* 10∗ 28 5∗ 10∗ 18* 6∗ 10∗ 30 24*
∗ ∗
9 0* 10∗ 28 5∗ 10∗ 18* ∗ ∗
6 10 30 24*
Componenta sursei
1 2 3 4 5 6 7 8 9 10
0 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
2 1 1 1 1 4 1 1 4 1 1
3 1 1 1 1 4 1 1 4 1 1
4 1 1 1 1 4 1 1 4 1 1
5 1 1 1 1 4 1 1 4 1 1
6 1 1 2 1 4 2 1 4 8 5
7 1 1 6 1 4 2 1 4 8 6
8 1 1 6 1 4 2 1 4 8 6
9 1 1 6 1 4 2 1 4 8 6
Conform tabelelor
distanta dintre vârful 1
și 9:
1 → 4→ 8→ 9.
Lungimea drumului
Componenta distantei este 30
1 2 3 4 5 6 7 8 9 10 distanta dintre vârful 1
9 0* 10∗ 28
∗
5∗ 10∗ 18* 6∗ 10∗ 30
∗
24* și 6:
1 → 2 → 6.
Lungimea drumului
Componenta sursei este 18
1 2 3 4 5 6 7 8 9 10
9 1 1 6 1 4 2 1 4 8 6