C16.1a : Algorithme glouton (rappel)
Les algorithmes gloutons
L'optimisation combinatoire consiste à trouver, parmi un ensemble fini de combinaisons, la (les) combinaison(s) qui répond(ent) de façon optimale à un critère donné.
• Une façon de résoudre exactement ce problème consiste à appliquer de façon exhaustive le critère à toutes les combinaisons pour ne garder que la combinaison dont le résultat est optimal. Cette méthode peut, dans de nombreux cas, prendre un temps trop long.
• Les algorithmes gloutons permettent de trouver une solution satisfaisante (mais pas forcément la solution optimale) en appliquant le critère localement, de proche en proche.
TD - Le problème du sac à dos
Présentation du problème
Émeline a prévu de partir en vacances dans un endroit sans connexion internet.
Elle souhaite néanmoins pouvoir écouter de la musique. Elle envisage pour cela d'emporter un lecteur numérique et d'y stocker quelques morceaux.
Mais son lecteur dispose d'un espace mémoire limité (par exemple 10 Mio).
Les fichiers de musique qu'elle peut sélectionner sont caractérisés par :
- leur taille (la place qu'ils occupent en mémoire)
- la durée d'écoute.
Émeline souhaite avoir une durée d'écoute totale la plus grande possible.
Résolution du problème par la méthode gloutonne
💻 En vous appuyant sur un algorithme glouton, proposer un programme qui va permettre à Émeline de résoudre son problème.
Vous disposez pour cela du fichier csv qui contient la liste des musiques d'Émeline (fichier : musiques.csv). Les données seront récupérées sous la forme d'une liste de dictionnaires.
TD - Exemple du voyageur de commerce (difficile)
Présentation du problème à résoudre
Un voyageur souhaite visiter les cinq préfectures des cinq départements des Hauts-de-France : Lille, Arras, Laon, Beauvais et Amiens. Dans un soucis écologique, il souhaite, lors de son voyage, parcourir la plus petit distance possible.
Il a relevé sur le site openstreetmap.org les distances entre chaque préfecture en km et les a consignées dans un tableau à double entrée.
| Lille | Arras | Laon | Beauvais | Amiens | |
|---|---|---|---|---|---|
| Lille | 0 | 54 | 156 | 195 | 142 |
| Arras | 54 | 0 | 129 | 154 | 62 |
| Laon | 156 | 129 | 0 | 134 | 125 |
| Beauvais | 195 | 154 | 134 | 0 | 62 |
| Amiens | 142 | 62 | 125 | 62 | 0 |
Résolution exhaustive
Première approche
🖊️ 1. Proposer une démarche pour résoudre le problème du voyageur : c'est-à-dire lui trouver, avec certitude, le voyage le plus court.
Généralisation de l'approche exhaustive
On souhaite généraliser le problème avec un voyage où le nombre de villes à visiter est \(N\).
🖊️ 2. Combien de voyages différents sont possibles pour visiter \(N\) villes ?
🖊️ 3. La résolution exhaustive, à la main, pour un voyage de \(10\) villes vous semble-t-elle possible ?
🖊️ 4. La résolution exhaustive, à l'ordinateur, pour un voyage de \(100\) villes vous semble-t-elle possible ?
Résolution approchée avec l'algorithme glouton
Lorsqu'il y a beaucoup de villes, une approche simplifiée consiste, pour le voyageur, a adopter la démarche suivante : à chaque ville, il choisit comme ville suivante, la ville la plus proche parmi toutes celles qu'il n'a pas encore visité.
💻 Proposer un programme qui réponde au problème posé.