From 02e16eb4cbe53706fa79d37bebcef8af3ce5cfc4 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Tue, 24 May 2022 08:41:29 +0200 Subject: [PATCH] added complexity --- slides/cours_25.md | 41 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/slides/cours_25.md b/slides/cours_25.md index eb6e6a0..ec04266 100644 --- a/slides/cours_25.md +++ b/slides/cours_25.md @@ -487,9 +487,47 @@ distance, précédent dijkstra(graphe, s, t): 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) - +{width=60%} * Donner la liste de priorité, puis... @@ -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`. * Ce problème n'apparaît que s'il y a des poids négatifs. + -- GitLab