Sunteți pe pagina 1din 5

Dovada algoritmului lui Dijkstra este construită prin inducție asupra numărului de noduri vizitate.

Ipoteza invariantă: Pentru fiecare nod vizitat v, în este cea mai scurtă distanță de la sursă a v, şi pentru
fiecare nod nevizitat u, în este cea mai scurtă distanță de la sursă a u când călătoriți numai prin noduri
vizitate sau infinit dacă nu există o astfel de cale. (Notă: nu ne asumăm este distanța cea mai scurtă
pentru nodurile nevizitate, în timp ce este cea mai scurtă distanță) dist[v]dist[u]dist[u]dist[v]

Cazul de bază este atunci când există doar un nod vizitat, și anume nodul inițial sursă, În acest caz,
ipoteza este banal.

Apoi, să presupunem ipoteza pentru k-1 noduri vizitate. Apoi, alegem u să fie următorul nod vizitat
conform algoritmului. Noi pretindem că este cea mai scurtă distanță de la sursă a u. dist[u]

Pentru a dovedi această afirmație, vom continua cu o dovadă prin contradicție. Dacă a existat o cale mai
scurtă, atunci pot exista două cazuri, fie calea cea mai scurtă conține un alt nod nevizitat sau nu.

În primul caz, să w fii primul nod nevizitat pe calea cea mai scurtă. Prin ipoteza inducției, cea mai scurtă
cale de la sursă a u și w prin nodul vizitat numai costul și respectiv. Asta înseamnă costul plecării de la
sursă a u prin w are cel puțin costul + costul minim de plecare w a u. Deoarece costurile de margine sunt
pozitive, costul minim de plecare w a u este un număr pozitiv. dist[u]dist[w]dist[w]

De asemenea dist[u] < dist[w] pentru că algoritmul a ales u în loc de w.

Acum am ajuns la o contradicție care dist[u] < dist[w] inca dist[w] + un număr pozitiv < dist[u].

În al doilea caz, lăsați w să fie ultimul, dar un singur nod pe calea cea mai scurtă. Asta înseamnă . Aceasta
este o contradicție, deoarece până la momentul respectiv w este vizitat, ar fi trebuit să se stabilească cel
mult . dist[w] + Graph.Edges[w,u] < dist[u]dist[u]dist[w] + Graph.Edges[w,u]

Pentru toate celelalte noduri vizitate v, ne-a spus ipoteza de inducție este cea mai scurtă distanță de
sursă deja, iar pasul algoritmului nu schimbă asta. dist[v]

După prelucrare u va fi în continuare adevărat că pentru fiecare nod vizitat w, în va fi cea mai scurtă
distanță de la sursă a w utilizarea nodurilor vizitate numai pentru că dacă există o cale mai scurtă care nu
trece u am fi găsit-o anterior și dacă ar fi existat o cale mai scurtă folosind u l-am fi actualizat la procesare
u. dist[w]

După ce toate nodurile sunt vizitate, cea mai scurtă cale de la sursă la orice nod v constă numai din
noduri vizitate, prin urmare este cea mai scurtă distanță. dist[v]

Timp de rulare

Bounds of the running time of Dijkstra's algorithm on a graph with edges E and vertices V can be
expressed as a function of the number of edges, denoted

{\displaystyle |E|}, and the number of vertices, denoted

{\displaystyle |V|}, using big-O notation. The complexity bound depends mainly on the data structure
used to represent the set Q. In the following, upper bounds can be simplified because

{\displaystyle |E|} is

(
|

{\displaystyle O(|V|^{2})} for any simple graph, but that simplification disregards the fact that in some
problems, other upper bounds on

{\displaystyle |E|} may hold.

For any data structure for the vertex set Q, the running time is in[2]

|
|

{\displaystyle \Theta (|E|\cdot T_{\mathrm {dk} }+V|\cdot T_|\mathrm { {),}

where

{\displaystyle T_{\mathrm {dk} }} and

{\displaystyle T_{\mathrm {em} }} acestea sunt complexitatea scădere și extracte-minim operaţiuni în Q,


În plus, respectiv.

Cea mai simplă versiune a algoritmului lui Dijkstra stochează setul de noduri Q ca o listă sau o matrice
legată și marginile ca o lista de adiacență sau matrice. În acest caz, extractul-minim este pur și simplu o
căutare liniară prin toate nodurile din Q, În acest fel, timpul de funcționare este

|
+

{\displaystyle \Theta (|E|+|V|^{2})=\Theta (|V|^{2})}.

Pentru grafuri rare, adică, grafice cu mult mai puține decât

{\displaystyle |V|^{2}} muchii, algoritmul lui Dijkstra poate fi implementat mai eficient prin stocarea
grafului sub formă de liste de adiacență și folosind un arbore de căutare binar cu auto-echilibrare,
îngrămadă binară, înheap de asociere, în sau Heap fibonacci ca o coada de prioritate pentru a
implementa extragerea minimă eficientă. Pentru a efectua în mod eficient pașii de descreștere a tastelor
într-o grămadă binară, este necesar să se utilizeze o structură de date auxiliară care să mapeze fiecare
nod în poziția sa în grămadă, și pentru a menține această structură la zi ca coada de prioritate Q
modificări. Cu un arbore de căutare binar cu auto-echilibrare sau o grămadă binară, algoritmul necesită

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