Au programme
Algorithmique
Contenus | Capacités attendues | Commentaires |
---|---|---|
Algorithmes gloutons | Résoudre un problème grâce à un algorithme glouton. | Exemples : problèmes du sac à dos ou du rendu de monnaie. Les algorithmes gloutons constituent une méthode algorithmique parmi d’autres qui seront vues en terminale. |
Introduction
Les algorithmes gloutons forment une catégorie d’algorithmes permettant de parvenir à une solution pour un problème d’optimisation qui vise à maximiser/minimiser une quantité (plus court chemin (GPS), plus petite durée d’exécution, meilleure organisation d’un emploi du temps, etc.)
Le principe d’un algorithme glouton est le suivant :
- Résoudre un problème étape par étape ;
- À chaque étape, faire le choix optimal de moindre coût (de meilleur gain).
Le choix effectué à chaque étape n’est jamais remis en cause , ce qui
fait que cette stratégie permet d’aboutir rapidement à une solution au
problème de départ. C’est en ce sens que l’adjectif greedy
(glouton/avare ) caractérise cet algorithme : il se termine rapidement
(glouton) sans fournir beaucoup d’efforts (avare) .
Le problème du rendu de monnaie
Énoncé
Vous êtes commerçant et devez rendre de la monnaie à vos clients de façon optimale , c’est-à-dire avec le nombre minimal de pièces et de billets 1.
- On suppose que les clients ne vous donnent que des sommes entières en euros (pas de centimes pour simplifier) ;
- Les valeurs des pièces et billets à votre disposition sont : 1, 2, 5, 10, 20, 50, 100, 200 et 500. On suppose que vous avez autant d’exemplaires que nécessaire de chaque pièce et billet ;
- Dans la suite, afin de simplifier, nous désignerons par « pièces » à la fois les pièces et les billets.
Stratégie gloutonne
Un client nous achète un objet qui coûte 53 euros. Il paye avec un billet de 200 euros. On doit donc lui rendre 147 euros. Une façon de lui rendre la monnaie est de le faire avec un billet de 100, deux billets de 20, un billet de 5 et une pièce de 2.
Pour minimiser le nombre de pièces à rendre, il apparaît la stratégie suivante :
- On commence par rendre la pièce de plus grande valeur possible ;
- On déduit cette valeur de la somme (encore) à rendre ;
- On recommence, jusqu’à obtenir une somme nulle.
En procédant ainsi, on se rend compte que l’on résout le problème étape par étape et qu’un choix optimal est fait à chaque étape (la pièce de plus grande valeur ). Cette stratégie entre donc bien dans la catégorie des algorithmes gloutons .
Implémentation en Python
Le corrigé se trouve à cette adresse : https://repl.it/@dlatreyte/rendudemonnaie.
- Importer le module typing au début du fichier :
|
|
- Préparer la fonction
main
suivante et étudier sa structure :
|
|
- Définir la fonction
somme_a_rendre
dont la spécification est :
|
|
- Définir la fonction
pieces_a_rendre
dont la spécification est :
|
|
- Appeler la fonction
main
.
Un algorithme glouton conduit-il toujours à la solution optimale ?
La stratégie gloutonne consiste à trouver la solution optimale locale
à chaque étape, dans l’espoir de trouver la solution optimale globale .
On peut se demander si cette stratégie donne nécessairement la meilleure solution globale, autrement dit si la solution globale obtenue est la meilleure ?
Voici quelques exercices pour répondre à cette question.
Exercice 1 (Plus court chemin)
- On part du point $O$.
- On veut atteindre en parcourant la distance la plus petite possible tous les points : $A$, $B$, $C$, $D$, $E$ et $F$.
- L’ordre de parcours des points n’a pas d’importance.
- Tracer le chemin à suivre en adoptant une stratégie gloutonne.
- La stratégie gloutonne est-elle la meilleure ? Si tel n’est pas le cas, tracer le chemin optimal.
Réponses
La stratégie gloutonne choisit toujours la solution optimale locale. En partant de $O$, on doit donc se diriger vers $E$, plus proche que $D$. Ensuite, on enchaîne avec $B$, $A$, $C$ et $F$. Pour finit, on se rend en $D$ car c’est le seul point restant.
-
La stratégie gloutonne n’est pas la stratégie optimale.
Exercice 2. (Rendu de monnaie)
On doit rendre 8 euros à l’aide des pièces (imaginaires) : 6, 4 et 1 euros. On cherche à manipuler le moins de pièces possible.
- Quelles pièces sont rendues en appliquant l’algorithme glouton ? Combien de pièces sont rendues ?
- La solution précédente n’est pas la solution optimale. Trouver cette solution optimale.
Réponses
- Première solution optimale locale : 6, donc l’algorithme glouton conduit à la solution : 6, 1, 1. Trois pièces sont nécessaires.
- La solution optimale est : 4, 4.
Remarque : On peut montrer (ce n’est pas facile) que l’algorithme glouton retourne la solution optimale globale pour le rendu de monnaie… à la condition d’utiliser un système de monnaie tel que l’euro.
Un algorithme glouton conduit-il toujours à une solution ?
Exercice 3. (Rendu de monnaie)
On doit rendre 8 euros à l’aide des pièces (imaginaires) : 5 et 2 euros. On cherche à manipuler le moins de pièces possible.
- Quelles pièces doivent être rendues si on applique un algorithme glouton ?
- Conclusion ?
Réponses
- Première solution optimale locale : 5, donc un algorithme glouton conduit à la solution : 5, 2. Il s’arrête alors.
- L’algorithme glouton n’est pas parvenu à la solution, qui existe pourtant : 2, 2, 2, 2.
Pourquoi se contenter d’une stratégie gloutonne ?
Comme nous le verrons dans le document Chap. 23,02, la stratégie gloutonne est utilisée dans le cas où la complexité des algorithmes donnant à coup sûr la réponse correcte est exponentielle (pour le problème du sac à dos, $O (n) = 2^n$). De tels algorithmes sont très souvent inexploitables.
Code Python du programme principal
Code Python
|
|
-
Version originale de ce document : http://info-mounier.fr/1nsi/seq10/algorithmes_gloutons.php ↩︎