Graphes et Algorithmes - Créé par Tristan Vanrullen.

publicité
C.N.A.M.
Centre Régional Associé d’Aix-en-Provence
Enseignant: Tristan VanRullen
1ere session 2005–2006
Durée: 3 heures
Tous documents autorisés
Graphes et Algorithmes
Cet examen comporte 5 exercices , pour un total de 20 points.
Il est conseillé de lire attentivement la totalité de ce sujet puis de répondre aux questions dans l’ordre.
Une attention particulière sera portée sur la qualité de la rédaction.
Répondez le plus possible aux questions. Détaillez vos réponses autant que possible.
Les questions facultatives permettent d’équilibrer votre note si vous échouez à des questions non
facultatives.
3 points
1. Complexité
Une fois, deux fois, trois fois...
Observez attentivement l’algorithme ci-dessous. Celui-ci comporte deux boucles imbriquées et
quelques instructions de calcul.
fonction UnCalculComplexe(in n:entier):entier
var compteur1, total1, compteur2, total2: entier;
début
total1:=0;
total2:=0;
compteur1:=1;
tant que compteur1 <= n faire
total1:=total1+compteur1;
compteur1:=compteur1+1;
compteur2:=compteur1;
tant que compteur2 <= n faire
total2:=total2+compteur2;
compteur2:=compteur2+1;
fintantque;
fintantque;
total2:=total2+total1;
UnCalculComplexe:=total2;
fin;
(a) Effectuez à la main le calcul correspondant à l’appel de fonction UnCalculComplexe(3). Donnez la valeur finale de la variable total2 pour cet exemple.
(b) Combien de fois sera effectué le test compteur1 <= n de la boucle la plus englobante?
Donnez ce nombre en fonction de n.
(c) Pour un tour donné de la boucle la plus englobante, Combien de fois le test compteur2 <= n
de la boucle la plus emboı̂tée sera-t-il effectué? Donnez ce nombre en fonction de n et de
compteur1.
(d) En tenant compte des deux résultats précédents, combien de fois le test compteur2 <= n
sera-t-il effectué? Donnez ce nombre en fonction de n uniquement.
(e) (question facultative) Si on suppose que chaque instruction d’affectation compte pour une
instruction, qu’une opération d’addition compte aussi pour une instruction, ainsi que chaque
Page 1 sur 4
1ere session
Graphes et Algorithmes
Mardi 7 février 2006
exécution d’un test de critère d’arrêt lors de chaque tour de boucle, dites combien d’instructions
seront effectuées en tout par la boucle la plus englobante, en fonction de n.
4 points
2. Optimisation
Qui dit mieux?
Un informaticien ajoute une instruction conditionnelle au calcul précédent. Observez ce test dans
l’algorithme ci-dessous. Les questions ne portent pas sur l’intérêt de ce test, qui est parfaitement
inutile et dénué de sens, mais sur la possibilité d’optimiser le nombre d’instructions du test.
fonction UnCalculComplexe(in n:entier):entier
var compteur1, total1, compteur2, total2: entier;
début
total1:=0;
total2:=0;
compteur1:=1;
tant que compteur1 <= n faire
total1:=total1+compteur1;
compteur1:=compteur1+1;
compteur2:=compteur1;
tant que compteur2 <= n faire
total2:=total2+compteur2;
si ((NON(compteur2-total1<total2-total1+compteur1))
OU (NON(compteur2-total2>total1-total2+compteur1)))
alors
total1 :=total1-compteur2;
sinon
total2 :=total2-compteur1;
finsi
compteur2:=compteur2+1;
fintantque;
fintantque;
total2:=total2+total1;
UnCalculComplexe:=total2;
fin;
Dans les questions ci-dessous, considérez qu’il faut compter une instruction pour chaque comparaison, chaque addition, soustraction, ainsi que pour chaque opération booléenne (OU, ET et
NON).
(a) En ne cherchant pas à comprendre l’utilité des instructions de cette condition, pouvez vous
donner le nombre d’instructions effectuées lors du test?
(b) En ne cherchant pas à comprendre l’utilité des instructions de cette condition, pouvez vous
donner une simplification du test? En utilisant les mathématiques et la logique des propositions, vous réduirez ce test en un test plus simple.
(c) (question facultative) En cherchant à comprendre l’utilité des instructions conditionnées par
ce test et en utilisant les instructions qui précèdent le test, pouvez vous donner une nouvelle
simplification du test et de toute l’instruction qui en découle?
(d) (question facultative) Si la réponse à la question précédente est négative, pouvez-vous conclure
quelque chose à propos de l’algorithme ci-dessus?
Page 2 sur 4
1ere session
4 points
Graphes et Algorithmes
Mardi 7 février 2006
3. Algorithmes simples dans les graphes
...Adjugé!
Les questions ci-dessous portent sur des graphes quelconques, orientés ou non, sauf lorsque
l’orientation est précisée.
Les graphes peuvent être représentés par une matrice d’adjacence pour les algorithmes demandés.
(a) Dites quelle est la caractéristique de la matrice d’adjacence d’un graphe non-orienté.
(b) Donnez un algorithme simple permettant de dire si un graphe ne contient pas de boucle.
(c) Donnez un algorithme simple permettant de dire si un graphe contient une boucle.
(d) En considérant cette fois que le graphe est orienté, donnez un algorithme simple permettant
de dire si celui-ci contient un arc X-Y pour chaque arc Y-X, X et Y étant des sommets
quelconques du graphe.
(e) (question facultative) Toujours avec les matrices d’adjacence, dans un graphe orienté, donnez
un algorithme permettant de dire si le graphe contient un circuit (boucle de longueur supérieure
à zéro).
4 points
4. Parcours de graphes
Par ici? Non, par là!
(a) Donnez un ordre de visite des sommets du graphe non orienté ci-dessus lors d’un parcours en
profondeur à partir du sommet A.
(b) Donnez les sommets d’articulation de ce graphe.
(c) Donnez un algorithme qui calcule la longueur d’un chemin entre deux sommets donnés X et
Y d’un graphe non orienté.
Page 3 sur 4
1ere session
Graphes et Algorithmes
Mardi 7 février 2006
(d) (question facultative) Donnez un algorithme qui calcule le nombre de sommets faisant partie
de la composante connexe d’un sommet X donné dans un graphe non orienté quelconque
(pouvant avoir plusieurs composantes connexes).
5 points
5. Mesure dans les graphes valués
C’est mieux par ici, il y a un raccourci!
On se prépare à présent à étudier un graphe non orienté doté d’une seule composante connexe.
Un plombier malin doit installer la plomberie de tous les appartements neufs d’un immeuble.
Malheureusement pour lui, ce plombier a une jambe cassée et il se déplace très lentement à cause
du plâtre et des béquilles.
Dans cet immeuble, il y a trois appartements par étage et il y a dix étages en tout.
Dix tâches sont à réaliser dans différents lieux de chaque appartement.
Nous supposerons que les tâches du plombier prennent toutes un temps identique (1 minute).
Entre deux tâches, le plombier fait une pause de 1 minute. L’ordre entre les tâches à réaliser dans
chaque appartement importe peu.
Quand le plombier achève ses tâches dans un appartement, il se rend dans un autre situé au même
pallier ou à un appartement d’un étage voisin (au dessus ou au dessous).
Chaque déplacement du plombier entre un appartement X et un appartement Y d’un même étage
prend 1 minute. Il faut penser que le plombier doit transporter tout son matériel, ce qui provoque
des aller-retours dont nous cumulerons la durée, comme s’il s’agissait d’un seul trajet.
Chaque déplacement du plombier entre un appartement X et un appartement Y d’un étage voisin
prend 3 minutes.
On supposera que le plombier ne sort pas de l’immeuble tant que toute la tâche n’est pas achevée.
Le plombier est prévoyant et souhaite connaı̂tre la durée totale de son intervention avant de
commencer le travail. Il réfléchit un peu et se dit qu’il y a plusieurs façons de rechercher la plus
petite durée de trajet passant par tous les appartements et toutes les tâches. En effet, il est possible
de monter plusieurs étages, d’en descendre quelques uns, puis de faire quelques appartements du
même étage etc. Dans n’importe quel ordre! Mais le plombier est malin, et il se dit qu’il doit bien
y avoir une technique imparable pour résoudre ce problème.
(a) Quel problème courant de la théorie des graphes ressemble au problème du plombier? Quels
sont les sommets? Quels sont les arcs?
(b) Si vous deviez choisir un algorithme particulier résolvant définitivement son problème, parmi
recherche exhaustive, plus proche voisin et meilleure insertion, lequel utiliseriez-vous?
Raisonnez en tenant compte du fait que le graphe représentant les étapes possibles du plombier
est particulier (il n’est pas complet puisque les tâches d’un appartement ne peuvent pas être
connectées aux tâches d’un autre appartement).
(c) Le plombier se dit, à force d’étudier son problème, que la plus courte durée est calculable sans
algorithme général, simplement par simplification mathématique du problème. Pouvez-vous
dire pourquoi?
(d) Dessinez une partie du graphe et donnez une formulation de la plus courte durée totale de
trajet du plombier en fonction du nombre E d’étages de l’immeuble.
(e) Si par malheur il était nécessaire que le plombier redescende à sa camionnette à chaque fois
qu’il achève un étage, comment représenteriez vous le nouveau graphe? Donnez un schéma
avec deux étages et un rez de chaussée. Le graphe peut-il rester non orienté? Indiquez les
durées des arcs de retour vers la camionnette (on supposera que celle-ci est garée au rez de
chaussée et qu’il faut le même temps pour s’y rendre que pour changer d’appartement en
tenant compte des durées de changement d’étage).
(f) (question facultative) Indiquez le meilleur algorithme permettant de résoudre ce nouveau
problème parmi ceux proposés précédemment. Le chemin choisi par le plombier grâce à son
raisonnement malin de la question c) reste-t-il valable?
Page 4 sur 4
Téléchargement