01d Fiche méthode - Algorithme glouton
💰 Le principe
⚓︎
On souhaite écrire une fonction renduMonnaie(somme, pieces) qui détermine automatiquement quelles pièces utiliser pour rendre une somme donnée.
🎯 Exemple :
Comment rendre 780 centimes (soit 7,80 €) avec les pièces disponibles ?

L'idée de l'algorithme glouton est simple :
👉 On prend à chaque étape la plus grosse pièce possible, autant de fois que possible.
⚙️ L’algorithme glouton
⚓︎
🔁 Version avec boucle et soustraction répétée
⚓︎
def renduMonnaie(somme, pieces):
# Initialiser le dictionnaire des pièces utilisées
choisies = {p: 0 for p in pieces}
for p in pieces:
while somme >= p:
somme -= p
choisies[p] += 1
return choisies
📌 Test dans la console :
# Pièces disponibles (en centimes)
pieces = [500, 200, 100, 50, 20, 10, 5, 2, 1]
somme = 780
print("Les pièces choisies sont :", renduMonnaie(somme, pieces))
❓Tester ce qui est proposé
🔄 Version optimisée : une seule boucle
⚓︎
⏱️ Optimisation avec divisions entières
⚓︎
def renduMonnaie(somme, pieces):
# Initialiser le dictionnaire des pièces utilisées
choisies = {p: 0 for p in pieces}
for p in pieces:
nb = somme // p # combien de pièces de cette valeur ?
choisies[p] = nb
somme -= nb * p # mettre à jour la somme restante
return choisies
✅ Cette version est plus rapide : on évite les boucles while imbriquées.
💡 Remarque importante : système canonique
⚓︎
Un système de pièces est dit canonique si l’algorithme glouton donne toujours la solution optimale, c’est-à-dire avec le plus petit nombre de pièces possible.
🪙 Le système monétaire en euros est canonique. Mais ce n’est pas toujours le cas ! Certains ensembles de pièces non classiques peuvent piéger l’algorithme glouton.
Pour s'entrainer par ordre de dificulté croissante :