algorithmique (école d'ingénieur) · Chapitre 2 · Application directe du cours
Une seule ligne suffit
Le sac de valeur maximum · niveau 2
Énoncé
Pour calculer la seule valeur (sans reconstruire le sac), il est inutile de garder tout le tableau .
- Pourquoi deux lignes suffisent-elles ? Quelle est alors la mémoire utilisée ?
- Montrer qu'un seul tableau de cases suffit, à condition de parcourir les contenances par décroissants. Écrire la fonction.
- Que calcule-t-on si on parcourt les contenances par croissants ? Tester sur l'exemple du cours (, , ).
Corrigé
- La ligne de ne dépend que de la ligne . On garde deux tableaux
precetcourde cases, que l'on échange à chaque : mémoire au lieu de , temps toujours . - Dans un seul tableau , au début du tour , contient la ligne . Pour calculer la nouvelle valeur de , il faut l'ancienne valeur de et l'ancienne valeur de , avec . Si l'on parcourt les par valeurs décroissantes, la case n'a pas encore été modifiée pendant ce tour : elle contient bien .
static int uneLigne(int[] V, int[] T, int C) {
int[] L = new int[C + 1]; // ligne 0 : que des zéros
for (int k = 1; k < V.length + 1; k++)
// invariant : L[0:c+1] est la ligne k-1, L[c+1:C+1] est la ligne k
for (int c = C; c >= T[k-1]; c--)
L[c] = Math.max(L[c], V[k-1] + L[c - T[k-1]]);
return L[C]; // L est la ligne n
}
Les cases ne changent pas : .
nom : L
valeurs : 0 0 0 4 4 4 4 9 9 11 11
colorier : 6
vert : 7..10
fleches : 4->6:+5
zone : 0..6 ligne 2
zone : 7..10 ligne 3
legende : exemple du cours, tour k = 3 (t = 2), c = 6 : L[4] vaut encore m(2,4)
- Par croissants, a déjà été mis à jour pendant le tour : il peut contenir l'objet , que l'on ajoute alors une deuxième fois. On calcule le sac avec répétitions du chapitre 3. Sur l'exemple, la version décroissante donne (le bon résultat) et la version croissante (cinq exemplaires de l'objet de taille et de valeur ).
nom : L
valeurs : 0 0 5 5 10 10 4 4 4 11 11
colorier : 6
vert : 2..5
fleches : 4->6:+5
zone : 2..5 déjà modifiées
zone : 6..10 ligne 2
legende : par c croissants, L[4] = 10 compte déjà deux fois l'objet 2100 % gratuit
La suite du chapitre est sur Adloun
- 10 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
- Le tuteur, qui guide pas à pas sans donner la réponse
Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.