diff --git a/slides/cours_25.md b/slides/cours_25.md index 0427a47574cc63fc549d3b7abd8d9e96e1e0f7a5..2cb2ba86c54e998788509828c39c95165d61d1a6 100644 --- a/slides/cours_25.md +++ b/slides/cours_25.md @@ -436,7 +436,7 @@ P | - | e | e | d | d | ## Structures de données -* Dans quoi allons nous stocker les sommets? +* Dans quoi allons-nous stocker les sommets? . . . @@ -467,12 +467,11 @@ P | - | e | e | d | d | file_priorité, distance, parent initialisation(graphe) s_initial = aléatoire(graphe) distance[s_initial] = 0 - parent[s_initial] = indéfini fp = file_p_vide() pour s_courant dans sommets(graphe) si s_courant != s_initial distance[s_courant] = infini - parent[s_courant] = indéfini + parent[s_courant] = indéfini fp = enfiler(fp, s_courant, distance[s_courant]) retourne fp, distance, parent ``` @@ -486,7 +485,8 @@ file_priorité, distance, parent initialisation(graphe) . . . ```C -sommets, parent prim(file_priorité, distance, parent) +distance, parent prim(graphe) + fp, distance, parent initialisation(graphe) sommets = vide tant que !est_vide(fp) s_courant, fp = défiler(fp) @@ -496,9 +496,9 @@ sommets, parent prim(file_priorité, distance, parent) si poids(s_courant, s_voisin) < distance[s_voisin] parent[s_voisin] = s_courant distance[s_voisin] = poids(s_courant, s_voisin) - fp = changer_priorité(fp, - s_voisin, poids(s_courant, s_voisin)) - retourne sommets, parent + fp = changer_priorité(fp, s_voisin, + poids(s_courant, s_voisin)) + retourne distance, parent ``` # Exercice: algorithme de Prim @@ -521,23 +521,24 @@ sommets, parent prim(file_priorité, distance, parent) file_priorité, distance, parent initialisation(graphe) // choix r et initialisation pour v dans sommets(graphe) -O(|V|) // initialisation distance et parent + // initialisation distance et parent en O(|V|) fp = enfiler(fp, v, distance[v]) retourne fp, distance, parent -sommets, parent prim(file_priorité, distance, parent) +distance, parent prim(graphe) + fp, distance, parent initialisation(graphe) // O(|V|) sommets = vide - tant que !est_vide(file_priorité) -O(|V|) u, fp = défiler(file_priorité) + tant que !est_vide(fp) + u, fp = défiler(fp) // O(|V|) sommets = insérer(sommets, u) pour v dans voisinage de u et pas dans sommets - O(|E|) si w(u, v) < distance[v] + si poids(u, v) < distance[v] // O(|E|) // màj distance + parent - O(|V|) fp = changer_priorité(fp, w, w(u, v)) - retourne sommets, parent + fp = changer_priorité(fp, v, poids(u, v)) // O(|V|) + retourne distance, parent ``` * $O(|V|)+O(|E|)+O(|V|^2)=O(|E|+|V|^2)$ -* Remarque: $O(|E|)$ n'est pas mutliplié par $O(|V|)$, car les arêtes ne sont parcourues qu'une fois en **tout**. +* Remarque: $O(|E|)$ n'est pas mutliplié par $O(|V|)$, car les arêtes ne sont traitées qu'une fois en **tout**. # Algorithme de Kruskal