algorithmique (école d'ingénieur) · Chapitre 4 · Exercice de TD
Une seule ligne de mémoire
Répartition optimale d'une ressource · niveau 2
Énoncé
On ne veut que la valeur , pas la répartition.
- Montrer que la ligne ne dépend que de la ligne .
- Montrer qu'on peut calculer avec un seul tableau de cases, à condition de parcourir les stocks par valeurs décroissantes. Donner l'invariant de la boucle sur .
- Pourquoi ne peut-on plus afficher la répartition optimale ?
Corrigé
- L'hérédité n'emploie que des valeurs : la ligne se calcule à partir de la seule ligne .
- La case dépend des cases , toutes situées dans les colonnes à . Si l'on parcourt les par valeurs décroissantes dans un tableau unique , les cases contiennent encore la ligne au moment où l'on calcule .
nom : L
valeurs : 0 4 6 7 9 10
colorier : 3
vert : 4 5
zone : 0..3 ligne 3
zone : 4..5 ligne 4
legende : tour k = 4, s = 3 : L[0:4] = M[3][0:4] et L[4:6] = M[4][4:6]
static int calculerMn(int[][] G) {
int n = G.length, S = G[0].length - 1;
int[] L = new int[S + 1]; // L = M[0] : que des zéros
for (int k = 1; k < n + 1; k++)
// invariant : L[0:s+1] contient M[k-1][0:s+1] et L[s+1:S+1] contient M[k][s+1:S+1]
for (int s = S; s >= 0; s--) { // par s DÉCROISSANTS
int best = Integer.MIN_VALUE;
for (int sp = 0; sp < s + 1; sp++)
best = Math.max(best, G[k - 1][sp] + L[s - sp]); // L[s-sp] = M[k-1][s-sp]
L[s] = best; // L[s] = M[k][s]
}
return L[S];
}
Sur l'exemple du chapitre, le programme retourne bien . La mémoire passe de à ; le temps reste .
- La reconstruction a besoin des arguments pour toutes les lignes , de à : ils ne sont plus disponibles. Il faudrait garder le tableau , ce qui ramène la mémoire à .
100 % gratuit
La suite du chapitre est sur Adloun
- 9 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.