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