Adloun

algorithmique (école d'ingénieur) · Chapitre 2 · Exercice de TD

Le plus léger des sacs optimaux

Le sac de valeur maximum · niveau 2

Énoncé

Plusieurs sacs peuvent avoir la valeur maximum. On veut, parmi eux, un sac de taille totale minimum.

  • Sur , , , quel sac affiche la fonction asvm du cours ? Existe-t-il un sac de même valeur plus léger ?
  • Modifier le calcul pour qu'il mémorise, en plus de , la taille du sac retenu, et qu'il départage les égalités de valeur par la taille.

Corrigé

  • . La fonction asvm préfère, en cas d'égalité, « l'objet n'est pas dans le sac » ; elle affiche le sac , de taille . Le sac a la même valeur et pour taille .
  • On calcule en même temps , la taille du sac retenu, et l'on compare les couples (valeur, taille) : plus grande valeur d'abord, plus petite taille en cas d'égalité.

for (int k = 1; k < n + 1; k++)
    for (int c = 0; c < C + 1; c++) {
        M[k][c] = M[k-1][c]; P[k][c] = P[k-1][c];      // objet k-1 absent
        if (T[k-1] <= c) {
            int v = V[k-1] + M[k-1][c - T[k-1]];
            int p = T[k-1] + P[k-1][c - T[k-1]];
            if (v > M[k][c] || (v == M[k][c] && p < P[k][c])) {
                M[k][c] = v; P[k][c] = p;                  // objet k-1 présent
            }
        }
    }

On obtient la valeur et la taille minimum . Pour afficher ce sac, on reconstruit en comparant les couples au lieu des seules valeurs (ou l'on mémorise un tableau des décisions).

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 →