Skip to content
Snippets Groups Projects
Verified Commit 02e16eb4 authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added complexity

parent 49279c0f
No related branches found
No related tags found
No related merge requests found
...@@ -487,9 +487,47 @@ distance, précédent dijkstra(graphe, s, t): ...@@ -487,9 +487,47 @@ distance, précédent dijkstra(graphe, s, t):
retourne distance, précédent retourne distance, précédent
``` ```
# Algorithme de Dijkstra avec file
\footnotesize
```C
distance dijkstra(graphe, s, t)
---------------------------------------------------------
pour v dans sommets(graphe)
O(V) si v != s
distance[v] = infini
O(V) fp = enfiler(fp, v, distance[v]) // notre impl est nulle
------------------O(V * V)-------------------------------
tant que !est_vide(fp)
O(V) u, fp = défiler(fp)
---------------------------------------------------------
O(E) pour v dans voisinage de u
n_distance = distance[u] + w(i, v)
si n_distance < distance[v]
distance[v] = n_distance
O(V) fp = changer_priorité(fp, v, n_distance)
---------------------------------------------------------
retourne distance
```
* Total: $\mathcal{O}(|V|^2+|E|\cdot |V|)$:
* Graphe dense: $\mathcal{O}(|V|^3)$
* Graphe peu dense: $\mathcal{O}(|V|^2)$
# Algorithme de Dijkstra avec file
## On peut faire mieux
* Avec une meilleure implémentation de la file de priorité:
* Tas binaire: $\mathcal{O}(|V|\log|V|+|E|\log|V|)$.
* Tas de Fibonnacci: $\mathcal{O}(|V|+|E|\log|V|)$
* Graphe dense: $\mathcal{O}(|V|^2\log|V|)$.
* Graphe peu dense: $\mathcal{O}(|V|\log|V|)$.
# Algorithme de Dijkstra (exercice, 5min) # Algorithme de Dijkstra (exercice, 5min)
![L'exercice.](figs/dijkstra_exo.png) ![L'exercice.](figs/dijkstra_exo.png){width=60%}
* Donner la liste de priorité, puis... * Donner la liste de priorité, puis...
...@@ -535,3 +573,4 @@ distance, précédent dijkstra(graphe, s, t): ...@@ -535,3 +573,4 @@ distance, précédent dijkstra(graphe, s, t):
* L'algorithme n'essaiera jamais le chemin `s->x->y->v` et prendra direct `s->v`. * L'algorithme n'essaiera jamais le chemin `s->x->y->v` et prendra direct `s->v`.
* Ce problème n'apparaît que s'il y a des poids négatifs. * Ce problème n'apparaît que s'il y a des poids négatifs.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment