Documente Academic
Documente Profesional
Documente Cultură
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]
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 |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
For any data structure for the vertex set Q, the running time is in[2]
|
|
where
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 |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ă