1 / 13

Bellman-Ford

Bellman-Ford. Algoritmul lui Bellman-Ford este utilizat pentru determinarea lanțurilor de cost minim de la un nod x la celelalte noduri. Algoritmul este numit dupa cei doi autori, Richard Bellman si Lester Ford Jr. 1. 20. 8. 2. 1. 7. 1. 4. 4. 10. 5. 2. 5. 4. 3. 6. 7. 9. 11. 7.

virgil
Download Presentation

Bellman-Ford

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Bellman-Ford

  2. Algoritmul lui Bellman-Ford este utilizat pentru determinarea lanțurilor de cost minim de la un nod x la celelalte noduri. Algoritmul este numit dupa cei doi autori, Richard Bellman si Lester Ford Jr.

  3. 1 20 8 2 1 7 1 4 4 10 5 2 5 4 3 6 7 9 11 7 6 19

  4. Explicația algoritmului: • Se construiește vectorul viz cu dimensiunea egală cu numarul de noduri al grafului. • Se iniţializează vectorul viz cu o valoare foarte mare. viz[i]=∞, unde ∞ este o constantă definită anterior, egală cu 10000000. • Se alege un nod de start. În cazul nostru, nodul 1, pe care îl marcăm in vectorul viz cu valoarea 0. • Se construiește o coadă c. • Primul nod ales se scrie in coadă. C:1 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ viz: viz:

  5. Se alege primul adiacent al nodului ales. În cazul nostru, 2. • Se marchează in viz pe poziția nodului ales (2) ,costul de la primul nod până la cel aferent, astfel: viz[2]=1. Se adaugă în coadă nodul. C: 1,2 • Se alege al doilea adiacent al primului nod (1). În cazul nostru, nodul 3. • Se marchează în vectorul viz pe poziția nodului ales (3), costul de la primul nod până la acesta. În cazul nostru, viz[3]=4. Se adaugă în coadă nodul 3. 0 1 ∞ ∞ ∞ ∞ ∞ ∞ 1 2 3 4 5 6 7 8 viz:

  6. ∞ ∞ ∞ ∞ 0 1 4 C:1,2,3 • Următorul adiacent al nodului incipient este 4. Viz[4]=7. C:1,2,3,4 • Dat fiind faptul că nodul 1 nu mai are adiacenţi, se trece la următorul nod din coadă, respectiv nodul 2. C:1,2,3,4 • Se alege primul adiacent al nodului 2. Nodul 1 este primul adiacent al nodului 2. 0 1 4 7 ∞ ∞ ∞ ∞ 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 viz: viz:

  7. Pentru că în viz costul până la 2 adunat costului până la 1 nu dă o valoare mai mică decât cea existentă,atunci nu se va face nici o modificare. • Următorul nod adiacent lui 2 este 4. • Costul obținut prin însumarea costurilor până la 2 si 4 este o valoare mai mare decat cea existentă în viz,așadar nu se va face nici o modificare. • Următorul nod adiacent lui 2 este 5. Costul până la 2 prin nodul 5 este 2=> viz[5]=2. C:1,2,3,4,5 • Următorul nod adiacent lui 2 este 8. Costul până la nodul 2 prin nodul 8 este 21 => viz[8]=21. C:1,2,3,4,5,8 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 viz: viz: 0 0 1 1 4 4 7 7 2 2 ∞ ∞ ∞ ∞ 21 ∞

  8. Dat fiind faptul că nodul 2 nu mai are niciun adiacent, se trece la următorul nod din coadă, respectiv nodul 3. • Primul adiacent a lui 3 este nodul 1. În vectorul viz nu se va face nicio modificare deoarece prin însumarea costurilor până la 3 și până la 1, se obține o valoare mai mare decat cea actuală din vector. • Urmatorul adiacent a lui 3 este nodul 4. Costul până la 3 prin nodul 4 este 6=> viz[4]=6. C:1,2,3,4,5,8,4 • Următorul adiacent a lui 3 este 6. Costul până la 6 prin 3 este 13=>viz[6]=13; C:1,2,3,4,5,8,4,6 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 viz: viz: 0 0 1 1 4 4 6 6 2 2 13 ∞ ∞ ∞ ∞ ∞

  9. Deoarece 3 nu mai are nici un adiacent, se trece la următorul nod din coadă, respectiv 4. Primul adiacent a nodului 4 este 3, dar nu se va produce nici o schimbare în vectorul viz. • Următorul adiacent a lui 4 este 5. De asemenea nici în acest caz nu se va produce modificare in vector. • Următorul adiacent a lui 4 este 6, care nu va aduce nici o nouă schimbare în vector. • Următorul adiacent a lui 4 este 7. Costul până la 4 prin 7 este 12=>viz[7]=12. • Dat fiind faptul că nodul 4 nu mai are niciun alt adiacent, se trece la următorul nod din coadă, respectiv 5. Adiacenții nodului 5 nu produc schimbări în vector, deoarece nici unul din costuri nu este mai mic decat cele deja aflate în vector. C:1.2,3,4,5,8,4,6,7 1 2 3 4 5 6 7 8 C:1,2,3,4,5,8,4,6,7 viz: 0 1 4 6 2 13 12 21

  10. Se trece la următorul nod din coadă, respectiv nodul 8. Nodul adiacent lui 8 și care va produce o schimbare în vector este 5. Costul până la 5 prin nodul 8este 6=>viz[8]=6. C:1,2,3,4,5,8,4,6, • Următorul nod din coadă este 4.Acesta nu va aduce nici o modificare în vectorul viz. C:1,2,3,4,5,8,4,6 • Următorul nod din coadă este 6. Nodul 5 este adiacentul lui 6, care va produce schimbare în viz. Costul până la 5 prin nodul 6 este 9=>viz[6]=9. C:1,2,3,4,5,8,4,6,7,6 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 viz: viz: 0 0 1 1 4 4 6 6 2 2 9 13 12 12 6 6

  11. Următorul nod din coadăeste 7. În viz nu se va face nicionouămodificare. C:1,2,3,4,5,8,4,6,7,6 • Următorul nod din coadăeste 6. C:1,2,3,4,5,8,4,6,7,6 În viz nu vaavea loc nici o modificare. • Vectorul la fel ca șicoada se vaîncheia cu ultimul nod din vectordeoarece s-a realizatîntreagaparcurgere a cozii. C:1,2,3,4,5,8,6,7,6,8. Algoritmului i se poate asocia un vector “p” pentru pastrarea precedentei, utilă in generarea lanţurilor de costuri minime.

  12. 1 20 8 2 1 7 1 4 4 10 5 2 5 4 3 6 7 9 11 1-2=>cost 1 1-3=>cost 4 1-4=>cost 6 1-5=>cost 2 1-6=>cost 9 1-7=>cost 12 1-8=>cost 6 7 6 19

  13. Proiect realizat de: Ghercă Diana Clasa a XI-a B Colegiul National Roman-Vodă Profesor coordonator: Gavril Petru Florin

More Related