Skip to content

Algorithmes gloutons

Le rendu de monnaie

Imaginez une caissière qui doit rendre 2,37 € avec le moins de pièces et billets possible. Comment fait-elle ?

Elle commence par la plus grosse pièce qu'elle peut rendre, puis recommence avec le reste, et ainsi de suite.

Reste à rendre Pièce choisie Reste après
237 centimes 200 (2 €) 37
37 centimes 20 17
17 centimes 10 7
7 centimes 5 2
2 centimes 2 0

Résultat : 5 pièces. C'est optimal.

Cette stratégie s'appelle un algorithme glouton : à chaque étape, on prend la meilleure décision locale sans jamais revenir en arrière.

Exercice 1 - Appliquer le rendu de monnaie

Rendre 1,73 € (173 centimes) avec le système euro [200, 100, 50, 20, 10, 5, 2, 1]. Remplir le tableau étape par étape.

Correction
Reste à rendre Pièce choisie Reste après
173 100 73
73 50 23
23 20 3
3 2 1
1 1 0

Résultat : 5 pièces [100, 50, 20, 2, 1].


Définition

Algorithme glouton

Un algorithme glouton résout un problème d'optimisation en faisant, à chaque étape, le meilleur choix possible à cet instant, sans remettre en question les choix précédents.

Avantages : simple, rapide.

Limite : ne garantit pas toujours la solution optimale.


L'algorithme du rendu de monnaie

Entrée : une somme à rendre (en centimes), un système de pièces trié dans l'ordre décroissant
Sortie : la liste des pièces rendues

1. rendu ← liste vide
2. Pour chaque pièce p dans le système (de la plus grande à la plus petite) :
3.     Tant que somme >= p :
4.         Ajouter p à rendu
5.         somme ← somme - p
6. Retourner rendu
EUROS = [500, 200, 100, 50, 20, 10, 5, 2, 1]

def rendre_monnaie(somme: int, systeme: list[int]) -> list[int]:
    rendu = []
    for piece in systeme:
        while somme >= piece:
            rendu.append(piece)
            somme -= piece
    return rendu

Quand l'algorithme glouton échoue

Pour le système euro, la stratégie gloutonne donne toujours la solution optimale. Mais ce n'est pas toujours le cas !

Prenons un système fictif avec les pièces [1, 3, 4] et une somme de 6 :

  • Glouton : 4 + 1 + 1 = 3 pièces
  • Optimal : 3 + 3 = 2 pièces

Le glouton s'est trompé ! En choisissant 4 en premier (meilleur choix local), il a raté la meilleure solution globale.

Conclusion

Un algorithme glouton est correct quand la propriété "le meilleur choix local mène au meilleur résultat global" est vérifiée. C'est le cas pour le système euro, mais pas pour tous les systèmes de pièces.

Vérifier formellement qu'un algorithme glouton est correct nécessite une preuve mathématique. Pour l'instant, retenez l'idée : glouton = rapide, mais pas toujours optimal.


Exercice 2 - Rendre 48 centimes

Appliquer l'algorithme glouton pour rendre 48 centimes avec le système euro. Lister les pièces utilisées.

Correction
Reste Pièce Reste après
48 20 28
28 20 8
8 5 3
3 2 1
1 1 0

Résultat : 5 pièces [20, 20, 5, 2, 1].

Exercice 3 - Glouton en échec

Avec le système [1, 6, 10], rendre 12 centimes.

  1. Que donne l'algorithme glouton ?
  2. Quelle est la solution optimale ?
  3. Conclure.
Correction
  1. Glouton : 10 + 1 + 1 = 3 pièces.
  2. Optimal : 6 + 6 = 2 pièces.
  3. Le glouton a choisi 10 en premier (meilleur choix local), mais cela l'a empêché d'utiliser deux pièces de 6. Le choix localement optimal n'est pas toujours globalement optimal : le glouton échoue ici.

Exercice 4 - Identifier la stratégie gloutonne

Dans chaque situation, identifier si une stratégie gloutonne est utilisée :

  1. Pour remplir un sac à dos de capacité limitée, on prend toujours l'objet le plus léger disponible.
  2. Pour traverser un labyrinthe, on tourne toujours à droite quand c'est possible.
  3. Pour trier des cartes, on cherche le minimum et on le place en premier.
Correction
  1. Oui : on fait à chaque étape le meilleur choix local (l'objet le plus léger). Attention, ce n'est pas forcément optimal pour maximiser la valeur totale.
  2. Oui : règle locale simple, jamais remise en question. Ne garantit pas de trouver la sortie.
  3. Oui : c'est exactement le tri par sélection, qui est un algorithme glouton (et il est correct pour le tri).