diff --git a/slides/cours_27.md b/slides/cours_27.md index 075066d813a4eaa18f6ecc1300f95c5d91e6d4ab..6dc2ce299015b1fdb19f2caaa47480a786e70dec 100644 --- a/slides/cours_27.md +++ b/slides/cours_27.md @@ -274,75 +274,6 @@ matrice, matrice floyd_warshall(distance, n, w) ::: -# Algorithme de Prim - -## Structures de données - -* Dans quoi allons nous stocker les sommets? - -. . . - -* File de priorité min. -* Autre chose? - -. . . - -* Tableau des distances (comme pour Dijkstra). -* Autre chose? - -. . . - -* Tableau des parents (presque comme pour Dijkstra). -* Autre chose? - -. . . - -* Non. - -# Algorithme de Prim - -## Initialisation: Pseudo-code (2min) - -. . . - -```C -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 - fp = enfiler(fp, s_courant, distance[s_courant]) - retourne fp, distance, parent -``` - -# Algorithme de Prim - -\footnotesize - -## Algorithme: Pseudo-code (5min) - -. . . - -```C -sommets, parent prim(file_priorité, distance, parent) - sommets = vide - tant que !est_vide(fp) - s_courant, fp = défiler(fp) - sommets = insérer(sommets, s_courant) - pour s_voinsin dans voisinage(s_courant) et pas dans sommets - // ou dans fp - si poids(s_courant, s_voinsin) < distance[s_voinsin] - parent[s_voinsin] = s_courant - distance[s_voinsin] = poids(s_courant, s_voinsin) - fp = changer_priorité(fp, - s_voinsin, poids(s_courant, s_voinsin)) - retourne sommets, parent -``` - # Exemple d'algorithme de Prim ::: columns @@ -553,6 +484,75 @@ P | - | e | e | d | d | ::: +# Algorithme de Prim + +## Structures de données + +* Dans quoi allons nous stocker les sommets? + +. . . + +* File de priorité min. +* Autre chose? + +. . . + +* Tableau des distances (comme pour Dijkstra). +* Autre chose? + +. . . + +* Tableau des parents (presque comme pour Dijkstra). +* Autre chose? + +. . . + +* Non. + +# Algorithme de Prim + +## Initialisation: Pseudo-code (2min) + +. . . + +```C +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 + fp = enfiler(fp, s_courant, distance[s_courant]) + retourne fp, distance, parent +``` + +# Algorithme de Prim + +\footnotesize + +## Algorithme: Pseudo-code (5min) + +. . . + +```C +sommets, parent prim(file_priorité, distance, parent) + sommets = vide + tant que !est_vide(fp) + s_courant, fp = défiler(fp) + sommets = insérer(sommets, s_courant) + pour s_voinsin dans voisinage(s_courant) et pas dans sommets + // ou dans fp + si poids(s_courant, s_voinsin) < distance[s_voinsin] + parent[s_voinsin] = s_courant + distance[s_voinsin] = poids(s_courant, s_voinsin) + fp = changer_priorité(fp, + s_voinsin, poids(s_courant, s_voinsin)) + retourne sommets, parent +``` + # Exercice: algorithme de Prim ## Appliquer l'algorithme de Prim à (15min):