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
0≤i<j≤n+1) le coût optimal de la coupe complète d’un tronçon de bûche dont l’extrémité