TD2 - LIFL

publicité
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).
Téléchargement