ENSIN5U1 - Algorithmique avancée TD1 --Tri topologique

publicité
ENSIN5U1 - Algorithmique avancée
TD1 --Tri topologique
Michel Van Caneghem -- d'après les documents de Stéphane Grandcolas
10 septembre 2012
Problème
Etant donné un graphe orienté acyclique G = (S, A), on veut trouver un ordre linéaire
(total) des sommets de G tel que si (u, v) ∈ A alors u apparaît avant v dans cet ordre
linéaire. Si le graphe n'est pas acyclique, un tel ordre n'existe pas.
Algorithme
On trouve un tel ordre en faisant un parcours en profondeur du graphe :
1. appeler la fonction ParcoursEnProfondeur(G) pour calculer les fins de traitements
f (v) pour chaque sommet v,
2. chaque fois que le traitement d'un sommet s'achève, l'insérer dans une liste chainée,
3. renvoyer cette liste chainée.
Question 0. Ce tri sert à beaucoup de choses (PERT, make, ...).
Ordonnez les sommets du graphe à droite.
Vous pouvez rajouter une arête pour créer un cycle et voir ce
qu'il se passe.
Question 1. Ecrire en C les deux fonctions vues en cours, qui mettent en oeuvre le parcours
en profondeur d'un graphe.
Question 2. Ecrire en C une fonction TriTopologique qui pour un graphe donné représenté
par des listes d'adjacence, construit la liste chainée des sommets triés topologiquement.
Question 3. Quelle est la complexité de cet algorithme ?
Rappel : étant donnée une arborescence en profondeur du graphe orienté G = (S, A), ont
dit que (u, v) est un arc de retour si u est un descendant de v dans cette arborescence (et
donc d[v] < d[u] < f [u] < f [v]).
Question 4. Montrez que G contient un cycle si et seulement si un parcours en profondeur
de G génère un arc de retour.
Question 5. Justifiez la validité de la fonction TriTopologique.
§ § § § § § § § § § § § § § § § § § § § § § § § § § §
1
Téléchargement