Première · Algorithmique

Les algorithmes gloutons

Prendre immédiatement la plus grosse pièce semble être le meilleur moyen d’en utiliser peu. Cette décision locale produit souvent une solution convaincante, mais elle peut empêcher d’atteindre la meilleure solution globale. Un petit contre-exemple suffit à révéler la différence.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Décrire un choix glouton et l’appliquer.
  • Distinguer solution valide et solution optimale.
  • Construire un contre-exemple sur la monnaie ou le sac à dos.
Les bases utiles pour commencer

Choisir maintenant sans revenir en arrière

Un algorithme glouton construit sa réponse par une succession de choix considérés comme les meilleurs à l’instant présent. Une fois un choix effectué, il n’est pas remis en cause. Pour un rendu de monnaie, on peut prendre la plus grande pièce ne dépassant pas la somme restante, puis recommencer.

La stratégie doit préciser le critère : plus grande valeur, meilleur rapport valeur sur poids, plus petite durée, selon le problème. Le mot glouton ne désigne pas un programme unique. Pour évaluer une stratégie, on doit connaître l’objectif à optimiser et les contraintes qui rendent une solution admissible.

Écrivez d’abord ce que signifie « meilleur ». Dans le rendu de monnaie, l’objectif global est le nombre minimal de pièces, tandis que le critère local choisit la plus grande valeur admissible. Les deux formulations ne sont pas équivalentes. Un choix local peut améliorer immédiatement le reste à payer tout en empêchant une combinaison globale plus économique. C’est précisément ce décalage que les contre-exemples cherchent à mettre en évidence.

Le rendu de monnaie, étape par étape

Avec les pièces 5, 2 et 1, rendre 8 donne successivement 5, puis 2, puis 1 : trois pièces. Le reste décroît après chaque choix. La présence de la pièce 1 garantit que tout montant entier positif peut être atteint, si l’on suppose un stock illimité.

Le programme doit examiner les pièces dans l’ordre décroissant. La liste des pièces est une entrée du problème, pas une simple décoration. Si l’on change le système monétaire ou le stock disponible, les résultats et les garanties peuvent changer. Le cours et le simulateur supposent des pièces entières positives et un stock illimité.

def glouton(montant, pieces):
    resultat = []
    for piece in pieces:  # ordre décroissant
        while montant >= piece:
            resultat.append(piece)
            montant -= piece
    return resultat

Une solution correcte peut utiliser trop de pièces

Avec les pièces 4, 3 et 1, le rendu glouton de 6 prend 4, puis 1, puis 1. Il utilise trois pièces. Pourtant 3 + 3 rend la même somme avec deux pièces. Le choix de 4 semble bon immédiatement, mais laisse un reste peu favorable. Cet exemple suffit à réfuter l’affirmation que la stratégie est toujours optimale.

Le résultat reste valide : la somme des pièces vaut bien 6. Il faut distinguer cette propriété de l’optimalité. L’atelier compare le glouton à une recherche du nombre minimal calculée par programmation dynamique ; cette deuxième méthode est un prolongement de Terminale, pas un prérequis pour comprendre le contre-exemple.

Pour démontrer qu’un rendu de deux pièces est optimal, il suffit parfois de montrer qu’aucune pièce unique ne vaut le montant. Pour 6 avec 4, 3 et 1, une pièce est impossible et deux pièces de 3 existent : le minimum est exactement deux. On n’a pas besoin de maîtriser la programmation dynamique pour justifier ce petit cas.

Un autre terrain : le sac à dos

Supposons un sac de capacité 10 et trois objets indivisibles : A pèse 6 et vaut 12, B pèse 5 et vaut 9, C pèse 5 et vaut 9. Choisir le meilleur rapport valeur/poids conduit à prendre A, de rapport 2. Le reste de capacité 4 empêche de prendre B ou C. La valeur totale est 12.

Prendre B et C donne pourtant une masse totale 10 et une valeur 18. Les objets sont ici indivisibles : autoriser des fractions changerait le problème. Avant toute conclusion, vérifiez les hypothèses, puis comparez une solution gloutonne à une autre solution admissible.

Comparer validité, terminaison et optimalité

Ces trois propriétés répondent à trois questions différentes. La validité demande si la somme des pièces obtenues est égale au montant. La terminaison demande si le programme finit. L’optimalité demande si aucune autre solution admissible n’utilise moins de pièces. Un algorithme peut terminer avec une solution valide tout en étant sous-optimal.

Avec 4, 3 et 1, pour 10, le glouton prend 4, 4, 1, 1. Le reste suit 10, 6, 2, 1, 0 : il diminue et finit à zéro. Pourtant 4, 3, 3 utilise trois pièces. Deux pièces ne peuvent faire 10, puisque chacune vaut au plus 4 ; le minimum vaut donc trois. Cet exemple joint une trace de la stratégie, un contrôle de somme et une petite preuve du meilleur résultat possible.

Que changent les contraintes du problème ?

La présence de la pièce 1 garantit un rendu de tout entier non négatif sous stock illimité. Sans elle, un reste peut subsister. Pour 6 avec 4 et 3, le glouton prend 4 puis reste bloqué à 2, alors que 3+3 aurait réussi. On doit donc vérifier la somme finale et ne pas annoncer automatiquement un rendu complet.

Un stock limité transforme également le raisonnement : une pièce choisie peut ne plus être disponible ensuite. Dans le sac à dos, les objets indivisibles imposent de prendre ou de laisser chaque objet en entier. Un critère par rapport valeur/poids ne possède pas les mêmes garanties que dans un problème permettant des fractions. Dans les exercices, énoncez les contraintes avant de comparer les stratégies ; sinon deux solutions apparemment concurrentes peuvent résoudre deux problèmes différents.

À vous de faire varier les choses

Pouvez-vous battre le glouton ?

Choisissez un montant et un système de pièces. Comparez la construction gloutonne au minimum possible et cherchez le premier échec.

Lire le résultat de l’expérience initiale

Vous avez trouvé un contre-exemple.

Le minimum est calculé par une méthode exhaustive sur les sous-montants. Un succès particulier ne démontre pas une garantie générale.

MéthodePiècesSomme
Glouton4 + 1 + 16
Optimal3 + 36

La comparaison révèle quand le meilleur choix immédiat empêche une meilleure combinaison.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · Appliquer#

Rendre 11

Avec les pièces [5, 2, 1] en quantité illimitée, donnez les choix gloutons pour rendre 11 et les restes successifs.

Indice 1

Choisissez la plus grande pièce qui tient dans le reste.

Indice 2

Une même valeur peut être choisie plusieurs fois.

Comprendre la correction

On choisit 5 : reste 6 ; encore 5 : reste 1 ; puis 1 : reste 0. Le résultat contient trois pièces et leur somme vaut 11. La vérification de la somme établit la validité du rendu, mais ne constitue pas à elle seule une preuve générale d’optimalité.

Exercice 2 · Comparer#

Battre le choix local

Pour 8 avec les pièces [6, 4, 1], comparez le résultat glouton à un rendu utilisant uniquement des pièces de 4.

Indice 1

Après 6, le reste vaut 2.

Indice 2

Deux pièces de 4 atteignent directement 8.

Comprendre la correction

Le glouton produit 6 + 1 + 1, soit trois pièces. Le rendu 4 + 4 utilise deux pièces et constitue un contre-exemple à l’optimalité de cette stratégie sur ce système. Il n’est pas nécessaire de tester tous les montants pour réfuter une affirmation universelle.

Exercice 3 · Corriger#

Une boucle qui ne termine pas

Que se passe-t-il si une pièce de valeur 0 est autorisée et examinée dans une boucle tant que reste >= piece ?

Indice 1

Soustraire zéro ne change pas le reste.

Indice 2

La condition peut rester vraie indéfiniment.

Comprendre la correction

