L3 Informatique Année 2016-2017 AMD5 TD no 2 : parcours en largeur de graphes non orientés Exercice 1 : parcours en largeur Appliquer aux deux graphes ci-dessous l’algorithme de parcours en largeur à partir du sommet 1. Pour chaque graphe, donner l’arbre résultant de ce parcours. 1 1 2 2 7 7 4 3 4 10 3 6 6 9 8 8 5 Un graphe 5 11 un autre graphe Exercice 2 : parcours et matrice d’adjacences Quel est la complexité de l’algorithme de parcours en largeur d’un graphe si celui-ci est représenté par une matrice d’adjacences ? Exercice 3 : plus courts chemins Proposer un algorithme de complexité linéaire en (n + m) (nombre de sommets plus nombre d’arêtes) qui calcule le plus court chemin dans un graphe entre deux sommets donnés. Exercice 4 : composantes connexes Proposer un algorithme de complexité linéaire en (n + m) (nombre de sommets plus nombre d’arêtes) qui calcule les composantes connexes d’un graphe. Exercice 5 : cycle Proposer un algorithme renvoyant, s’il existe, un cycle de longueur minimale passant par un sommet s donné dans un graphe G. Prouver sa correction. 1 L3 Informatique Année 2016-2017 Exercice 6 : diamètre d’un graphe Le diamètre d’un graphe est la plus grande distance possible qui puisse exister entre deux de ses sommets. On rappelle que la distance δ(a, b) entre deux sommets a et b d’un graphe est la longueur d’un plus court chemin entre ces deux sommets. On note PL(G,s) l’algorithme de parcours en largeur d’un garphe G depuis son sommet s et on suppose que PL(G,s) retourne le dernier sommet visité. Voici alors un algorithme pour calculer le diamètre d’un arbre T, ou, plus précisément, une paire (u, v) de sommets tel que le diamètre de T soit δ(u, v). prendre un sommet s quelconque de T u = PL(T,s) v = PL(T,u) return (u,v) Soient a et b deux sommets de T tel que le diamètre de T soit égal à δ(a, b). Nous allons montrer que cet algorithme est correct. On appelle feuille diamétrale une feuille de l’arbre telle qu’il existe un diamètre ayant cette feuille pour extrémité. 1. Montrer que pour tout s, P L(T, s) est une feuille de T 2. Montrer que a et b sont des feuilles de T 3. Montrer que si u est une feuille diamétrale et v = P L(T, u) alors δ(u, v) est le diamètre de T On veut maintenant montrer que, pour tout s, u = P L(T, s) est une feuille diamétrale 4. Quelles relations a-t-on entre δ(s, a), δ(s, b) et δ(s, u) ? 5. Traiter le cas u = a, le cas u = b et le cas a = b On suppose donc maintenant que les trois feuilles a, u et b sont différentes. L’arbre T restreint aux chemins entre ces trois feuilles est donc un Y. On s’intéresse maintenant à l’arbre T restreint aux chemin entre s et ces trois feuilles. 6. Supposons que s s’insère sur la branche du Y contenant u (soit s est sur le chemin, soit il s’y insère par un chemin qui transforme le Y en H). Montrer que cela produit une contradiction 7. Supposons que s s’insère ailleurs : soit au centre du Y, soit sur la branche de a, soit sur celle de b, par un chemin ou bien il est directement dessus. Dans tous ces cas montrer que u est une feuille diamétrale. 8. Conclure. Et est-ce encore vrai sur les graphes en général ? 9. Montrer que cet algorithme ne marche pas sur les graphes en général. 10. Malgré tout, montrer que si on applique à un graphe G l’algorithme ci-dessus, alors δ(u, v) 6 diam(G) 6 2δ(u, v) où diam(G) est le diamètre de G. On dit alors que δ(u, v) est une 2-approximation du diamètre. 2