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

Documents pareils