Algorithmes gloutons Rendre la monnaie Emploi du temps
Transcription
Algorithmes gloutons Rendre la monnaie Emploi du temps
Sup’Galilée INFO1 S1– Année 2013–2014 Algorithmique TD 06 : Algorithmes gloutons Rendre la monnaie Pour rendre la monnaie à un client, un commerçant dispose de pièces de 1 e, 2 e et (de billets de) 5 e 1 . Afin de minimiser les manipulations, il veut rendre le moins de pièces (ou billets) possible. 1/Écrire un algorithme glouton qui indique quelles pièces (et billets) rendre en fonction de la somme à rendre. 2/Montrer que l’algorithme donne la solution optimale (nombre minimale de pièces/billets). Indication : donner toutes les solutions pour rendre la monnaie sur une somme inférieure ou égale à 5 e. Puis établir une récurrence de 5 en 5 e (pour les sommes entre 5 e et 10 e, puis entre 10 et 15 e, . . . ) 3/Au Myanmar, dans les années 70, il existait des billets de 1, 15, 25, 35, 45, 75 ou 90 kyats. Un algorithme glouton permettait-il de rendre la monnaie en minimisant le nombre de billets ? Emploi du temps On dispose d’une salle dans laquelle doivent se dérouler différentes activités (par exemple, des cours). L’activité numéro i a une heure de début, di et une heure de fin, fi . Il est impossible d’avoir plusieurs activité en même temps dans la salle. Ainsi, si l’intersection de [di ; fi ] et [dj ; fj ] n’est pas vide 2 , les activités i et j ne peuvent pas avoir lieu toutes les deux. On souhaite organiser le plus d’activités possibles dans une salle unique. Exemple Dans chacun i 1 2 4/ di 1 2 fi 10 3 des 3 4 5 trois cas suivants, trouver quelles 4 5 i 1 5/ di 4 6 8 7 9 fi 7 i 6/ di fi 3 10 13 4 4 7 1 6 8 2 1 4 5 7 10 6 3 5 7 3 5 8 3 5 9 9 11 10 9 11 activités organiser pour en maximiser le nombre. 2 3 1 6 5 10 11 9 11 Algorithme 7/On suppose que les activités sont triées par heure de début croissante. Un algorithme de type glouton donne-t-il la bonne solution ? 8/On suppose que les activités sont triées par durée croissante. Un algorithme glouton donne-t-il la bonne solution ? 9/On suppose que les activités sont triées par nombre de conflits croissant (en premier les activités qui entrent en conflit avec le moins d’autres activités). Un algorithme glouton donne-t-il la bonne solution ? 10/On suppose que les activités sont triées par heure de fin croissante. Donner un algorithme glouton pour savoir quelles activités organiser. Quelle est sa complexité en temps ? 1. On ignore les coupures plus grandes, mais le problème est similaire si on multiplie les sommes par 10 ou 100. . . sauf qu’il est rare de rendre la monnaie en billets de 500 e. 2. Ou, plus précisément, réduite à un point puisqu’il s’agit d’intervalles fermés (on considère ici que la salle se vide et se rempli instantanément, c’est-à-dire que si fi = dj , l’activité j peut commencer immédiatement après l’activité i, c’est le cas où l’intersection précédente est réduite à un point, dj .). 1 Preuve d’optimalité Soit A = {A1 , . . . An } l’ensemble d’activités renvoyées par l’algorithme de la question précédente (Ai est donc un numéro d’activité). On veut prouver que A est optimal, c’est-à-dire qu’on ne peut pas organiser plus de n activités. Soit B = {B1 , . . . , Bm } un ensemble optimal (c’est-à-dire de cardinal maximal) d’activités organisables. 11/Prouver par récurrence que pour tout k, fAk ≤ fBk . (Ak étant un numéro d’activité, fAk est l’heure de fin de l’activité numéro Ak ) 12/Montrer, par l’absurde, que n ≥ m. 13/En déduire que A est optimal. Activités différentes Si toutes les activités n’ont pas la même importance (par exemple, on préfère organiser un partiel qu’un cours), on peut donner à chaque activité une priorité et essayer de maximiser la somme des priorités des activités organisées (plutôt que le nombre d’activités organisées). Dans ce cas, l’algorithme glouton ne fonctionne plus et il faut utiliser un algorithme de programmation dynamique. 2