diff --git a/slides/cours_24.md b/slides/cours_24.md index c4d1785e971b77165fbaa664cd7326ff190c92b8..adbb812925cd8729e78cd88e80acaceb968ae141 100644 --- a/slides/cours_24.md +++ b/slides/cours_24.md @@ -404,8 +404,8 @@ si distance(u,v) > distance(u,w) + distance(w,v) tab dijkstra(graph, s, t) pour chaque v dans graphe distance[v] = infini - q = ajouter(q, v) // q est une liste distance[s] = 0 + q = ajouter(q, s) // q est une liste tant que non_vide(q) // sélection de u t.q. la distance dans q est min u = min(q, distance) @@ -443,14 +443,14 @@ tab dijkstra(graph, s, t) tab, tab dijkstra(graph, s, t) pour chaque v dans graphe distance[v] = infini - precedent[v] = indéfini - q = ajouter(q, v) + precedent[v] = indéfini distance[s] = 0 + q = ajouter(q, s) tant que non_vide(q) // sélection de u t.q. la distance dans q est min u = min(q, distance) si u == t - retourne distance + retourne distance, precedent q = remove(q, u) // voisin de u encore dans q pour chaque v dans voisinage(u, q) @@ -571,15 +571,17 @@ data, element defiler(element) ```C distance, precedent dijkstra(graphe, s, t): - distance[source] = 0 fp = file_p_vide() + distance[s] = 0 pour v dans sommets(graphe) si v != s distance[v] = infini - precedent[v] = indéfini + precedent[v] = indéfini fp = enfiler(fp, v, distance[v]) tant que !est_vide(fp) u, fp = defiler(fp) + si u == t + retourne distance, precedent pour v dans voisinage de u n_distance = distance[u] + w(u, v) si n_distance < distance[v] @@ -595,20 +597,22 @@ distance, precedent dijkstra(graphe, s, t): ```C distance dijkstra(graphe, s, t) ---------------------------------------------------------- - pour v dans sommets(graphe) -O(V) si v != s +--------------------O(V*V)-------------------------------- + distance[s] = 0 + fp = file_p_vide() + 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 + fp = enfiler(fp, s, distance[s]) // O(|V|) ------------------O(V * V)------------------------------- tant que !est_vide(fp) -O(1) u, fp = defiler(fp) + u, fp = defiler(fp) // O(1) --------------------------------------------------------- -O(E) pour v dans voisinage de u + pour v dans voisinage de u // O(|E|) n_distance = distance[u] + w(u, v) si n_distance < distance[v] distance[v] = n_distance -O(V) fp = changer_priorite(fp, v, n_distance) + fp = changer_priorite(fp, v, n_distance) // O(|V|) --------------------------------------------------------- retourne distance ```