Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Présentation du pseudo-code
Pseudo code
Le tri topologique est très simple et semblable au parcours en profondeur mais a seul différence qu’il
fait appel a la date de début et de fin.
Dans cet algorithme on empile chaque sommet une fois des successeurs visités.
Une autre façon de procéder consiste à rechercher une racine (sommet sans prédécesseur), l'enlever,
et répéter l'opération autant de fois que nécessaire. C'est facile si l'on peut facilement calculer le
nombre de prédécesseurs d'un sommet ; en effet, les racines à une itération sont parmi les successeurs
des racines à l'itération précédente, et un compteur des prédécesseurs permet de les reconnaître.
L'ordre topologique sera à la fin les sommets dans l'ordre du tableau de date de fin. On commence
par un sommet donné puis tant qu'il est possible on « descend » de niveau en suivant les arcs orientés
en incrémentant à chaque étape la date de début, jusqu'à arriver à un sommet d'où aucun arc ne part.
On inscrit alors notre première date de fin. Puis on « remonte » en passant par le parent d'où on est
venu, et on visite les autres arcs qui n'ont pas encore été traités. Et on répète l'opération.
algorithme
Pour cela nous avons adopter un pseudo code très simple qui décrit le tri et sera subdivisé en deux parties car il contient aussi le parcours
en profondeur
Algorithme tri_topo (Graphe g)
Entrée : Un graphe G =(V,E) orienté non cyclique.
Sortie : La liste des sommets dans l'ordre topologique.
Variables : listeSommets = []
t = 0 //C'est la variable qui établira les dates d'entrées et sorties.
tabCouleur = [] //Le tableau qui indiquera la couleur et donc le traitement d'un sommet.
Exécution : Pour i allant de 1 à nbSommets :
ajouter(tabCouleur, 0) //On initialise tous les sommets à blancs, soit non traité.
Fin Pour;
Pour chaque x appartenant à V Faire :
Si couleur(x) = Blanc alors :
Parcours_Profondeur_Topo(G, listeSommets, x, t)
Fin Pour; Afficher(listeSommets) et/ou Retourner(listeSommets)
Fin Exécution;
L'algorithme Parcours_Profondeur_Topo(G,
listeSommets, x, t) :
Algorithme Parcours_Profondeur_Topo(G, listeSommets, x, t)
Entrée : Un graphe G =(V,E) orienté non cyclique.
La liste des sommets.
Le sommet en traitement.
La date.
Sortie : Les sommets empilés dans l'ordre topologique dans listeSommets;
execution
Cette fois, tous les arcs partant du sommet 2 ont été traités, donc on marque la date de fin pour 2 :
(2 , 9) et on remonte vers le sommet 1, qui est dans la même situation, donc 1 : (1, 10).
On répète ensuite ces opérations en commençant par un sommet qui n'a pas encore été visité, par
exemple 4 : (11, ) d'où on peut descendre en 5 : (12, ), mais pas plus loin car 6 a déjà été visité. On
a donc pour 5 : (12 , 13), puis après être remonté en 4 : (11, 14) car tous ses voisins ont été visités.
On recommence avec 7 : (15 , 16) et 9 : (17 , 18), qui n'ont aucun voisin non-traité.
Finalement, on trie les sommets par date de fin décroissante pour obtenir l'ordre suivant: 9, 7, 4, 5,
1, 2, 8, 3, 6.
Il existe plusieurs parcours topologiques pour un graphe, de même pour un parcours en profondeur,
qui varieront en fonction de la direction prise. Dans l'algorithme qui suit, on traite les sommets dans
l'ordre de la liste des fils d'un sommet, soit en commençant toujours par l’élément de gauche mai ce
n’est pas obligatoire
APPLICATION
Le tri topologique est un prétraitement qui permet ensuite de calculer les distances de plus
court chemins dans un graphe pondéré acyclique en temps linéaire en la taille du graphe.