Sup’Galil´ee INFO1 S1– Ann´ee 2013–2014
Algorithmique
TD 03 : Programmation dynamique
Travail `a risque
Une petite compagnie de d´eveloppement de pages web re¸coit chaque semaine des propositions de
travail pour la semaine. Certaines propositions sont “peu sensibles” (par exemple, refaire le site de
l’´ecole ´el´ementaire du quartier) tandis que d’autres sont “tr`es sensibles” (par exemple, prot´eger le site
d’une grosse compagnie). Le stress engendr´e par un travail sensible est tel que les programmeurs ont
besoin d’une semaine de repos apr`es (il est impossible d’accepter un travail imm´ediatement apr`es un
travail `a risque).
Chaque travail produit un gain, diff´erent de celui des autres travaux, et la compagnie cherche bien sˆur
`a maximiser ses gains. Le tableau p[i] contient le gain de la meilleur offre “peu sensible” et le tableau
t[i] contient le gain de la meilleure offre “tr`es sensible”.
1/On suppose que sur 4 semaines la compagnie re¸coit des offres dont les gains sont les suivants :
Semaine 1 2 3 4
p[i] 10 10 10 10
t[i] 15 15 50 15
Quels offres doit-on accepter pour maximiser le gain ?
2/Montrer que l’algorithme suivant ne r´esout pas le probl`eme. Pour cela, on donnera une instance du
probl`eme (une s´erie d’offres “peu sensibles” et “tr`es sensibles”) pour laquelle l’algorithme ne renvoie pas
le bon r´esultat.
i=1
Tant que i<n faire
Si t[i] > p[i] + p[i+1]
Alors
´
Ecrire "Choisir t en semaine $i"
i = i+2
Sinon
´
Ecrire "Choisir p en semaine $i"
i = i+1
Fin_si
Fin_Tantque
Pour l’instance trouv´ee, donner le bon r´esultat ainsi que le r´esultat renvoy´e par l’algorithme.
3/On note GM(x) le gain maximum qu’on peut obtenir `a partir de la semaine x. On note GMp(x)
(respectivement GMt(x)) le gain maximum qu’on peut obtenir `a partir de la semaine xsi on choisi le
travail peu sensible (respectivement le travail tr`es sensible) en semaine x. Si x>n(nombre total de
semaines), on pose que les gains maximum valent 0.
Exprimer GMp(x) en fonction de GM(x+1). Exprimer GMt(x) en fonction de GM (x+ 2). Exprimer
GM(x) en fonction de GMp(x) et GMt(x). En d´eduire une expression r´ecursive de GM(x).
Attention ! `
A cause du vide apr`es les travaux sensibles, la r´ecurrence est “`a l’envers” : le cas de base
est en net on descend au lieu de monter. D’o`u les appels r´ecursifs “`a l’envers” en fonction des valeurs
de xplus grandes !
4/´
Ecrire un algorithme qui utilise la r´ecurrence pr´ec´edente pour calculer GM(1). Montrer que sa com-
plexit´e est au moins exponentielle.
5/Dessiner l’arbre des appels pour le calcul de GM(1) avec l’exemple de la premi`ere question. Indiquer
les appels faits plusieurs fois.
6/En utilisant une technique de programmation dynamique, ´ecrire un algorithme qui calcule le gain
maximum qu’on puisse obtenir. Quelle est sa complexit´e en temps ? En espace ?
1
Envois de mat´eriel
Une entreprise fabrique des composants mat´eriels puis les envoie `a ses clients. Les d´elais de fabrications
´etant longs, les commandes arrivent `a l’avance et il est possible de planifier le poids de mat´eriel `a exp´edier
chaque semaine.
Pour l’exp´edition, l’entreprise a le choix entre deux transporteurs. Le premier, A, fait payer un prix
proportionnel au poids (e.g. 1 euros par kilo). Le deuxi`eme, B, fait payer un prix fixe (e.g. 10 euros par
semaine) mais n’accepte que des contrats de 4 semaines exactement (renouvelables).
7/Quel choix de transporteur faut-il faire si les poids des composants sont (semaine par semaine) :
11,9,9,12,12,12,11,13,10,8,12,9 ?
8/On note C(x) le coˆut minimal des envois pour les semaines 1 `a x. On pose C(x) = 0 si x0. On
note CA(x) (respectivement CB(x)) le coˆut minimal des envois pour les semaines 1 `a xen supposant que
la semaine xsoit la fin d’un contrat avec le transporteur A (respectivement la fin d’un contrat avec le
transporteur B). ´
Ecrire la d´efinition de CA(x) et CB(x) en fonction de C(x1) et C(x4). En d´eduire
une d´efinition r´ecursive de C(x).
9/´
Ecrire un algorithme correspondant `a cette d´efinition. Montrer que sa complexit´e est au moins expo-
nentielle.
10/Dessiner l’arbre des appels pour le calcul de C(5) avec l’exemple pr´ec´edent. Indiquer les appels faits
plusieurs fois.
11/En utilisant une technique de programmation dynamique, ´ecrire un algorithme polynˆomial pour
calculer le coˆut minimal. Combien de m´emoire utilise-t-il ?
12/Donner le tableau rempli par l’algorithme pour l’exemple de la question 7/.
13/Comment retrouver l’exp´editeur avec qui travailler chaque semaine `a partir du r´esultat de l’algo-
rithme ?
2
1 / 2 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 !