INF4705 Analyse et conception d’algorithmes, Examen final Page 1 sur 4
ÉCOLE POLYTECHNIQUE DE MONTRÉAL
Département de génie informatique
Cours INF4705 : Analyse et conception d’algorithmes (Hiver 2005)
3 crédits (3-1.5-4.5)
EXAMEN FINAL
DATE : Vendredi, le 29 avril 2005
HEURE : 13H30 à 16H00
DURÉE : 2H30
NOTE : Aucune documentation permise. Calculatrice permise.
Ce questionnaire comprend 3 questions sur 2 pages pour 20 points.
Bon travail !
Question 1 : Vrai ou Faux ? Aucune justification requise. [6 points]
a) [1 point] Soit un graphe orienté G. Si un parcours en profondeur de G ne génère aucun
arc retour, alors G est acyclique.
Vrai.
b) [1 point] La variante « tout ou rien » de l’algorithme vorace résolvant le problème du
sac-à-dos donne toujours la solution optimale.
Faux (commentaire : la variante fractionnaire est optimale).
c) [1 point] La variante non-déterministe du tri de Hoare (dit aussi « tri rapide » ou
« quicksort »), qui consiste à choisir aléatoirement le pivot, est toujours plus rapide que la
variante déterministe.
Faux (commentaire : dans le cas moyen, la version déterministe est plus rapide que la
version non-déterministe, du fait des constantes cachées).
d) [1 point] Un algorithme Monte-Carlo faux-biaisé et (3/4)-correct, se trompe 1 fois sur 4
lorsqu’il répond « Vrai ».
Vrai.
e) [1 point] L’algorithme de test de primalité de Miller-Rabin est faux-biaisé. Par
conséquent, cet algorithme ne se trompe jamais lorsqu’il teste la primalité d’un nombre
composé.
INF4705 Analyse et conception d’algorithmes, Examen final Page 2 sur 4
Faux (commentaire : l’algorithme ne se trompe jamais lorsqu’il teste la primalité d’un
nombre premier).
f) [1 point] Comme les algorithmes « diviser-pour-régner », les algorithmes de
programmation dynamique sont basés sur une relation de récurrence.
Vrai.
Question 2 : Algorithmes de programmation dynamique [8 points]
On suppose ici que vous disposez d’une bûche de bois de longueur (en mètres) que vous
voulez couper à n emplacements spécifiques situés à 1, 2, …, n mètres de l’extrémité gauche.
Votre scierie locale facture x $ pour découper une bûche de longueur x, indépendamment des
emplacements où vous souhaitez effectuer les coupes. Par exemple, supposons que vous
vouliez découper une bûche de longueur =12 mètres aux emplacements 1=2, 2=5 et 3=8
mètres de l’extrémité gauche. La première coupe vous coûtera 12 $, quel que soit son
emplacement, puisque votre bûche mesure =12 mètres. En coupant à 1=2 mètres, il reste une
bûche de longueur 2 mètres, et une bûche de longueur 10 mètres. La coupe de cette dernière
vous coûtera à son tour 10 $. Après celle-ci, vous aurez une seconde bûche de longueur 2-1=3
mètres, et une troisième bûche de longueur -2=7 mètres, dont la coupe finale vous coûtera 7 $.
Ainsi, la coupe de votre bûche de longueur =12 mètres dans l’ordre 1, 2, 3 vous coûtera
12+10+7=29 $. En revanche, une coupe dans l’ordre 2, 1, 3 vous coûterait 12+5+7=24 $.
a) [1 point] Considérons un algorithme vorace qui découpe la bûche de telle façon que les
deux morceaux résultants soient aussi petits que possible, c’est-à-dire qui effectue la
coupe à un emplacement aussi central que possible. Montrez sur un exemple que cet
algorithme ne donne pas toujours la solution optimale.
Réponse :
Considérons une bûche de longueur 10 mètres que l’on souhaite couper à 4, 5 et 6
mètres de son extrémité gauche. L’algorithme vorace précédent effectuerait sa première
coupe à 5 mètres. On obtiendrait alors deux bûches de longueur 5 mètres chacune. Le
coût total serait donc égal à 10+5+5=20 $.
En revanche, si l’on coupe la bûche dans l’ordre 4, 6 et 5, le coût n’est plus que de
10+6+2=18 $.
L’algorithme vorace n’est donc pas optimal.
b) [3 points] Puisque le principe d’optimalité s’applique ici de manière évidente, nous
pouvons tenter une approche par la programmation dynamique. Soit c[i,j] (pour
0i<jn+1) le coût optimal de la coupe complète d’un tronçon de bûche dont l’extrémité
INF4705 Analyse et conception d’algorithmes, Examen final Page 3 sur 4
gauche est en i, et l’extrémité droite en j. Nous voulons donc calculer c[0,n+1]. Donnez
une définition récursive pour c[i,j].
Réponse :
Si j=i+1, il n’y a pas de coupe à faire, donc le coût est nul dans ce cas.
Si j=i+2, il y a une seule coupe à faire, pour un coût total de i+2-i.
Si j>i+2, le coût de la première coupe est égale à la longueur du tronçon, soit j-i, quel
que soit l’emplacement de la coupe. Ce coût est ajouté à celui de la coupe des deux
tronçons résultant de la première coupe. Donc :
c[i,j] = (j - i) + min( c[i,k] + c[k,j] ) (pour j>i+2)
c) [3 points] Donnez un algorithme calculant le coût optimal d’une coupe (il ne vous est pas
demandé de trouver l’ordre optimal de coupe).
Réponse :
CoupeBûche( [0..n+1] )
FOR i <- 0 TO n DO c[i,i+1] <- 0
FOR i <- 0 TO n-1 DO c[i,i+2] <- ([i+2] - [i])
FOR d <- 3 TO n+1 DO
FOR i <- 0 TO n+1-d DO
m <- c[i+1,i+d]
FOR k <- i+2 TO i+d-1 DO
IF m > c[i,k] + c[k,i+d] THEN m <- c[i,k] + c[k,i+d]
c[i,i+d] <- ([i+d] - [i]) + m
RETURN c[0,n+1]
d) [1 point] Quelle est la complexité de cet algorithme ? Aucune justification n’est requise.
Réponse :
Il y a O(n2) valeurs à calculer, et chacune requiert un temps en O(n). La complexité est
donc en O(n3).
Question 3 : Algorithmes probabilistes [6 points]
Soit un tableau T[1..N] ayant N valeurs et soit x une valeur entière. Le tableau T est dit majoritaire
s’il contient un élément x tel que le nombre d’éléments égaux à x dans T est strictement
supérieur à n/2.
a) [2 points] Écrivez un algorithme Monte Carlo qui vérifie si le tableau T[1..N] est
majoritaire.
Réponse :
FONCTION Major (T[1..n])
i = uniforme (1..n) //Tirer un élément x au hasard dans T
x = T[i]
k = 0
POUR j = 1 à n
INF4705 Analyse et conception d’algorithmes, Examen final Page 4 sur 4
SI T[j] = x ALORS k = k+1
RETOURNER (k > n/2)
b) [2 points] Indiquez si votre algorithme est biaisé ou non. Si oui, alors indiquez qu’elle est
la valeur biaisée. Justifiez.
Réponse :
L’algorithme est vrai-biaisé : si l’algorithme retourne Vrai, alors le tableau est majoritaire.
c) [2 points] Indiquez si votre algorithme est p-correct. Si oui, alors indiquez la valeur de p.
Justifiez.
Réponse :
Lorsque l’algorithme retourne Vrai, le tableau est majoritaire. La contraposée est : si le
tableau est minoritaire, l’algorithme retourne Faux. L’algorithme peut aussi retourner
Faux lorsque le tableau est majoritaire. Mais dans ce cas, la probabilité que le choix
tombe sur un élément minoritaire est inférieure à 1/2. Donc, p=1/2.
1 / 4 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !