énoncé - LaCIM

publicité
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
Téléchargement