Travaux Dirigés d’algorithmique no2 Représentation des graphes L’objectif du TD est de se familiariser avec les graphes et leur représentation machine. x Exercice 1. Représentations et parcours en profondeur 1. Indiquez la représentation du graphe suivant sous forme de matrice et sous forme de liste d’adjacence. m m - fm I @ 6 ? - ? @@ gm bm - cm dm 7 7 a e 2. Comment représenter un graphe pondéré? 3. Comment représenter un graphe non orienté? 4. Peut-on représenter un graphe à l’aide d’une table de hachage? 5. Faire le parcours en profondeur de ce graphe en indiquant les temps de début et fin de parcours. x Exercice 2. Modélisation 1. Le graphe du Métro est-il orienté, pondéré? 2. Expliquer comment représenter une fonction mathématique à l’aide d’un graphe. Quelle est la particularité de ce graphe? 3. Il est possible de représenter les appels de fonctions dans un programme à l’aide d’un graphe. Que représente un cycle dans un tel graphe? 4. On considère le problème d’ordonnancement des tâches T1 , . . . , Tn , où chaque tâche a possiblement des contraintes de précédence par rapport aux autres tâches, ainsi qu’un temps d’exécution. On souhaite minimiser le temps total d’exécution de l’ensemble des tâches, sachant qu’elles peuvent être exécutées en parallèle. Comment modéliser et résoudre ce problème à l’aide d’un graphe? 1 x Exercice 3. Complexité Pour chacune des deux représentations, comment fait-on pour: 1. tester si une arête (i, j) est dans le graphe, 2. ajouter une arête (i, j) dans le graphe, 3. compter le nombre d’arêtes partant d’un sommet, 4. compter le nombre d’arêtes, 5. compter le nombre d’arêtes arrivant sur un sommet. Indiquez la complexités de ces opérations en fonction du nombre A d’arêtes et S de sommets. x Exercice 4. Changement de structure Ecrivez les algorithmes pour passer d’une représentation par liste d’adjacence à une représentation matricielle et réciproquement. Indiquez leur complexité. x Exercice 5. Test de connexité Pour les deux types de représentation d’un graphe non-orienté, écrivez un algorithme qui teste s’il est connexe. x Exercice 6. Graphe de la matrice transposée Soit G un graphe représenté par sa matrice d’adjacence M . Que peut-on dire du graphe t G représenté par la transposée t M de M ? Quel est l’algorithme pour calculer t G. Proposez ensuite un algorithme pour calculer t G quand G est représenté par des listes d’adjacence. x Exercice 7. Produit Matriciel On considère une représentation matricielle M d’un graphe. A quoi correspond la matrice M 2 = M × M ? A quoi correspond M 3 ? Peut-on se servir de cette propriété? x Exercice 8. Trou Noir Un trou noir est un sommet dont aucun arc ne part et tel que tous les autres sommets ont un arc les reliant à lui. Proposez un algorithme linéaire en le nombre de sommets (c-à-d en O(|S|) ) qui trouve l’éventuel trou noir d’un graphe représenté par sa matrice d’adjacence. 2