Skip to content
Snippets Groups Projects
Commit 7e3b9379 authored by paul.albuquer's avatar paul.albuquer
Browse files

Corrected Prim pseudo-code

parent 1129d7fd
No related branches found
No related tags found
No related merge requests found
Pipeline #40722 passed
...@@ -436,7 +436,7 @@ P | - | e | e | d | d | ...@@ -436,7 +436,7 @@ P | - | e | e | d | d |
## Structures de données ## Structures de données
* Dans quoi allons nous stocker les sommets? * Dans quoi allons-nous stocker les sommets?
. . . . . .
...@@ -467,7 +467,6 @@ P | - | e | e | d | d | ...@@ -467,7 +467,6 @@ P | - | e | e | d | d |
file_priorité, distance, parent initialisation(graphe) file_priorité, distance, parent initialisation(graphe)
s_initial = aléatoire(graphe) s_initial = aléatoire(graphe)
distance[s_initial] = 0 distance[s_initial] = 0
parent[s_initial] = indéfini
fp = file_p_vide() fp = file_p_vide()
pour s_courant dans sommets(graphe) pour s_courant dans sommets(graphe)
si s_courant != s_initial si s_courant != s_initial
...@@ -486,7 +485,8 @@ file_priorité, distance, parent initialisation(graphe) ...@@ -486,7 +485,8 @@ file_priorité, distance, parent initialisation(graphe)
. . . . . .
```C ```C
sommets, parent prim(file_priorité, distance, parent) distance, parent prim(graphe)
fp, distance, parent initialisation(graphe)
sommets = vide sommets = vide
tant que !est_vide(fp) tant que !est_vide(fp)
s_courant, fp = défiler(fp) s_courant, fp = défiler(fp)
...@@ -496,9 +496,9 @@ sommets, parent prim(file_priorité, distance, parent) ...@@ -496,9 +496,9 @@ sommets, parent prim(file_priorité, distance, parent)
si poids(s_courant, s_voisin) < distance[s_voisin] si poids(s_courant, s_voisin) < distance[s_voisin]
parent[s_voisin] = s_courant parent[s_voisin] = s_courant
distance[s_voisin] = poids(s_courant, s_voisin) distance[s_voisin] = poids(s_courant, s_voisin)
fp = changer_priorité(fp, fp = changer_priorité(fp, s_voisin,
s_voisin, poids(s_courant, s_voisin)) poids(s_courant, s_voisin))
retourne sommets, parent retourne distance, parent
``` ```
# Exercice: algorithme de Prim # Exercice: algorithme de Prim
...@@ -521,23 +521,24 @@ sommets, parent prim(file_priorité, distance, parent) ...@@ -521,23 +521,24 @@ sommets, parent prim(file_priorité, distance, parent)
file_priorité, distance, parent initialisation(graphe) file_priorité, distance, parent initialisation(graphe)
// choix r et initialisation // choix r et initialisation
pour v dans sommets(graphe) pour v dans sommets(graphe)
O(|V|) // initialisation distance et parent // initialisation distance et parent en O(|V|)
fp = enfiler(fp, v, distance[v]) fp = enfiler(fp, v, distance[v])
retourne fp, distance, parent retourne fp, distance, parent
sommets, parent prim(file_priorité, distance, parent) distance, parent prim(graphe)
fp, distance, parent initialisation(graphe) // O(|V|)
sommets = vide sommets = vide
tant que !est_vide(file_priorité) tant que !est_vide(fp)
O(|V|) u, fp = défiler(file_priorité) u, fp = défiler(fp) // O(|V|)
sommets = insérer(sommets, u) sommets = insérer(sommets, u)
pour v dans voisinage de u et pas dans sommets 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 // màj distance + parent
O(|V|) fp = changer_priorité(fp, w, w(u, v)) fp = changer_priorité(fp, v, poids(u, v)) // O(|V|)
retourne sommets, parent retourne distance, parent
``` ```
* $O(|V|)+O(|E|)+O(|V|^2)=O(|E|+|V|^2)$ * $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 # Algorithme de Kruskal
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment