algorithmique (école d'ingénieur) · Chapitre 3 · Application directe du cours
Rendu de monnaie
Sacs avec répétitions, multi-ensembles et couples de sacs · niveau 2
Énoncé
On dispose de pièces de valeurs , en nombre illimité, et l'on doit rendre la somme avec le moins de pièces possible.
- L'algorithme glouton rend à chaque étape la plus grosse pièce qui ne dépasse pas la somme restante. Le tester avec les pièces pour , , , puis avec les pièces pour et .
- On note le nombre minimum de pièces pour rendre . Supposons le problème résolu : quelle est la dernière pièce rendue ? En déduire l'équation de récurrence des valeurs .
- Écrire le programme qui calcule le tableau et affiche les pièces à rendre. Quelle est sa complexité ?
Corrigé
- Avec , le glouton est optimal sur ces exemples : ( pièces), (), (). Avec et , il rend ( pièces) alors que suffit ; pour , il rend ( pièces) au lieu de ().
- La dernière pièce rendue est l'une des ; le reste, , est rendu avec un nombre minimum de pièces. Base : . Hérédité : ,
avec si aucune pièce ne convient. C'est un sac avec répétitions où l'on minimise le nombre d'objets sous la contrainte d'une taille exactement égale à . -
static int[] monnaie(int[] P, int S) {
int[] N = new int[S + 1]; // base : N[0] = 0
for (int s = 1; s < S + 1; s++) { // hérédité, s croissants
N[s] = INF;
for (int p : P)
if (p <= s && N[s - p] + 1 < N[s]) N[s] = N[s - p] + 1;
}
return N;
}
static void apieces(int[] N, int[] P, int s) {
// affiche une façon optimale de rendre s (précondition : N[s] < INF)
if (s == 0) return; // rien à rendre
for (int p : P)
if (p <= s && N[s - p] + 1 == N[s]) { // p peut être la dernière pièce
apieces(N, P, s - p); // s - p a été rendu
System.out.print(" " + p); // puis p : s a été rendu
return;
}
}
pieces [1, 3, 4], S = 6 : glouton 3 piece(s), optimum 2 : 3 3
pieces [1, 3, 4], S = 10 : glouton 4 piece(s), optimum 3 : 4 3 3
nom : N
valeurs : 0 1 2 1 1 2 2 2 2 3 3
colorier : 10
vert : 0 4 7
fleches : 0->4:+4 4->7:+3 7->10:+3
legende : pièces 1, 3, 4 : N(10) = 3 avec 10 = 4 + 3 + 3
Le calcul est en , l'affichage en au pire (au plus pièces, essais chacune).
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.