feuille TD3

publicité
Algorithmique Avancée et Complexité
2009–2010
Master 1 d’Informatique
S.Tison
UFR IEEA
Fiche TD: Algorithmes gloutons
Q 5. Déduire de ce qui précède un algorithme utilisant la programmation dynamique pour calculer la valeur
optimale d’un chargement et un chargement correspondant.
Q 6. Evaluer la complexité de votre algorithme. Pourquoi est-il plus efficace que l’algorithme naïf? est-il
polynômial?
Quel avantage présente(rait) ici une version récursive "dynamique" (i.e. avec mémorisation) par rapport à
la version itérative?
Le cas fractionnable
Exercice 1 : Le problème du sac à dos
Donnée du problème:
un entier c positif –la capacité maximum du sac
un entier n positif –le nombre d’objets
n entiers p1 , · · · , pn positifs. –les poids des objets
n entiers v1 , · · · , vn , 1 ≤ vi ≤ c. –les valeurs des objets
Interprétation: il y a un sac de capacité maximale c et n objets (ou projets ou..) de poids (ou coûts ou ..)
pi et de valeur vi . On pourra supposer que les objets sont numérotés de 1 à n.
Le problème On veut choisir les objets à emporter en respectant la capacité maximale et en maximisant la
valeur. On peut considérer deux versions du problème: le cas fractionnable -on peut fractionner les objets-, ou
non.
Donnée du problème:
On suppose donc maintenant qu’on peut fractionner les objets.
Q 7. Comment formaliseriez-vous le problème?
Q 8. Proposer un algorithme polynomial qui résout le pb dans ce cas. Montrer qu’il donne bien le remplissage
optimal et étudier sa complexité. pour simplifier la preuve, vous pourrez supposer que les v[i]/p[i] sont tous
distincts;
Exercice 2 : Les gardiens de musée
Le cas non fractionnable
Considérez une galerie de peinture
réels). Un gardien peut surveiller
gauche comme à droite. Concevez
pour surveiller tous les tableaux et
Dans ce cas, un remplissage est juste le choix des objets qu’on emporte. Formellement, on cherche donc
P
P
J ⊂ {1, · · · , n} qui vérifie les contraintes, i.e. i∈J pi ≤ c et qui maximise la valeur totale, i.e. i∈J vi .
Exercice 3 : Optimal?
Exemple 1: Soit c = 5, n = 4, p1 = 3, p2 = 2, p3 = 3, p4 = 1 et v1 = 4, v2 = 3, v3 = 3, v4 = 4. Alors, la valeur
optimale d’un chargement sera 8 (ici, obtenu par un seul chargement qui correspond à prendre le premier et le
quatrième objet).
Q 1.Un exemple
Proposez un chargement optimal pour:
c=8
n=5
p1 = 3, p2 = 6, p3 = 5, p4 = 2, p5 = 2
v1 = 4, v2 = 4, v3 = 5, v4 = 3, v5 = 5.
Q 2.Glouton? L’algorithme glouton suivant donne-t-il le chargement optimal?
Trier les objets dans l’ordre des valeurs décroissantes
pour chaque objet i
si p_i+ poids <=c
{prendre c; poids=poids+p_i;}
Q 3.Un algorithme en programmation dynamique
Appelons M eill(i, p) la valeur optimale d’un chargement
de numéro i, i + 1, . . . , n, avec 1 ≤ i ≤ n et 1 ≤ p ≤ c,
On a donc dans l’exemple 1:
Meill 1 2 3
1
4 4 7
2
4 4 7
3
4 4 4
4
4 4 4
Q 1.Soit n tâches. Si elle est exécutée, la tâche i doit commencer au temps di , finir au temps fi et elle rapporte
pi . On ne peut exécuter qu’une tâche à la fois. L’objectif est de réaliser un ensemble de tâches qui maximise le
profit total. Soit l’algorithme qui consiste à trier les tâches par profit décroissant, puis à examiner les tâches une
à une: si elle peut être exécutée sans conflit avec celles sélectionnées précédemment, on la sélectionne, sinon,
non. Pensez-vous que cet algorithme produit toujours la solution optimale?
Q 2. Soit maintenant n tâches, qui durent chacune une unité de temps. Chaque tâche a une date limite (entière)
dli et une pénalité pi : si la tâche n’est pas terminée à la date dli , alors il y a une pénalité de pi . L’objectif
est de programmer l’ensemble des tâches de façon à minimiser la somme des pénalités. Soit l’algorithme qui
consiste à trier les tâches par pi décroissantes, puis à examiner les tâches i dans cet ordre: si il existe une unité
de temps disponible avant dli , on programme i le plus tard possible avant dli , sinon le plus tard possible avant
n. Cet algorithme est-il optimal?
Exercice 4 : Les activités
pour un sac de capacité p en utilisant les objets
4
8
7
7
4
rectiligne. Les tableaux sont placés aux positions {x1 , . . . , xn } (les xi sont
des tableaux se trouvent à une distance au plus égale à 1 de lui-même à
et écrivez un algorithme qui calcule le nombre minimal de gardiens requis
les place. Analysez la complexité et justifiez l’optimalité de la solution.
5
8
7
7
4
Remplissez la table M eill pour l’exemple de la question 1.
Q 3.1. Que vaut M eill(n, p)? (distinguer deux cas).
Q 3.2. Exprimez M eill(i, p) en utilisant uniquement des M eill(j, k) avec j > i, k ≤ p (et pi , ci ).
Q 3.3. Que dire de M eill(1, c)?
Q 4. Déduire de ce qui précède un algorithme récursif naïf pour calculer la valeur d’un chargement optimal.
Que peut-on dire de sa complexité?
1
La donnée du problème est un ensemble d’activités; pour chaque activité on a une "heure" de début et une
"heure" de fin. Le problème est d’affecter des salles à toutes les activités, en respectant bien sûr la contrainte:
"à un instant donné, il peut y avoir au plus une seule activité par salle" et en minimisant le nombre de salles
utilisées. On suppose qu’il n’y a pas de temps de battement entre deux activités, i.e. que dans la même salle
dès qu’une activité est terminée, une autre peut commencer. Un peu plus formellement, on a donc:
Donnée:
n - - nombre d’activités
((di , fi ))ni=1 , di < fi , di (resp. fi ): heure de début (resp. fin) de l’activité i
Sortie Une affectation complète et correcte qui minimise le nombre de salles utilisées i.e.:
af f : [1..n] → [1..p], p ≤ n , aff(i) no de salle affectée à l’activité i
qui vérifie la contrainte:
si af f (i) = af f (j) et i 6= j, alors ]di , fi [∩]dj , fj [= ∅
et qui minimise card(af f ([1..n])).
Q 1. Soient les activités données par les "heures" de début et fin suivantes (1,5), (9,15), (4,8), (6,16). Proposer
une affectation optimale.
Q 2. Une première proposition consiste à remplir les salles une par une en utilisant le critère glouton “par date
de fin croissante”. pensez-vous que cette méthode forunit une solution optimale? Justifier.
2
Q 3. Proposer un algorithme glouton qui donne une solution optimale ... et le prouver. Que dire du nombre
de salles utilisées?
Exercice 5 : Identification
Soit un mélange de n peptides. On connaît la masse moléculaire de chacun des peptides présents w1 , ....wn
(toutes distinctes). On sait séparer les peptides mais ensuite il faut les identifier, i.e. à chaque peptide séparé
j, associer la masse moléculaire wi d’un des n peptides. Pour cela, on mesure la masse moléculaire de chaque
peptide à l’aide d’un spectomètre de masse. On obtient ainsi pour le jième peptide une masse xj . Malheureusement le spectromètre n’est pas exact ... On cherche donc à associer à chaque xj un wij -de façon injective, c’est
P
à dire deux peptides différents sont associés à des wi différents-, en minimisant j |xj − wij |.
Q 1. Montrer qu’on peut toujours trouver une association optimale telle que: si jxj est plus grand que xk , wij
est plus grand que wik . En déduire un algorithme efficace pour optimiser l’association. Justifier.
Exercice 6 : Foot ou Tennis?
Le contexte général de l’exercice est le suivant: une chaîne sportive réfléchit à la programmation des événements
qu’elle veut retransmettre en direct.
Pour cela la donnée est une liste de n événements avec pour chacun l’heure de début et de fin. Pour simplifier
on supposera que les heures sont données comme des entiers représentant le nombre de minutes depuis 0h. Un
événement est toujours retransmis dans son intégralité.
Les deux questions sont indépendantes.
Q 1.Optimisation du nombre d’événements
Dans un premier temps, la chaîne cherche à maximiser le nombre d’événements qu’elle va retransmettre.
Donnée:
n, nombre d’événements
(di , fi ) les heures de début et fin des événements
Sortie:
Une programmation optimale en nombre d’événements, i.e. J, un sous-ensemble de [1, n] de cardinal maximal
tel que pour tout j de J, pour tout k de J, si j 6= k, alors ]dj , fj [∩]dk , fk [= ∅
Remarque: On suppose donc qu’on peut enchaîner les événements sans pause ... Si l’événement ei se
termine à fi et si l’événement ej commence à dj avec fi = dj , ils peuvent être programmés à la suite.
Exemple 1: Soit n = 6, et les événéments donnés par
e1 : (50, 180), e2 : (60, 100), e3 : (120, 240), e4 : (130, 250), e5 (150, 220), e6 : (220, 300).
La programmation optimale en nombre d’événements sera (60, 100), (150, 220), (220, 300), donc J = {2, 5, 6}.
Q 1.1. Soit l’exemple 2 suivant: n = 6 et les événements sont donnés par
e1 : (50, 80), e2 : (120, 340), e3 : (90, 170), e4 : (110, 150), e5 : (160, 200), e6 : (220, 300).
Quelle sera la programmation optimale en nombre d’événements?
Q 1.2. Donner un algorithme polynômial pour le problème. Evaluer sa complexité et justifier la correction de
l’algorithme.
Q 2.Optimisation de la durée totale des retransmissions
On cherche maintenant à maximiser la durée totale de la programmation. Par exemple, pour l’exemple 1,
la sortie serait maintenant (50, 180), (220, 300).
Formellement, le problème est donc:
Donnée:
n, le nombre d’événements
(di , fi ) les heures de début et fin des événements
Sortie:
Une programmation optimale en durée totale de programmation, i.e. J, un sous-ensemble de [1, n] tel que pour
P
tout j de J, pour tout k de J, si j 6= k, alors ]dj , fj [∩]dk , fk [= ∅ tel que i∈J (fi − di ) soit maximal.
On suppose maintenant dans tout le reste de l’exercice que les événements sont triés par di
croissants.
Pour résoudre le problème, on définit la notion suivante: pour un numéro d’événement i, on notera duri la
durée totale d’une programmation optimale à partir des événements ei , ..., en . La valeur recherchée est donc
dur1 . Pour l’exemple 1, on a donc:
i
1
2
3
4
5
6
duri 210 190 150 150 150 80
Q 2.2.Donner les valeurs des duri pour l’exemple 2.
i
1 2 3 4 5 6
duri ? ? ? ? ? ?
On cherche maintenant à calculer les duri dans le cas général.
Q 2.3.Que vaut durn en fonction de dn et fn ?
Soit i, 1 ≤ i ≤ n. On dira que ei est final, si aucun événement ne peut être transmis après lui, i.e. pour
tout j dj < fi . par exemple, dans l’exemple 1, sont finaux e3 , e4 , e6 .
Q 2.4. Quels sont les événements finaux pour l’exemple 2?
Q 2.5. Proposer un algorithme en O(1) pour tester si un événement est final.
Q 2.6. Soit i < n tel que ei est final: exprimer duri en fonction de fi , di et duri+1 .
Q 2.7.Soit i, 1 ≤ i < n et ei non final.
Proposer en algorithme en O(log(n)) pour trouver j minimal tel que dj ≥ fi . On notera apr(i) cet entier j.
Par exemple, dans l’exemple 1, on a apr(1) = 6, apr(2) = 3.
Q 2.8. Soit i, 1 ≤ n et ei non final. Exprimer duri en fonction de duri+1 , di , fi et durapr(i) .
Q 2.9. Déduire de ce qui précède un algorithme polynômial pour le problème. Evaluer sa complexité temporelle.
Vous pouvez dans un premier temps vous contenter de calculer la durée optimale d’une solution, puis ensuite
la solution.
Exercice 7 : Stockage
Soient n enregistrements de longueur variable stockés dans un fichier à accès séquentiel. L’enregistrement ei
est de longueur si . On suppose que le temps d’accès au ième enregistrement est proportionnel à la somme des
longueurs des i premiers. Par exemple pour deux enregistrements e1 , e2 , si ils sont stockés dans l’ordre (e2 , e1 ),
le temps d’accès à l’enregistrement e2 est c ∗ s2 , pour e1 , c’est c ∗ (s2 + s1 ), c étant une constante. Pour chaque
P
enregistrement i, on connait la fréquence d’accès, fi ( on a ni fi = 1). Le temps moyen d’accès sera donc :
M =c∗
n
X
(fσ(j) ∗
j=1
sσ(k) )
k=1
Par exemple pour deux enregistrements, si les enregistrements sont stockés dans l’ordre (e2 , e1 ), le temps
moyen est donc c ∗ (f2 ∗ s2 + f1 ∗ (s2 + s1 )), soit c(s2 + f1 ∗ s1 ). Proposer une méthode gloutonne de stockage
qui donnera toujours une temps moyen d’accès optimal:
Entrée:
n –le nombre d’enregistrements.
s1 , s2 , .., sn les longueurs des enregistrements.
f1 , f2 , .., fn les fréquences d’accès
P
Sortie: L’ordre de stockage optimal, i.e. une permutation σ(1), .., σ(n) telle que M = c ∗ nj=1 (fσ(j) ∗
Pj
k=1 sσ(k) ) soit minimal.
Q 2.1. Quelle est maintenant la sortie pour l’exemple 2?
3
j
X
4
Téléchargement