La boucle peut ajouter continuellement une pièce nulle sans diminuer le reste. Les valeurs strictement positives sont donc une précondition importante. Lorsque la pièce choisie est positive, chaque soustraction réduit le montant entier restant, ce qui permet de justifier l’arrêt.

Exercice 4 · Justifier#

Le sac se remplit mal

Reprenez le sac de capacité 10 avec A(6,12), B(5,9), C(5,9), où chaque couple donne poids et valeur. Quel résultat obtient le choix par rapport valeur/poids ? Quel choix le bat ?

Indice 1

A a un rapport 2 ; B et C ont un rapport 1,8.

Indice 2

Les objets ne peuvent pas être fractionnés.

Comprendre la correction

La stratégie prend A, puis aucun autre objet ne tient : valeur 12. B et C remplissent exactement le sac et valent ensemble 18. Ce contre-exemple concerne des objets indivisibles ; on ne peut pas le transposer sans précaution à une version autorisant des fractions d’objets.

Exercice 5 · Approfondir et transférer#

Justifier un optimum concret

Pour un montant de 10 et les pièces 4,3,1 en stock illimité, donnez le rendu glouton. Proposez un meilleur rendu et démontrez qu’il est optimal sans énumérer toutes les solutions.

Indice 1

Deux pièces valent au plus 8.

Indice 2

Cherchez une combinaison de trois pièces égale à 10.

Comprendre la correction

Le glouton produit 4+4+1+1, quatre pièces. La combinaison 4+3+3 en utilise trois. Deux pièces ne peuvent atteindre 10 puisqu’elles valent chacune au plus 4. Trois est donc une borne atteinte et le minimum exact.

Exercice 6 · Approfondir et transférer#

Quand la pièce 1 disparaît

On dispose seulement de pièces 4 et 3. Pour rendre 6, déroulez le glouton et calculez son reste final. Une solution existe-t-elle ? Quelle propriété garantie avec la pièce 1 a disparu ?

Indice 1

Après 4, aucune pièce ne convient au reste 2.

Indice 2

La combinaison recherchée n’est pas obligée de commencer par 4.

Comprendre la correction

Le glouton prend 4 et reste à 2. Il termine mais ne produit pas un rendu valide de 6. La combinaison 3+3 réussit. Sans la pièce 1, la stratégie ne garantit plus d’atteindre exactement chaque montant ; son résultat doit être vérifié au lieu de confondre fin de boucle et résolution du problème.

Exercice 7 · Approfondir et transférer#

Un sac et deux critères locaux

Un sac de capacité 7 accepte des objets indivisibles A(5,10), B(4,9), C(3,7). Comparez choisir d’abord la plus grande valeur et choisir d’abord le meilleur rapport valeur/poids. Vérifiez toutes les paires admissibles pour déterminer le meilleur total.

Indice 1

A vaut plus que B et C, mais C possède le meilleur rapport.

Indice 2

A ne peut accompagner aucun autre objet dans ce sac.

Comprendre la correction

La plus grande valeur choisit A pour un total de 10. Les rapports sont 2, 2,25 et environ 2,33 : l’autre stratégie prend C puis B, de poids 7 et valeur 16. Les paires avec A dépassent la capacité ; B+C est admissible et meilleur que chaque objet seul. Ici, le rapport réussit, mais cet exemple particulier ne donne aucune garantie universelle.

Les erreurs qui méritent un détour

Utiliser « valide » et « optimal » comme synonymes.
Une solution valide respecte les contraintes ; une solution optimale atteint le meilleur objectif parmi les solutions valides.
Déduire une garantie de quelques essais réussis.
Un contre-exemple peut réfuter une garantie ; des essais ne prouvent pas qu’elle vaut pour tous les cas.

La fiche à garder

L’essentiel à retenir

  • Le glouton fait des choix locaux sans retour arrière.
  • Son optimalité dépend du problème et des hypothèses.
  • Un contre-exemple doit comparer des solutions admissibles.

Cette notion au bac

Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.

Le prochain pas

Retrouver le catalogue de Première

Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.