Graphes et langages M2201 2015–2016 TD 2 Département Informatique Dans ce TD, nous allons étudier des algorithmes pour calculer la fermeture transitive d’un graphe. Exercice 1 : Comptage de chemins et cycles Q1 : Dessinez le graphe non orienté qui admet pour matrice d’adjacence la matrice M ci-dessous. M = 0 1 1 0 1 0 1 0 1 1 0 1 0 0 1 0 Q2 : Calculez (produit non booléen) M 2 , M 3 , puis M + M 2 . Q3 : Combien y a-t-il de chaînes de longueur 2 menant 1 à 2 ? 2 à 4 ? 3 à 4 ? Q4 : Combien y a-t-il de chaînes de longueur ≤ 2 menant 1 à 2 ? 2 à 4 ? 3 à 4 ? Q5 : Combien y a-t-il de chaînes de longueur 3 menant 2 à 3 ? 2 à 1 ? Q6 : Combien y a-t-il de cycles de longueur 3 ayant 3 comme sommet de départ ? 4 comme sommet de départ ? Q7 : Donnez un exemple de cycle de longueur 4. Est-il élémentaire ? Q8 : Donnez tous les cycles de longueur 3. (Y en a t-il 1, 2, 3, ou 6 ?) Q9 : Donnez tous les cycles élémentaires de ce graphe. Exercice 2 : Calcul de la fermeture transitive d’un graphe Définition et exemple Soit G = (X, A) un graphe. On appelle fermeture transitive de G le graphe T (G) = (X, A0 ) avec (x, y) ∈ A0 si et seulement si il existe un chemin entre x et y dans G. Q10 : Calculez à la main la fermeture transitive du graphe de droite dans la figure 1. 2 1 2 1 3 5 4 3 5 4 (a) 1 2 4 3 (b) 5 (c) Figure 1 – Graphes pour lesquels on veut calculer la fermeture transitive Calcul matriciel et fermeture transitive Considérons maintenant un graphe à n sommets représenté par sa matrice d’adjacence R et soit R le graphe associé à cette matrice. Q11 : Écrivez la formule de calcul d’un coefficient pour le produit booléen de deux matrices. Q12 : Que représente l’expression F suivante ? F = R ∪ R 2 ∪ . . . ∪ Rn Q13 : Déduisez un algorithme permettant de calculer la fermeture transitive de R. Q14 : Quelle est sa complexité ? Soient S1 , S2 , . . . les graphes définis de la manière suivante : (1) (2) S1 = R ∪ R2 Sk = Sk−1 ∪ 2 Sk−1 , pour k ≥ 2 (3) Q15 : Déduisez une méthode plus rapide que la précédente pour calculer la fermeture transitive de R. Quelle est sa complexité ? Exercice 3 : Méthode de Roy-Warshall La méthode de Roy-Warshall est la méthode la plus rapide connue pour déterminer la fermeture transitive T (G) d’un graphe G. En voici la description : Soit θr (G) le graphe obtenu à partir du graphe G et du sommet r de la manière suivante : 1. θr (G) a les mêmes sommets que G. Il possède un arc du sommet i vers le sommet j dans l’un ou l’autre des deux cas suivants : (a) il y a un arc dans G de i vers j (b) il y a un arc dans G de i vers r et un arc dans G de r vers j 2. pour un graphe contenant n sommets calculer θ1 (G), puis θ2 (θ1 (G)) puis θ3 (θ2 (θ1 (G))), jusqu’à Θ(G) = θn (. . . (θ2 (θ1 (G))) . . .)). 3. Le graphe ainsi obtenu est la fermeture transitive du graphe G. Q16 : Écrivez cette méthode sous la forme d’un algorithme. Q17 : Quelle est la complexité de l’algorithme de Roy-Warshall ? Q18 : Appliquez l’algorithme de Roy-Warshall aux graphes de la figure 1. Q19 : Montrez que pour tout arc (i, j) ajouté par l’algorithme, il existe un chemin entre i et j dans G. Q20 : Déduisez que Θ(G) ⊆ T (G). Q21 : Montrez que pour tout graphe G, θs (θr (G)) = θr (θs (G)). Q22 : Déduisez que l’ordre d’application des θr (.) n’a pas d’importance dans l’algorithme. Q23 : Montrez que s’il existe un chemin c = [i, . . . , j] tel que (i, j) n’est pas dans Θ(G) alors il existe un chemin c0 = [i, . . . , j 0 ] de plus petite longueur que c t.q. (i, j 0 ) n’est pas dans Θ(G). Q24 : Grâce à une démonstration par l’absurde, déduisez que T (G) ⊆ Θ(G).