2011-12.DE.correction.tdg2016-11-07 09:29337 KB
Transcription
2011-12.DE.correction.tdg2016-11-07 09:29337 KB
EFREI 2011-2012 - L’3 - Théorie des Graphes Devoir Surveillé – Novembre 2011 Eléments de correction Notation Les poids relatifs suivants ont été appliqués aux différentes questions : Q1 Q2a Q2b Q3 Q4a Q4b Q5a Q5b Q5c Q6 4 4 1 3 3 1 2 1 1 3 Le total a été ramené sur 20. Une majoration générale a ensuite été appliquée. 1. Questions de cours Chaque question de cours est notée de façon binaire : vous avez bon ou faux, pas de note intermédiaire. Notation : Selon les besoins dans les questions qui suivent, on note : GO = ( SO , AO ) un graphe orienté de sommets SO et d’arcs AO, GNO = ( SNO , ANO ) un graphe non orienté de sommets SNO et d’arêtes ANO. 1a. Qu’est-ce qu’une boucle dans GO ? Un arc (x,x) ∈AO, avec x ∈SO. 1b. Quand dit-on que GNO est d’ordre N ? Quand SNO contient N sommets. 1c. Soit G = ( S , A ) un graphe partiel de GO engendré par A ⊆ AO. Que peut-on dire de S par rapport à SO ? S = SO 1d. Quand deux sommets x et y de SO sont-ils adjacents ? Dans un graphe orienté SO, y est adjacent à x si (x,y) ∈ AO. Des réponses plus larges (bien que inexactes) ont été acceptées. 1e. Quelle propriété GO doit-il respecter pour être un graphe complet ? ∀ x ∈ SO, ∀ y ∈ SO, (x,y) ∈ AO. 1f. Soit x1, x2, x3,…, xn des éléments de SO. Quand dit-on que (x1,x2,…,xn) est un chemin dans GO ? Quand on a : ∀ 1≤i<n, (xi,xi+1) ∈ AO 1g. Sous quelle(s) condition(s) peut-on dire que GNO est un graphe connexe ? Si, pour tout couple de sommets x et y de SNO, il existe une chaîne reliant x (extrémité initiale de la chaîne) et y (extrémité terminale de la chaîne). 1h. Dans quelle(s) condition(s) peut-on dire que GNO est un arbre ? Quand GNO est connexe et sans cycle. 1i. Quelle(s) propriété(s) doit respecter le rang d’un sommet en fonction de celui de ses voisins, prédécesseurs et successeurs ? ∀ x ∈ Γ-1(y), rang(x) < rang (y). ∀ y ∈ Γ(x), rang(x) < rang (y). 2. Arbre couvrant de poids minimum Soit le graphe non orienté et valué suivant : 2a. Calculez un arbre couvrant de poids minimum en utilisant une des méthodes de Kruskal. Votre réponse doit inclure : - une description en quelques lignes de la méthode utilisée, cf. cours - la liste des actions / choix effectués à chaque étape, Kruskal constructif – ajouts successifs des arêtes : AB – EF – JL JK – NL HG – CD AK – NE HJ LD Kruskal destructif – suppressions successives des arêtes : KC AH – BC – KD – GF – ED HN – GN AJ – BK – NF – LE JN – KL Les lignes ci-dessus sont réalisées dans l’ordre ; sur une même ligne les arêtes sont prises en compte dans un ordre quelconque. - l’arbre calculé (sous la forme d’un schéma dans lequel les positions respectives des sommets seront les mêmes que sur le sujet !), - son poids. 23 2b. Expliquez le fonctionnement de l’algorithme de Prim. Cf. cours et revoir l’énoncé du TP 3. Celles et ceux qui ont bien travaillé sur ce TP ne doivent pas avoir eu le moindre problème pour répondre à cette question. 3. Recherche de chemin le plus court Soit le graphe orienté et valué suivant : Calculez les chemins les plus courts de A à tout autre sommet en utilisant l’algorithme de Dijkstra. Votre réponse doit inclure : - les choix effectués et les valeurs calculées à chaque étape, - les valeurs des chemins les plus courts, - pour chaque sommet son prédécesseur dans le chemin le plus court calculé. Légende du tableau : Colonne ‘CC’ : sommets dans CC, dans l’ordre de leur passage de M vers CC : A, B+C, D, E+G, F, H, J. Case des colonnes relatives aux sommets : valeur de π suivie du prédécesseur du sommet ayant produit cette valeur (prédécesseur dans le plus court chemin venant de A). Arrêt car tous les sommets sont dans CC. On remarque que, J n’étant pas accessible depuis A, la valeur π(J) reste à ∝. 4. Graphe d’ordonnancement Soit le tableau de tâches et contraintes suivant : Tâche A Durée 1 Contraintes Aucune B 2 Aucune C 3 Aucune D 4 A et B E 5 B et C F 6 D et E G 7 D, E et F H 8 G Interprétation : par exemple, D a une durée d’exécution de 4 unités de temps, et ne peut commencer que lorsque A et B sont terminées. 4a. Construisez un graphe d’ordonnancement correspondant à ce tableau. Votre réponse doit inclure : - une représentation du graphe sous forme de schéma, - une définition / explication de l’ensemble des sommets inclus dans le graphe, une définition / explication des arcs ou arêtes (à vous de décider !) présents ou présentes dans le graphe. Les sommets représentent les tâches. Les arcs représentent les contraintes, par exemple D ne peut démarrer que lorsque les tâches A et B sont terminées : Γ-1(D)={A,B}. Les valeurs associées sont les durées d’exécution des tâches exécutées en premier. On interprète ainsi l’arc (A,D) par : entre le début d’exécution de A et celui de D, il doit s’écouler un temps au moins égal à la durée d’exécution de A, soit ‘1’. Le sommet ω (fin de projet) doit être ajouté pour pouvoir représenter la durée d’exécution de H qui n’est la contrainte d’aucune autre tâche. L’interprétation ci-dessus entraîne l’arc (H,ω) et sa valeur. Le sommet α (début de projet) est ajouté « par habitude », « par symétrie », « pour simplifier quelques algorithmes de calcul des calendriers », mais n’est pas absolument nécessaire. Les arcs issus de α s’interprètent également de la même façon que les autres, et donc avec pour valeur la durée d’exécution de α, soit 0. 4b. Comment peut-on calculer le calendrier au plus tôt ? Vous donnerez une méthode et/ou une formule mathématique. La date au plus tôt d’une tâche T est la valeur maximale des chemins allant de α à T. Elle peut se calculer en recherchant ces chemins, ou par une méthode mathématique récursive : Notons D+tôt(T) la date au plus tôt d’une tâche T, et d(T) sa durée. D+tôt(α) = 0 D+tôt(y) = MAX [ D+tôt(x) + d(x) ] pour tout y ≠ α x ∈ Γ-1(y) 5. Matrices et demi-degrés Soit le graphe orienté non valué suivant : Les valeurs associées à chaque arc sont leurs numéros. 5a. Construisez sa matrice d’adjacence (sommet x sommet) et sa matrice d’incidence (sommet x arc). A B C D E F A Faux Vrai Faux Faux Faux Faux B Vrai Faux Faux Vrai Faux Faux C Vrai Faux Faux Vrai Faux Faux D Faux Faux Faux Faux Faux Faux E Faux Faux Vrai Faux Faux Faux F Faux Faux Faux Faux Faux Faux A B C D E F 1 1 0 -1 0 0 0 2 0 -1 0 1 0 0 3 0 0 1 0 -1 0 4 -1 1 0 0 0 0 5 1 -1 0 0 0 0 6 0 0 -1 1 0 0 5b. En vous basant sur le graphe précédent, comment calculez-vous les demi-degrés intérieurs et extérieurs avec chacune de ces matrices ? Si l’on se base effectivement sur le graphe donné en énoncé, on pourrait imaginer les méthodes suivantes : Matrice d’adjacence Demi-degré extérieur d’un sommet = nombre de ‘vrai’ sur la ligne du sommet Demi-degré intérieur d’un sommet = nombre de ‘vrai’ sur la colonne du sommet Matrice d’incidence Demi-degré extérieur = nombre de ‘1’ sur la ligne du sommet Demi-degré intérieur = nombre de ‘-1’ 5c. Dans quels cas de graphes est-ce que ces solutions ne marchent plus ? Malheureusement, dans un cadre plus général : Matrice d’adjacence : lorsqu’il y a plusieurs arcs d’un sommet x vers le même sommet y, un seul ‘vrai’ est présent dans une case et la valeur calculée n’est qu’un minorant de la vraie valeur du demi-degré. Matrice d’incidence : la définition standard d’une matrice d’incidence ne permet pas de représenter une boucle, et le calcul des demi-degrés est ainsi difficile. 6. Structures de données Considérez les déclarations suivantes dans un programme écrit en C++ : const int MaxS = 100 ; const int MaxA = 1000 ; typedef struct { int NBS ; bool ** M ; } t_graphe_1 ; typedef struct { int NBS ; int NBA ; int M [MaxS][MaxA] ; } t_graphe_2 ; typedef struct { int NBS ; int ** M ; } t_graphe_3 ; typedef struct { int NBS ; int NBA ; int M1 [MaxS][MaxA] ; int M2 [MaxA] ; } t_graphe_4 ; t_graphe_1 G1 ; t_graphe_2 G2 ; t_graphe_3 G3 ; t_graphe_4 G4 ; Expliquez le fonctionnement de chaque type de représentation de graphe. Pour chaque structure de données, vous expliquerez d’abord son utilisation générale simple, c'est-à-dire la façon par laquelle chaque solution représente les sommets ainsi que les arcs ou arêtes. Vous discuterez ensuite des cas particuliers suivants : - que se passe-t-il s’il est impossible de connaître à l’avance (lors de la compilation / génération de l’exécutable) le nombre de sommets ou le nombre d’arcs ; - comment chaque solution s’adapte-t-elle à des graphes orientés, à des graphes non orientés ; - que faut-il faire pour pouvoir représenter des graphes valués. Voir le document déposé sur Campus qui donne certainement quelques éléments de réponse… FIN