Sunteți pe pagina 1din 4

Algoritmul Dijkstra’s

Algoritmul lui Dijkstra este un algoritm pentru găsirea celor mai scurte căi între noduri dintr-
un grafic, care poate reprezenta, de exemplu, rețele de drumuri.

A fost conceput de informaticianul Edsger W. Dijkstra în 1956 și publicat trei ani mai târziu.
Algoritmul există în multe variante. cel original al lui Dijkstra a găsit calea cea mai scurtă între două
noduri date, dar o variantă mai comună fixează un singur nod ca nod „sursă” și găsește cele mai scurte
căi de la sursă la toate celelalte noduri din grafic, producând cea mai scurtă cale.

“Care este cea mai scurtă cale de a călători de la Rotterdam la Groningen, în general: de la un
oraș dat la un oraș dat. Este algoritmul pentru cea mai scurtă cale, pe care l-am proiectat în
aproximativ douăzeci de minute.

Într-o dimineață, făceam cumpărături în Amsterdam cu tânăra mea logodnică și obosit, ne-am
așezat pe terasa cafenelei să bem o ceașcă de cafea și mă gândeam dacă aș putea face asta, apoi am
conceput algoritmul pentru calea cea mai scurtă.” - Dijkstra’s

Dijkstra s-a gândit la problema cu calea cea mai scurtă când lucra la Centrul de matematică
din Amsterdam în 1956 ca programator pentru a demonstra capabilitățile unui nou computer numit
ARMAC. Obiectivul său a fost să aleagă atât o problemă, cât și o soluție (care ar fi produsă de
computer) pe care oamenii care nu sunt informatici le-ar putea înțelege. El a proiectat algoritmul cu
cea mai scurtă cale și l-a implementat ulterior pentru ARMAC pentru o hartă de transport ușor
simplificată a 64 de orașe din Țările de Jos. Dacă nodurile graficului reprezintă orașe, iar costurile
căilor de margine reprezintă distanțe de parcurs între perechi de orașe conectate printr-un drum direct
(pentru simplitate să ignorăm semaforele roșii, semnele de oprire, drumurile cu taxă și alte obstacole),
atunci algoritmul lui Dijkstra poate poate fi folosit pentru a găsi cea mai scurtă rută între un oraș și
toate celelalte orașe.

Un an mai târziu, a întâlnit o altă problemă de la inginerii hardware care lucrau la următorul
computer al institutului: minimizați cantitatea de cablu necesară pentru a conecta pinii de pe panoul
din spate al mașinii. Ca o soluție, el a redescoperit algoritmul cunoscut sub numele de algoritmul
arborelui de acoperire minim al lui Prim (cunoscut mai devreme de Jarník și redescoperit și de Prim),
iar acesta a publicat algoritmul în 1959, la doi ani după Prim și la 29 de ani după Jarník.

Acesta este, asimptotic, cel mai rapid algoritm cunoscut, cu o singură sursă, pe calea cea mai
scurtă, pentru grafice direcționate arbitrare cu ponderi nenegative nemărginite. Cu toate acestea,
cazurile specializate (cum ar fi greutăți mărginite/întregi, grafice aciclice direcționate etc.) pot fi într-
adevăr îmbunătățite în continuare, așa cum este detaliat în variante specializate.
Exemplu: Luăm un grafic și găsim calea cea mai scurtă de la sursă la toate nodurile.

Pasul 1:

Setul sptSet este inițial gol și distanțele alocate vârfurilor sunt {0, INF, INF, INF,
INF, INF, INF, INF} unde INF indică infinit.

Acum alegem vârful cu o valoare minimă a distanței. Se alege vârful 0, îl includem în


sptSet. Deci sptSet devine {0}. După ce includem 0 în sptSet, actualizați valorile distanței ale
vârfurilor adiacente.

Vârfurile adiacente ale lui 0 sunt 1 și 7. Valorile distanței de 1 și 7 sunt actualizate ca 4 și 8.

Următorul subgraf arată vârfurile și valorile distanței acestora, fiind afișate doar
vârfurile cu valori ale distanței finite. Vârfurile incluse în SPT sunt afișate în culoarea verde.

Pasul 2:

Alegem vârful cu valoarea minimă a distanței și care nu este deja inclus în SPT (nu în
sptSET). Vârful 1 este ales și adăugat la sptSet. Deci sptSet devine acum {0, 1}. Actualizăm
valorile distanței ale vârfurilor adiacente de 1. Valoarea distanței a vârfului 2 devine 12.
Pasul 3:

Alegem vârful cu valoarea minimă a distanței și care nu este deja inclus în SPT (nu în
sptSET). Vârful 7 este ales. Deci sptSet devine acum {0, 1, 7}.

Actualizăm valorile distanței ale vârfurilor adiacente ale lui 7. Valoarea distanței a
vârfurilor 6 și 8 devine finită (15 și respectiv 9).

Pasul 4:

Alegem vârful cu valoarea minimă a distanței și care nu este deja inclus în SPT (nu în
sptSET). Vârful 6 este ales. Deci sptSet devine acum {0, 1, 7, 6}.

Actualizăm valorile distanței ale vârfurilor adiacente 6. Valoarea distanței vârfurilor 5


și 8 sunt actualizate.

Repetăm pașii de mai sus până când sptSet include toate vârfurile graficului dat. În cele din
urmă, obținem următorul arbore cu cea mai scurtă cale (SPT)
Algoritmul acesta l-am invățat în liceu, în clasa a 11-a mai exact, și este unul dintre algoritmii
care m-au ajutat cel mai mult in domeniul pe care l-am urmat, informatica. Este un algoritm simplu și
ușor de înteles, utilizat foarte des datorită eficienței sale. Faptul că l-am înteles din prima m-a ajutat,
pe viitor, în rezolvarea unor probleme de la job sau de la master. Toate aceste lucruri m-au motivat să
îl aleg ca temă de studiu.

Din punctul meu de vedere acest algoritm poate fi folosit cu ușurință în viața de zi cu zi și de
persoanele care nu sunt în domeniu. (Luăm ideea algoritmului și o transpunem în probleme pe care le
întămpinăm, așa cum a facut și Dijkstra).

În concluzie, acest algoritm a fost unul care a ajutat foarte mult omenirea și multe dintre
lucrurile de bază pe care le folosim astăzi, cum ar fi Google Maps sau Waze, nu ar fi fost la fel de
eficiente fără acesta.

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