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