ACT 2016–2017 Master d’Informatique-S1 UFR IEEA Fiche TD: Algorithmes gloutons Exercice 1 : Les invités Alice veut organiser une grande fête. Elle a la liste de ses connaissances, et sait qui connait qui. Elle veut respecter cette règle: chaque invité connaît au moins 5 autres invités et ne connait pas au moins 5 invités. Elle veut de plus inviter le maximum de personnes. Q 1. Proposer un algorithme pour construire une liste optimale d’invités, justifier sa correction et évaluer sa complexité. Exercice 2 : Les antennes-relais, version simplifiée Considérez une route rectiligne avec des habitations dispersées, placées aux positions {x1 , . . . , xn } (les xi sont réels et représentent la distance en kilomètres à partir du kilométre 0 de la route). Une antenne-relais couvre les habitations à une distance au plus égale à k kilomètres d’elle. Q 1. Concevez un algorithme qui calcule le nombre minimal d’antennes-relais à placer pour couvrir toutes les habitations et les place. Analysez la complexité et justifiez l’optimalité de la solution. Exercice 3 : Gardons la tête froide Un laboratoire doit stocker des produits au frais. Il dispose de réfrigérateurs mais veut minimiser le nombre de ceux qu’il met en marche. La température d’un réfrigétrateur peut être réglée à une température entre MIN et MAX (MIN et MAX sont indépendants du réfrigérateur). Chaque produit est muni d’une plage de température de stockage admissible, sous la forme d’un intervalle d’entiers fermé [tmin , tmax ] - avec M IN ≤ tmin ≤ tmax ≤ M AX. On suppose que le volume d’un seul réfrigérateur est suffisant pour contenir tous les produits. Q 1.Donnez un algorithme polynomial (glouton) qui détermine le nombre minimal de frigos nécessaires -et leur réglage, pour stocker tous les produits à la bonne température. Justifier. Exercice 4 : Le problème du sac à dos dans le cas fractionnable Donnée du problème: n entiers p1 , · · · , pn positifs. n entiers v1 , · · · , vn positifs. un entier c Interprétation: il y a un sac de capacité maximale c et n objets de poids pi et de valeur vi . On veut choisir les objets à emporter en respectant la capacité maximale et en optimisant la valeur. Q 1. Dans le cas fractionnable, on suppose qu’on peut fractionner les objets. Proposer un algorithme polynomial qui résout le problème dans ce cas. Montrer qu’il donne bien le remplissage optimal et étudier sa complexité. Q 2. Dans le cas non fractionnable, l’algorithme proposé ci-dessus marche-t-il? Pourquoi? Quelle méthode proposeriez-vous? Quelle serait sa complexité? Exercice 5 : Permanence Une association cherche à assurer une permanence lors d’une journée. Chaque adhérent donne l’intervalle de temps pour lequel il est disponible. On suppose que l’union des intervalles de temps correspond à la journée, i.e. qu’à tout moment un adhérent est disponible. Q 1. Proposer un algorithme qui permet d’assurer la permanence en mobilisant un minimum de personnes, le prouver et analyser sa complexité. Q 2. Comment assurer la permanence en minimisant le temps maximum de présence d’un adhérent sans chercher à optimiser le nombre de personnes mobilisées? Quelle est la complexité de l’algorithme? Exercice 6 : Les activités 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 (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. Q 3. Proposer un algorithme glouton qui donne une solution optimale, le prouver et donner sa complexité. Que dire du nombre de salles utilisées? Exercice 7 : Ordonnancement de tâches Le cadre général: Dans tous les cas, on a n tâches i = 1, . . . , n à exécuter sur une seule machine. Une tâche ne peut être fractionnée. Pour chaque tâche, on a une durée di (un entier positif). On suppose que toute exécution des taches commence à t = 0. Soit une exécution des tâches: à chaque tâche i, on peut donc associer ti la date à laquelle elle est terminée. On essaie d’ordonnancer les tâches de façon optimale selon différents critères. Q 1.Le retard maximal: pour chaque tâche, on a une date limite souhaitée fi (un entier positif); pour une exécution donnée, une tâche est en retard si ti > fi . on cherche à trouver une exécution de l’ensemble des tâches qui minimise maxi en retard (ti − fi ) i.e. le retard maximum. Exemple: Soit 4 tâches données par d1 = 2, d2 = 1, d3 = 4, d4 = 2, f1 = 2, f2 = 3, f3 = 5, f4 = 4. L’exécution dans l’ordre 1, 3, 2, 4, donnera un retard maximal de 5, l’exécution 1, 3, 4, 2 un retard maximal de 6 . Q 1.1. Dans l’exemple ci-dessus, donner une séquence où le retard maximum est minimal. Q 1.2. Proposer un algorithme glouton polynomial qui donne une séquence optimale. Evaluer sa complexité et prouver que votre algorithme produit bien une solution optimale. Q 2.Un autre critère d’optimalité: à chaque tâche est associée une pénalité pi strictement positive - mais pas de date limite-; on cherche à trouver une exécution de l’ensemble des tâches qui minimise Σni=1 pi ti . Q 2.1. Soit quatre tâches: d1 = 2, d2 = 1, d3 = 4, d4 = 2, p1 = 1, p2 = 1, p3 = 3, p4 = 2. L’exécution dans l’ordre 1, 2, 3, 4 donnera t1 = 2, t2 = 3, t3 = 7, t4 = 9 et conduira donc à une pénalité totale de 44. Quelle pénalité totale donnera l’exécution 1, 3, 4, 2? Q 2.2. Proposer un algorithme glouton polynomial qui donne une séquence optimale. Evaluer sa complexité et prouver que votre algorithme minimise bien la pénalité totale. Q 3. Dans cette partie, on suppose qu’à chaque tâche est associée une pénalité pi et que toutes les tâches ont le même deadline d. On cherche à trouver une exécution qui minimise la somme des pénalités des tâches P en retard, i.e. i/ti >d pi . Le professeur Heuristus propose d’ordonnancer les tâches selon les pi /di décroissants. Montrer que cet ordonnancement n’est pas toujours optimal. 2