NSI (terminale) · Chapitre 7 · Application directe du cours
Problème — Comparaison glouton / dynamique sur le rendu de monnaie
La programmation dynamique · niveau 2
Énoncé
Problème — Comparaison glouton / dynamique sur le rendu de monnaie.
On veut illustrer concrètement que l'algorithme glouton peut échouer là où la programmation dynamique réussit. On considère le système de pièces [1, 3, 4] et la somme .
Corrigé
L'algorithme glouton choisit d'abord la plus grosse pièce , soit , puis deux pièces de : il rend , soit 3 pièces. La programmation dynamique trouve la solution optimale , soit 2 pièces. Voici les deux approches comparées :
def rendu_glouton(pieces, somme):
pieces = sorted(pieces, reverse=True)
nb, reste = 0, somme
for p in pieces:
nb += reste // p
reste = reste % p
return nb if reste == 0 else -1
def rendu_dynamique(pieces, somme):
INFINI = float('inf')
table = [0] + [INFINI] * somme
for s in range(1, somme + 1):
for p in pieces:
if p <= s:
table[s] = min(table[s], table[s - p] + 1)
return table[somme] if table[somme] != INFINI else -1
# rendu_glouton([1, 3, 4], 6) -> 3 (sous-optimal)
# rendu_dynamique([1, 3, 4], 6) -> 2 (optimal)
Cet exemple montre que le glouton () est plus rapide mais peut être sous-optimal, tandis que la programmation dynamique () garantit toujours l'optimum.
100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 7 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
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.