Chapitre 13 — Algorithmes gloutons
Construire une solution par choix locaux, comprendre les preuves et reconnaître les limites CANDIDATS → CHOIX LOCAL → TEST DE FAISABILITÉ → SOLUTION PARTIELLE → OBJECTIF |
Fiche pédagogique du chapitre
Objectifs d’apprentissage
À la fin de ce chapitre, l’étudiant devra être capable de :
- expliquer le principe d’un algorithme glouton et distinguer un choix local d’une solution globale ;
- identifier les candidats, la fonction de sélection, le test de faisabilité et la fonction objectif ;
- construire progressivement une solution sans retour en arrière ;
- reconnaître la propriété du choix glouton et la sous-structure optimale ;
- justifier la correction d’une stratégie par un argument d’échange, une preuve par induction ou une propriété de coupe ;
- appliquer la méthode au rendu de monnaie, à la sélection d’activités, à la planification de tâches et au codage de Huffman ;
- produire des contre-exemples lorsqu’un choix local ne conduit pas à l’optimum ;
- comparer une solution gloutonne avec une solution fondée sur la programmation dynamique ;
- analyser la complexité temporelle et spatiale d’un algorithme glouton.
Prérequis
- tableaux, listes, ensembles et dictionnaires ;
- fonctions, procédures, récursivité et invariants ;
- algorithmes de tri et notion de file de priorité ;
- complexités O(1), O(log n), O(n) et O(n log n) ;
- notions de preuve de correction et de solution optimale.
Organisation indicative
Partie | Contenu | Durée indicative |
|---|---|---|
| 13.1 | Principe, choix local, construction progressive et absence de retour | 2 h |
| 13.2 | Conditions d’utilisation et méthodes de preuve | 2 h 30 |
| 13.3 | Rendu de monnaie, activités, tâches et Huffman | 4 h |
| 13.4 | Limites, contre-exemples et comparaison avec la programmation dynamique | 2 h |
| TD / TP | Conception, justification et expérimentation | 4 h à 6 h |
| Idée directrice |
Une stratégie gloutonne choisit, à chaque étape, la décision qui paraît la meilleure immédiatement. Ce choix est définitif : l’algorithme n’explore pas toutes les possibilités et ne revient pas sur ses décisions. Cette simplicité peut produire des algorithmes très rapides, mais l’optimalité n’est garantie que lorsque le problème possède des propriétés structurelles particulières. |
13.1 Principe
Définition générale
Un algorithme glouton construit une solution étape par étape. À chaque étape, il sélectionne le candidat qui optimise un critère local, vérifie que ce candidat peut être ajouté sans rendre la solution invalide, puis poursuit avec les candidats restants.
La méthode est dite « gloutonne » parce qu’elle cherche à obtenir le meilleur gain immédiat, sans examiner toutes les conséquences futures du choix.
Composant | Rôle | Question à poser |
|---|---|---|
| Ensemble de candidats | Contient les éléments encore disponibles | Quels éléments peuvent encore être choisis ? |
| Fonction de sélection | Désigne le meilleur candidat local | Quel candidat paraît le plus avantageux maintenant ? |
| Test de faisabilité | Préserve les contraintes du problème | Le choix maintient-il une solution valide ? |
| Fonction objectif | Évalue la qualité de la solution | Que cherche-t-on à minimiser ou à maximiser ? |
| Critère d’arrêt | Détermine la fin de la construction | La solution est-elle complète ? |
Choix local
Le choix local est la décision considérée comme la meilleure à l’étape courante. Il est déterminé par une règle simple : plus petite pièce, plus grande valeur, date de fin la plus proche, fréquence la plus faible, rapport valeur/poids maximal, etc.
| Attention |
Un choix local intuitif n’est pas automatiquement correct. Il faut démontrer que ce choix peut appartenir à au moins une solution optimale. Une stratégie gloutonne doit être définie précisément : « choisir le meilleur » n’a de sens que si le critère de comparaison est explicite. |
Solution construite progressivement
Après chaque sélection, la solution partielle doit rester faisable. Elle est étendue jusqu’à ce qu’aucun candidat ne puisse être ajouté ou jusqu’à ce que l’objectif soit atteint.
Étape | État des candidats | Choix | Solution partielle |
|---|---|---|---|
| 0 | Tous disponibles | — | Vide |
| 1 | Un candidat retiré | Meilleur candidat local | Un élément |
| 2 | Deuxième sélection | Meilleur parmi les restants | Deux éléments compatibles |
| … | Candidats restants | Choix successifs | Solution progressivement complétée |
| Fin | Aucun ajout utile ou possible | — | Solution finale |
Absence de retour en arrière
Contrairement au retour sur trace, un algorithme glouton ne supprime pas un choix précédent pour explorer une autre branche. Cette absence de retour réduit fortement le coût de calcul, mais elle rend la qualité du critère local décisive.
Méthode | Retour sur un choix ? | Nombre de possibilités explorées | Garantie typique |
|---|---|---|---|
| Gloutonne | Non | Une trajectoire principale | Optimale seulement si les propriétés requises sont vérifiées |
| Retour sur trace | Oui | Plusieurs branches, parfois toutes | Solution exacte, coût souvent exponentiel |
| Programmation dynamique | Pas au sens du retour ; mémorise les sous-problèmes | États distincts | Solution optimale si la relation de récurrence est correcte |
|
Invariant de construction
Un invariant utile est : « après chaque itération, la solution partielle est faisable et peut encore être complétée ». La faisabilité ne suffit toutefois pas à garantir l’optimalité ; elle garantit seulement que les contraintes ne sont pas violées.
| Checklist de conception |
|
13.2 Conditions d’utilisation
Pourquoi une preuve est nécessaire
Un algorithme glouton peut être très convaincant sur quelques exemples et néanmoins échouer sur une instance particulière. Avant d’affirmer qu’il est optimal, il faut montrer que ses choix locaux sont compatibles avec une solution globale optimale.
Propriété du choix glouton
La propriété du choix glouton affirme qu’il existe au moins une solution optimale commençant par le choix local effectué par l’algorithme. Le premier choix peut donc être fixé sans perdre l’optimalité.
| Formulation |
| Soit c le candidat sélectionné par la règle gloutonne. Pour toute instance du problème, on doit pouvoir montrer qu’une solution optimale contient c ou peut être transformée en une solution optimale contenant c sans dégrader sa valeur. |
Sous-structure optimale
Après avoir effectué un choix glouton, le problème restant doit être une instance plus petite du même problème. Une solution optimale du problème initial est alors formée du choix effectué et d’une solution optimale du sous-problème résiduel.
Problème | Choix fixé | Sous-problème restant |
|---|---|---|
| Sélection d’activités | Activité terminant le plus tôt | Choisir un maximum d’activités commençant après sa fin |
| Huffman | Fusion des deux fréquences minimales | Construire un code optimal sur le nouvel ensemble de fréquences |
| Rendu de monnaie canonique | Plus grande pièce ne dépassant pas le reste | Rendre le montant restant |
| Arbre couvrant minimal | Arête sûre traversant une coupe | Relier les composantes restantes |
Méthodes de preuve de correction
1. Argument d’échange
On part d’une solution optimale quelconque. Si son premier choix diffère du choix glouton, on remplace ce choix par le choix glouton et on montre que la solution reste faisable et ne devient pas moins bonne. On obtient ainsi une solution optimale compatible avec l’algorithme.
2. Preuve par induction
On montre que le choix initial est sûr, puis que le sous-problème possède la même structure. L’hypothèse d’induction garantit que les choix suivants produisent une solution optimale du sous-problème.
3. Méthode « rester en avance »
On compare, étape par étape, la solution gloutonne à une solution optimale. On prouve qu’après chaque étape, la solution gloutonne n’est jamais en retard selon une mesure adaptée.
4. Propriété de coupe
Dans certains problèmes de graphes, une coupe sépare les sommets en deux groupes. On prouve qu’une arête de poids minimal traversant cette coupe est sûre et peut appartenir à un optimum.
Méthode | Idée essentielle | Exemple adapté |
|---|---|---|
| Échange | Transformer une solution optimale pour intégrer le choix glouton | Sélection d’activités, ordonnancement |
| Induction | Réduire à un sous-problème de même nature | Rendu de monnaie dans certains systèmes |
| Rester en avance | Comparer les solutions préfixe par préfixe | Planification et minimisation de temps |
| Coupe | Montrer qu’un élément minimal est sûr | Arbres couvrants minimaux |
|
Comment chercher un contre-exemple ?
- tester de petites instances permettant une énumération complète des solutions ;
- modifier légèrement les poids, durées ou valeurs pour créer un conflit entre gain immédiat et gain futur ;
- examiner les cas où deux choix locaux sont proches mais conduisent à des sous-problèmes très différents ;
- comparer la solution gloutonne à une recherche exhaustive ou à une programmation dynamique ;
- tester les égalités et les règles de départage.
| Critère de décision |
| Une méthode gloutonne est appropriée lorsque le choix local peut être démontré sûr et lorsque le problème restant conserve une structure optimale. Sans ces propriétés, elle peut servir d’heuristique rapide, mais non de méthode exacte. |
13.3 Exemples
Exemple 1 — Rendu de monnaie
Le problème consiste à rendre un montant avec le plus petit nombre de pièces. Une stratégie gloutonne naturelle choisit toujours la plus grande pièce ne dépassant pas le montant restant.
|
Trace avec les pièces {25, 10, 5, 1} et le montant 63
Reste avant | Pièce choisie | Reste après | Rendu partiel |
|---|---|---|---|
| 63 | 25 | 38 | 25 |
| 38 | 25 | 13 | 25, 25 |
| 13 | 10 | 3 | 25, 25, 10 |
| 3 | 1 | 2 | 25, 25, 10, 1 |
| 2 | 1 | 1 | 25, 25, 10, 1, 1 |
| 1 | 1 | 0 | 25, 25, 10, 1, 1, 1 |
Le résultat contient six pièces. Pour de nombreux systèmes monétaires usuels, la stratégie est optimale. Elle ne l’est cependant pas pour tous les ensembles de pièces.
| Contre-exemple classique |
Pièces : {4, 3, 1}, montant : 6. Le glouton choisit 4 + 1 + 1, soit 3 pièces. La solution optimale est 3 + 3, soit 2 pièces. Le choix de la plus grande pièce n’est donc pas toujours sûr. |
Complexité
Si l’on utilise des divisions entières pour calculer directement le nombre de pièces de chaque valeur, le coût est O(k), où k est le nombre de types de pièces. Avec une boucle retirant une pièce à la fois, le coût dépend aussi du nombre total de pièces rendues.
Exemple 2 — Sélection d’activités
On dispose d’activités utilisant une même ressource. Chaque activité possède une heure de début et une heure de fin. L’objectif est de sélectionner le plus grand nombre d’activités compatibles.
La stratégie optimale consiste à choisir, parmi les activités compatibles, celle qui se termine le plus tôt. Ce choix laisse le maximum de temps disponible pour les activités suivantes.
|
Exemple de trace
Activité | Début | Fin | Décision | Raison |
|---|---|---|---|---|
| A1 | 1 | 4 | Choisie | Première fin la plus proche |
| A2 | 3 | 5 | Rejetée | Commence avant 4 |
| A3 | 0 | 6 | Rejetée | Commence avant 4 |
| A4 | 5 | 7 | Choisie | 5 ≥ 4 |
| A5 | 3 | 9 | Rejetée | 3 < 7 |
| A6 | 8 | 9 | Choisie | 8 ≥ 7 |
| A7 | 9 | 11 | Choisie | 9 ≥ 9 |
La sélection obtenue est {A1, A4, A6, A7}.
Esquisse de preuve par échange
1. Soit G l’activité qui se termine le plus tôt et O la première activité d’une solution optimale.
2. Comme fin(G) ≤ fin(O), remplacer O par G ne rend aucune activité ultérieure incompatible.
3. La solution transformée contient autant d’activités et commence par G.
4. Le problème restant est le même problème sur les activités commençant après fin(G).
5. En répétant l’argument, la sélection gloutonne est optimale.
| Relation / résultat |
Complexité : O(n log n) pour le tri + O(n) pour le parcours = O(n log n). Si les activités sont déjà triées par date de fin, la sélection est O(n). |
Exemple 3 — Planification de tâches
Considérons des tâches de durée unitaire. Chaque tâche possède une échéance et un profit obtenu si elle est exécutée avant ou à son échéance. L’objectif est de maximiser le profit total.
Une stratégie classique trie les tâches par profit décroissant et place chaque tâche dans le créneau libre le plus tardif qui respecte son échéance. Placer tardivement une tâche préserve les créneaux précoces pour les tâches ayant des échéances plus contraintes.
|
Exemple
Tâche | Échéance | Profit | Créneau choisi |
|---|---|---|---|
| T1 | 2 | 100 | 2 |
| T2 | 1 | 70 | 1 |
| T3 | 2 | 60 | Aucun créneau libre |
| T4 | 3 | 40 | 3 |
| T5 | 1 | 20 | Aucun créneau libre |
Le planning final est [T2, T1, T4] et le profit total vaut 210.
Analyse
Avec une recherche linéaire du créneau libre, le coût est O(n log n + nD), où D est la plus grande échéance. Une structure d’ensembles disjoints permet d’accélérer la recherche du dernier créneau libre.
| Différentes variantes |
|
Exemple 4 — Codage de Huffman simplifié
Le codage de Huffman construit un code binaire préfixe dans lequel les symboles fréquents possèdent des codes courts. La stratégie fusionne répétitivement les deux nœuds de fréquence minimale.
Une file de priorité minimale permet d’extraire rapidement les deux fréquences les plus faibles et de réinsérer leur somme.
|
Exemple de fusions
Étape | Fréquences disponibles | Deux minimums | Nouvelle fréquence |
|---|---|---|---|
| 0 | A:5, B:9, C:12, D:13, E:16, F:45 | 5 et 9 | 14 |
| 1 | C:12, D:13, 14, E:16, F:45 | 12 et 13 | 25 |
| 2 | 14, E:16, 25, F:45 | 14 et 16 | 30 |
| 3 | 25, 30, F:45 | 25 et 30 | 55 |
| 4 | F:45, 55 | 45 et 55 | 100 |
Génération des codes
On étiquette conventionnellement les arêtes gauches par 0 et les arêtes droites par 1. Le code d’un symbole est la suite des bits rencontrés de la racine à sa feuille. Aucun code n’est préfixe d’un autre, ce qui garantit un décodage sans séparateur.
|
| Relation / résultat |
Complexité : O(k log k) k désigne le nombre de symboles distincts. Chaque fusion effectue deux extractions et une insertion dans la file de priorité. |
| Pourquoi la fusion des deux plus faibles est-elle sûre ? |
| Dans un code préfixe optimal, deux symboles de fréquences minimales peuvent être placés comme feuilles sœurs au niveau le plus profond. En les fusionnant, on réduit le problème à une instance plus petite, ce qui établit la propriété du choix glouton et la sous-structure optimale. |
Comparaison des quatre exemples
Problème | Choix local | Structure utile | Optimalité |
|---|---|---|---|
| Rendu de monnaie | Plus grande pièce admissible | Liste triée | Seulement pour certains systèmes de pièces |
| Sélection d’activités | Fin la plus précoce | Tableau trié | Garantie par argument d’échange |
| Tâches avec profit | Profit maximal puis dernier créneau libre | Tableau / ensemble disjoint | Garantie pour la variante unitaire décrite |
| Huffman | Deux fréquences minimales | Tas minimum | Garantie pour le coût pondéré des codes préfixes |
| Observation commune |
| Dans chaque problème correct, le choix local élimine une partie de l’espace de recherche sans supprimer toutes les solutions optimales. La preuve explique précisément pourquoi cette élimination est sûre. |
13.4 Limites des algorithmes gloutons
Choix local non optimal
Un choix offrant le meilleur gain immédiat peut empêcher une combinaison future plus avantageuse. La stratégie échoue lorsque les décisions interagissent fortement et qu’un bénéfice local masque une perte globale.
Contre-exemples fondamentaux
Rendu de monnaie non canonique
Pour les pièces {4, 3, 1} et le montant 6, choisir 4 conduit à trois pièces, alors que 3 + 3 en utilise deux.
Sac à dos 0/1
Dans le sac à dos fractionnaire, choisir le meilleur rapport valeur/poids est optimal parce qu’un objet peut être fractionné. Dans le sac à dos 0/1, le même critère peut échouer puisque chaque objet doit être pris entièrement ou rejeté.
Objet | Poids | Valeur | Rapport valeur/poids |
|---|---|---|---|
| A | 10 | 60 | 6 |
| B | 20 | 100 | 5 |
| C | 30 | 120 | 4 |
Avec une capacité de 50, le glouton par rapport choisit A puis B pour une valeur 160. La solution optimale choisit B et C pour une valeur 220.
Plus proche voisin pour le voyageur de commerce
Choisir systématiquement la ville la plus proche produit rapidement une tournée, mais un choix court au début peut forcer une très longue arête à la fin. La méthode est une heuristique, sans garantie d’optimalité générale.
| Leçon |
| La plausibilité du critère local et ses bons résultats sur quelques exemples ne remplacent ni une preuve ni une garantie d’approximation. |
Comparaison avec la programmation dynamique
Critère | Algorithme glouton | Programmation dynamique |
|---|---|---|
| Décision | Définitive et locale | Évalue plusieurs transitions entre états |
| Sous-problèmes | Souvent un seul sous-problème résiduel | Nombreux sous-problèmes qui se recouvrent |
| Mémoire | Souvent faible | Table ou mémoïsation parfois volumineuse |
| Temps | Souvent O(n) ou O(n log n) | Souvent polynomial mais plus élevé |
| Optimalité | Nécessite le choix glouton et une preuve | Découle de la relation de récurrence exhaustive sur les états |
| Exemples | Activités, Huffman, Kruskal, Prim | Sac à dos 0/1, rendu de monnaie général, distance d’édition |
Glouton exact ou heuristique ?
Lorsque la correction est démontrée, la méthode gloutonne est un algorithme exact. Lorsqu’aucune preuve n’existe mais que la solution est généralement acceptable, elle devient une heuristique. Il faut alors évaluer expérimentalement la qualité des résultats et, si possible, fournir une borne d’approximation.
Situation | Décision recommandée |
|---|---|
| Propriété du choix glouton démontrée | Utiliser l’algorithme glouton exact |
| Petite instance et besoin d’optimalité | Utiliser recherche exhaustive, retour sur trace ou programmation dynamique |
| Grande instance, exact difficile | Utiliser heuristique gloutonne et mesurer l’écart |
| Sous-problèmes répétés et états bien définis | Utiliser programmation dynamique |
| Contraintes évolutives ou en ligne | Envisager une stratégie gloutonne adaptative |
|
Erreurs fréquentes
- confondre faisabilité et optimalité ;
- décrire un critère local ambigu ou dépendant d’un ordre non défini ;
- oublier les égalités et les règles de départage ;
- prouver seulement que l’algorithme termine ;
- généraliser un résultat valable pour une variante à une autre variante ;
- ignorer le coût du tri ou de la file de priorité ;
- utiliser un glouton comme solution exacte sans preuve ni mesure de qualité.
Applications guidées
Application 1 — Concevoir un rendu de monnaie
On dispose des pièces {1, 2, 5, 10, 20, 50}. Concevoir une stratégie gloutonne pour rendre 87, produire la trace et préciser la complexité.
|
Résultat : 50 + 20 + 10 + 5 + 2, soit cinq pièces. Le parcours des k types de pièces est O(k).
Application 2 — Réserver une salle
Une salle ne peut accueillir qu’une activité à la fois. L’objectif est de maximiser le nombre de réservations acceptées. La règle de fin la plus proche permet de libérer la salle le plus tôt possible.
| Travail attendu |
|
Application 3 — Compresser un message
À partir des fréquences des caractères d’un message, construire un arbre de Huffman, générer les codes et calculer la longueur totale du message codé.
| Relation / résultat |
Coût total du code = Σ fréquence(symbole) × longueur(code(symbole)) Huffman minimise ce coût parmi les codes binaires préfixes. |
Application 4 — Ordonner des interventions urgentes
Une file de priorité peut sélectionner la prochaine intervention selon un score local combinant urgence, échéance et ancienneté. Ce système est glouton au sens opérationnel, mais il n’est optimal que si l’objectif et le modèle de tâches correspondent à une variante démontrée.
| Dimension éthique et pratique |
| Dans les applications réelles, le critère de priorité doit être transparent, auditable et protégé contre la famine des tâches peu prioritaires. Une règle d’augmentation progressive de la priorité peut être nécessaire. |
Travaux dirigés
TD 1 — Identifier les composants d’un glouton
Pour le problème de sélection d’activités, identifier les candidats, le critère de sélection, le test de faisabilité, la fonction objectif et le critère d’arrêt.
TD 2 — Rendu de monnaie canonique
Appliquer la stratégie gloutonne au montant 289 avec les pièces {100, 50, 20, 10, 5, 2, 1}. Donner le rendu et le nombre de pièces.
TD 3 — Construire un contre-exemple
Montrer que le système de pièces {1, 5, 6, 9} n’est pas toujours compatible avec le choix de la plus grande pièce. Chercher un montant inférieur ou égal à 15.
TD 4 — Sélection d’activités
Sélectionner un nombre maximal d’activités parmi : A(0,3), B(1,2), C(3,5), D(4,7), E(5,7), F(7,9), G(8,10). Présenter la trace.
TD 5 — Argument d’échange
Rédiger une preuve concise montrant que choisir l’activité qui termine le plus tôt est un choix sûr.
TD 6 — Planification avec profits
Planifier les tâches unitaires T1(échéance 2, profit 60), T2(1, 100), T3(3, 20), T4(2, 40), T5(1, 20). Donner le planning et le profit total.
TD 7 — Huffman
Construire les fusions de Huffman pour les fréquences A:2, B:3, C:7, D:8, E:12. Proposer un code binaire valide et calculer son coût pondéré.
TD 8 — Glouton ou programmation dynamique ?
Pour chacun des problèmes suivants, proposer la méthode la plus adaptée et justifier : rendu de monnaie général, sélection d’activités, sac à dos 0/1, sac à dos fractionnaire, plus longue sous-suite commune.
TD 9 — Analyse de complexité
Analyser la complexité d’un algorithme de sélection d’activités avec tri, puis celle de Huffman avec une file de priorité binaire.
TD 10 — Évaluer une heuristique
On utilise la méthode du plus proche voisin pour construire une tournée. Proposer un protocole expérimental permettant de comparer cette heuristique à l’optimum sur de petites instances.
Corrigés indicatifs des travaux dirigés
Correction du TD 1
Composant | Réponse |
|---|---|
| Candidats | Les activités non encore examinées |
| Sélection | Activité de date de fin minimale |
| Faisabilité | Son début est supérieur ou égal à la fin de la dernière activité choisie |
| Objectif | Maximiser le nombre d’activités retenues |
| Arrêt | Toutes les activités triées ont été examinées |
Correction du TD 2
289 = 2×100 + 1×50 + 1×20 + 1×10 + 1×5 + 2×2. Le rendu contient 8 pièces : 100, 100, 50, 20, 10, 5, 2, 2.
Correction du TD 3
Pour le montant 11, le glouton choisit 9 + 1 + 1, soit 3 pièces. La solution 6 + 5 utilise seulement 2 pièces. Le système n’est donc pas canonique.
Correction du TD 4
Après tri par date de fin : B(1,2), A(0,3), C(3,5), D(4,7), E(5,7), F(7,9), G(8,10).
Activité | Décision | Fin de la dernière activité retenue |
|---|---|---|
| B(1,2) | Choisie | 2 |
| A(0,3) | Rejetée | 2 |
| C(3,5) | Choisie | 5 |
| D(4,7) | Rejetée | 5 |
| E(5,7) | Choisie | 7 |
| F(7,9) | Choisie | 9 |
| G(8,10) | Rejetée | 9 |
Sélection : B, C, E, F, soit quatre activités.
Correction du TD 5
Soit O une solution optimale dont la première activité est X. Soit G l’activité qui se termine le plus tôt. Comme fin(G) ≤ fin(X), remplacer X par G conserve la compatibilité avec toutes les activités suivantes de O. On obtient donc une solution optimale commençant par G. Le même raisonnement s’applique au sous-problème restant.
Correction du TD 6
Tri par profit : T2(100), T1(60), T4(40), T3(20), T5(20).
Tâche | Échéance | Créneau |
|---|---|---|
| T2 | 1 | 1 |
| T1 | 2 | 2 |
| T4 | 2 | Aucun |
| T3 | 3 | 3 |
| T5 | 1 | Aucun |
Planning : [T2, T1, T3]. Profit total : 100 + 60 + 20 = 180.
Correction du TD 7
Étape | Fusion | Nouvel ensemble |
|---|---|---|
| 1 | 2 + 3 = 5 | 5, 7, 8, 12 |
| 2 | 5 + 7 = 12 | 8, 12, 12 |
| 3 | 8 + 12 = 20 | 12, 20 |
| 4 | 12 + 20 = 32 | 32 |
Un codage possible dépend du départage des fréquences égales. Par exemple : E=0, D=10, C=111, A=1100, B=1101. Le coût pondéré vaut 12×1 + 8×2 + 7×3 + 2×4 + 3×4 = 69 bits.
Correction du TD 8
Problème | Méthode | Justification |
|---|---|---|
| Rendu de monnaie général | Programmation dynamique | Le choix de la plus grande pièce peut échouer |
| Sélection d’activités | Glouton | Choix de la fin la plus précoce démontré optimal |
| Sac à dos 0/1 | Programmation dynamique | Les objets indivisibles créent des dépendances |
| Sac à dos fractionnaire | Glouton | Choisir le rapport valeur/poids maximal est optimal |
| Plus longue sous-suite commune | Programmation dynamique | Sous-problèmes répétés sur deux préfixes |
Correction du TD 9
Sélection d’activités : tri O(n log n), parcours O(n), soit O(n log n) et O(n) de mémoire si une nouvelle liste est créée. Huffman : k insertions ou construction initiale du tas, puis k−1 fusions avec deux extractions et une insertion, soit O(k log k).
Correction du TD 10
1. Générer de petites instances de 5 à 10 villes avec des distances symétriques.
2. Calculer la tournée du plus proche voisin à partir de chaque ville possible.
3. Calculer l’optimum par énumération des permutations, uniquement pour ces petites tailles.
4. Comparer le coût absolu, l’écart relatif et le temps de calcul.
5. Répéter sur plusieurs distributions de points et présenter moyenne, maximum et écart-type de l’erreur.
Travail pratique — Glouton, optimum et contre-exemples
Objectifs
- implémenter plusieurs stratégies gloutonnes ;
- construire une solution exacte de référence sur de petites instances ;
- mesurer la qualité et le temps de calcul ;
- identifier automatiquement des contre-exemples ;
- présenter une preuve ou conclure que la stratégie n’est qu’une heuristique.
Partie A — Rendu de monnaie
1. Implémenter le rendu glouton avec des pièces triées en ordre décroissant.
2. Implémenter une programmation dynamique calculant le nombre minimal de pièces.
3. Tester les systèmes {1,2,5,10,20,50}, {1,3,4} et {1,5,6,9}.
4. Générer les montants de 1 à 200 et relever les premiers contre-exemples.
5. Comparer le temps et la mémoire des deux méthodes.
|
Partie B — Sélection d’activités
1. Générer un ensemble d’intervalles aléatoires.
2. Implémenter le glouton par fin croissante.
3. Pour n ≤ 20, calculer l’optimum par exploration de tous les sous-ensembles.
4. Vérifier expérimentalement que les cardinalités coïncident.
5. Rédiger un argument d’échange indépendant des tests.
Partie C — Huffman
1. Compter les fréquences des caractères d’un texte.
2. Construire l’arbre avec une file de priorité minimale.
3. Produire le dictionnaire caractère → code.
4. Encoder puis décoder le texte.
5. Comparer la taille obtenue à un codage fixe de 8 bits par caractère.
Jeux d’essai minimaux
Test | Entrée | Résultat attendu |
|---|---|---|
| M1 | {1,2,5,10}, montant 18 | Glouton optimal : 10+5+2+1 |
| M2 | {1,3,4}, montant 6 | Glouton 3 pièces ; optimum 2 pièces |
| A1 | Intervalles déjà compatibles | Toutes les activités sélectionnées |
| A2 | Intervalles tous chevauchants | Une seule activité sélectionnée |
| H1 | Un seul symbole | Cas spécial : code 0 ou longueur 1 |
| H2 | Fréquences égales | Code valide ; le départage peut modifier les bits mais pas le coût optimal |
Livrables
- code source organisé et documenté ;
- description des structures de données utilisées ;
- tableau des résultats glouton / optimum ;
- liste des contre-exemples trouvés ;
- analyse de complexité ;
- courte justification de correction pour la sélection d’activités et Huffman ;
- discussion sur les limites de l’expérimentation.
Grille d’évaluation
Critère | Points |
|---|---|
| Correction des implémentations gloutonnes | 4 |
| Solution exacte de référence et reconstruction | 3 |
| Jeux d’essai et détection de contre-exemples | 3 |
| Huffman : encodage et décodage | 3 |
| Analyse de complexité et mesures | 3 |
| Justification théorique et qualité du rapport | 3 |
| Lisibilité, modularité et gestion des erreurs | 1 |
Synthèse du chapitre
Notion | À retenir |
|---|---|
| Choix local | Décision considérée comme la meilleure à l’étape courante |
| Construction progressive | La solution est étendue par ajouts faisables |
| Absence de retour | Un choix accepté n’est pas annulé |
| Choix glouton | Il existe un optimum compatible avec le choix local |
| Sous-structure optimale | Le reste du problème doit être résolu optimalement |
| Preuve | Échange, induction, avance ou propriété de coupe |
| Limite | Une règle intuitive peut être seulement heuristique |
| Complexité | Souvent dominée par un tri ou une file de priorité : O(n log n) |
| Méthode en sept questions |
|
Glossaire
Terme | Définition |
|---|---|
| Algorithme glouton | Algorithme construisant une solution par décisions locales définitives |
| Candidat | Élément susceptible d’être ajouté à la solution |
| Choix local | Meilleure décision selon le critère courant |
| Faisabilité | Respect des contraintes par la solution partielle |
| Fonction objectif | Mesure à minimiser ou maximiser |
| Propriété du choix glouton | Existence d’un optimum compatible avec le choix effectué |
| Sous-structure optimale | Composition d’un optimum à partir d’optima de sous-problèmes |
| Argument d’échange | Transformation d’un optimum pour intégrer le choix glouton |
| Heuristique | Méthode rapide sans garantie générale d’optimalité |
| Code préfixe | Code dans lequel aucun mot n’est préfixe d’un autre |
Auto-évaluation
Je peux… | Oui | À revoir |
|---|---|---|
| définir une stratégie gloutonne et ses composants | ☐ | ☐ |
| distinguer choix local, faisabilité et optimalité | ☐ | ☐ |
| expliquer la propriété du choix glouton | ☐ | ☐ |
| reconnaître une sous-structure optimale | ☐ | ☐ |
| rédiger un argument d’échange simple | ☐ | ☐ |
| appliquer la sélection d’activités | ☐ | ☐ |
| construire un arbre de Huffman | ☐ | ☐ |
| produire un contre-exemple au rendu glouton | ☐ | ☐ |
| comparer glouton et programmation dynamique | ☐ | ☐ |
| analyser la complexité d’une solution gloutonne | ☐ | ☐ |
| Conclusion |
| Les algorithmes gloutons combinent simplicité, rapidité et élégance. Leur force ne repose pas seulement sur un choix intuitif, mais sur la démonstration que ce choix ne compromet pas l’optimum. Savoir chercher une preuve et savoir construire un contre-exemple sont donc deux compétences indissociables. |