Oi,
não estou a conseguir entender como é obtida a complexidade deste algoritmo.
O algoritmo de Dijkstra tem a complexidade de O(|V|^2 + |E|), mas não entendo como esse valor é obtido.
A linha 2-4 é executado V vezes.
A linha 6 é executada V vezes, porque consiste em copiar todos os vértices para Q.
A linha 7-16 é executada V vezes.
A linha 12-16 é executada E vezes.
Como se pode concluir que este algoritmo têm essa complexidade?
[Algorithm]
1 function Dijkstra(Graph, source):
2 for each vertex v in Graph: // Initializations
3 dist[v] := infinity // Unknown distance function from source to v
4 previous[v] := undefined // Previous node in optimal path from source
5 dist[source] := 0 // Distance from source to source
6 Q := the set of all nodes in Graph
// All nodes in the graph are unoptimized - thus are in Q
7 while Q is not empty: // The main loop
8 u := vertex in Q with smallest dist[]
9 if dist[u] = infinity:
10 break // all remaining vertices are inaccessible from source
11 remove u from Q
12 for each neighbor v of u: // where v has not yet been removed from Q.
13 alt := dist[u] + dist_between(u, v)
14 if alt < dist[v]: // Relax (u,v,a)
15 dist[v] := alt
16 previous[v] := u
17 return dist[]
Obrigado.