algorithmique (école d'ingénieur) · Chapitre 2 · Application directe du cours
Sous-ensemble de taille minimum
Le sac de valeur maximum · niveau 2
Énoncé
On reprend le problème du sous-ensemble de somme , mais on veut, parmi les sous-ensembles de somme , en afficher un qui a le plus petit nombre d'éléments. Exemple : et ; on veut afficher et non .
- On note le nombre minimum d'éléments d'un sous-ensemble des premiers éléments de de somme , avec s'il n'en existe pas. Donner l'équation de récurrence.
- Écrire le calcul du tableau et la fonction d'affichage.
- Application : et .
Corrigé
- Supposons le problème résolu : un sous-ensemble de taille minimum des premiers éléments, de somme , contient ou non . Base : et pour . Hérédité : , ,
- On représente par
INF = Integer.MAX_VALUE / 2( ne déborde pas).
static int[][] calculerP(int[] X, int S) { int n = X.length;
int[][] P = new int[n + 1][S + 1];
for (int s = 1; s < S + 1; s++) P[0][s] = INF; // base ; P[0][0] = 0
for (int k = 1; k < n + 1; k++)
for (int s = 0; s < S + 1; s++) {
P[k][s] = P[k-1][s]; // x_{k-1} absent
if (X[k-1] <= s && P[k-1][s - X[k-1]] + 1 < P[k][s])
P[k][s] = P[k-1][s - X[k-1]] + 1; // x_{k-1} présent
}
return P;
}
static void afficherP(int[][] P, int[] X, int k, int s) {
// précondition : P[k][s] < INF. Appel principal : afficherP(P, X, n, S)
if (k == 0) return; // sous-ensemble vide
if (P[k][s] == P[k-1][s]) afficherP(P, X, k-1, s);
else { afficherP(P, X, k-1, s - X[k-1]); System.out.print(" " + X[k-1]); }
}
Calcul en , affichage en . -
X = [3, 5, 2], S = 5 : p = 1, sous-ensemble { 5 }
X = [1, 2, 3, 4, 5, 6], S = 10 : p = 2, sous-ensemble { 4 6 }
Parmi les sous-ensembles de somme (par exemple ou ), a le moins d'éléments.
100 % 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.