La table du sac, remplie à la main
Exercice · niveau 2 · informatique (MP2I/MPI), chapitre 17 — Programmation dynamique
Énoncé
Quatre objets de poids et de valeurs , capacité . Remplir la table du chapitre, lire l'optimum, puis reconstruire les objets choisis.
Corrigé
La table (ligne : les premiers objets ; colonne : la capacité) :
| 0 | 1 | 2 | 3 | 4 | 5 | |
|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 | |
| 0 | 0 | 3 | 3 | 3 | 3 | |
| 0 | 0 | 3 | 4 | 4 | 7 | |
| 0 | 0 | 3 | 4 | 5 | 7 | |
| 0 | 0 | 3 | 4 | 5 | 7 |
L'optimum est .
La reconstruction se lit de bas en haut, à capacité courante :
- : , l'objet n'est pas pris ;
- : , l'objet n'est pas pris ;
- : , l'objet est pris ; devient ;
- : , l'objet est pris ; devient .
Solution : les objets et , poids , valeur . La capacité restante est nulle, ce qui est un bon contrôle : elle doit toujours être , et l'on peut vérifier que la somme des poids des objets choisis vaut moins la capacité restante.
Le piège de la reconstruction est de tester m[i][c] > m[i-1][c] avec un strict et d'en tirer que l'objet est pris — c'est correct — mais d'oublier que l'égalité n'exclut rien : quand deux solutions de même valeur existent, la table n'en désigne qu'une. La remontée rend une solution optimale, jamais « la » solution optimale.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.