Nom Prénom Code permanent Examen final Date : 17 décembre 2015 Titre du cours : Conception et analyse des algorithmes Sigle et groupe : INF7440 Enseignant : Alexandre Blondin Massé Instructions 1) 2) 3) 4) 5) 6) 7) 8) 9) Vous avez trois heures pour répondre à l’examen ; Vous pouvez répondre aux cinq questions de l’examen ; Les quatre meilleurs résultats seront comptabilisés ; Vous avez droit à toute votre documentation ; Il est interdit d’utiliser un ordinateur, peu importe sa taille et sa forme (téléphone portable, agenda électronique, etc.) ; Il est interdit de parler et de prêter de la documentation à un autre étudiant ; Au besoin, utilisez le verso comme brouillon ; À moins d’avis contraire, justifiez toutes vos réponses et donnez le détail de vos calculs ; Indiquez clairement vos réponses finales ; Question 1 2 3 4 5 Total Sur 25 25 25 25 25 100 Note INF7440 — Conception et analyse des algorithmes Automne 2015 Question 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (25 points) Soit T un tableau d’entiers longueur n triés en ordre croissant. Dans cette question, on s’intéresse à la conception et l’analyse d’un algorithme qui effectue une fouille trichotomique : Diviser À chaque étape, on scinde le tableau courant en 3 sous-tableaux (en réalité, on ne scinde pas le tableau, mais on utilise des curseurs qui délimitent la portion de tableau qui nous intéresse). Régner On explore le sous-tableau parmi les 3 sous-tableaux qui contient potentiellement la valeur recherchée. (a) (10 points) Écrivez le pseudocode d’une fonction récursive fonction Existe(T : tableau d’entiers triés, x : entier) : booléen qui retourne vrai si et seulement si l’entier x se trouve dans T en se basant sur une fouille trichotomique. (b) (15 points) Analysez la complexité asymptotique de votre algorithme dans le meilleur et le pire cas à l’aide de la notation Θ. Justifiez. Page 2 de 11 INF7440 — Conception et analyse des algorithmes Page 3 de 11 Automne 2015 INF7440 — Conception et analyse des algorithmes Automne 2015 Question 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (25 points) Considérons un ensemble de n points E situés dans le plan 2D. On s’intéresse à une version géométrique du voyageur de commerce qui consiste à visiter les n points puis à revenir à notre point de départ en minimisant la distance totale parcourue (on suppose qu’on se déplace en ligne droite lorsqu’on passe d’un p point à un autre, de sorte qu’on utilise la distance euclidienne dist((x1 , y1 ), (x2 , y2 )) = (x1 − x2 )2 + (y1 − y2 )2 . (a) (10 points) Écrivez le pseudocode d’un algorithme glouton qui visite les n points en choisissant, à chaque étape, un des points les plus proches parmi ceux qui n’ont pas encore été visités. Vous pouvez utiliser la notation p.x et p.y pour accéder aux coordonnées d’un point p = (x, y). (b) (5 points) Analysez la complexité de votre algorithme aux meilleur et pire cas. Page 4 de 11 INF7440 — Conception et analyse des algorithmes Automne 2015 (c) (5 points) Donnez un exemple d’un ensemble de 5 points pour lequel l’algorithme glouton donne toujours une solution optimale. (d) (5 points) Donnez un exemple d’un ensemble de 5 points pour lequel l’algorithme glouton ne donne jamais une solution optimale. Page 5 de 11 INF7440 — Conception et analyse des algorithmes Automne 2015 Question 3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (25 points) Michel le mouton aime beaucoup les carottes. Malheureusement, il est très limité dans ses déplacements : il ne peut aller que vers le bas ou vers la droite d’une unité. Supposons qu’il se trouve dans une grille de ` lignes et c colonnes. Il souhaite concevoir un algorithme qui lui permettra de manger le plus possible de carottes. Par exemple, dans la grille ci-bas 1 2 3 4 5 6 7 1 2 3 4 5 s’il effectue les déplacements ddbbddbbdd (où d signifie “droite” et b signifie “bas”), il récupère 5 carottes, soit celles aux coordonnées (1, 2), (2, 3), (3, 3), (4, 5) et (5, 5). Supposons que Michel commence toujours à la case (1, 1) et termine à la case (`, c). Vous pouvez également supposer qu’il n’y a jamais de carottes à la case (1, 1). Pour i = 1, 2, . . . , ` et j = 1, 2, . . . , c, soit C(i, j) le nombre maximum de carottes que Michel peut récupérer en se déplaçant de la position (1, 1) à la position (i, j). (a) (10 points) Donnez une formule récursive pour calculer C(i, j) (en n’oubliant pas les cas de base). Page 6 de 11 INF7440 — Conception et analyse des algorithmes Automne 2015 (b) (10 points) Donnez un algorithme basé sur la programmation dynamique qui permet de calculer le nombre maximum de carottes que Michel peut récupérer pour une grille de ` lignes et de c colonnes en supposant que la fonction ExisteCarotte(i, j) retourne 1 s’il y a une carotte à la ligne i et la colonne j, ou 0 sinon. (c) (5 points) En justifiant brièvement, calculez la complexité de votre algorithme à l’aide de la notation Θ. Page 7 de 11 INF7440 — Conception et analyse des algorithmes Automne 2015 Question 4. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (25 points) (a) (10 points) Vrai ou faux ? Supposons qu’on ait démontré qu’un certain problème P est NP-complet. Alors nécessairement, tout algorithme résolvant le problème P aura une complexité exponentielle. Justifiez brièvement votre réponse. (b) (15 points) Soit G = (V, E) un graphe non orienté connexe et k un entier positif. On dit que G est k-coloriable s’il existe une fonction (association) c : V → {1, 2, . . . , k} telle que pour toute arête {u, v} ∈ E, on ait c(u) 6= c(v). Autrement dit, il existe un coloriage des sommets utilisant au plus k couleurs de sorte que deux sommets adjacents ne soient pas de la même couleur. On s’intéresse aux deux fonctions suivantes : 1. EstColoriable(G : graphe non orienté connexe, k : entier positif) : booléen retourne vrai si et seulement si le graphe G est k-coloriable. 2. Coloriage(G : graphe non orienté connexe, k : entier positif) : coloriage ou rien retourne un k-coloriage de G s’il existe ou la valeur rien sinon. Montrez que les deux fonctions sont polynomialement équivalentes. Indice : Il suffit de montrer que la première fonction peut être implémentée à partir de la deuxième avec une complexité polynomiale en supposant que la deuxième s’effectue en temps constant (et vice-versa). Page 8 de 11 INF7440 — Conception et analyse des algorithmes Page 9 de 11 Automne 2015 INF7440 — Conception et analyse des algorithmes Automne 2015 Question 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . (25 points) Considérez l’algorithme randomisé suivant qui retourne le k-ième plus petit élément d’un tableau d’entiers T de n éléments : 1: fonction KiemeElement(T : tableau d’entiers) : entier 2: Soit y une valeur de T choisie aléatoirement de façon uniforme 3: Soit G un tableau contenant les éléments de T strictement plus petits que y 4: Soit D un tableau contenant les éléments de T strictement plus grands que y 5: si |G| = k − 1 alors 6: retourner y 7: sinon si |G| ≥ k alors 8: retourner KiemeElement(G, k) 9: sinon 10: retourner KiemeElement(D, k − |G| − 1) 11: fin si 12: fin fonction Montrez que la complexité moyenne de cet algorithme est Θ(n). Indice : Écrivez une équation de récurrence et résolvez-la à l’aide du théorème général. Page 10 de 11 INF7440 — Conception et analyse des algorithmes Page 11 de 11 Automne 2015