Adloun

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

Exercice suivant et tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →