informatique (MP2I/MPI) · Chapitre 17 · Application directe du cours
La table du sac, remplie à la main
Programmation dynamique · niveau 2
É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.