ACT 2014–2015 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. 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. 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 : Rendez la monnaie Rappel du problème: On dispose des pièces de monnaie correspondant aux valeurs {a1 , . . . , an }, avec a1 < a2 . . . < an . Pour chaque valeur le nombre de pièces est non borné. Etant donnée une quantité c entière, on veut trouver une façon de "rendre" la somme c avec un nombre de pièces minimum. L’algorithme glouton consiste à utiliser d’abord le plus grand nombre possible de pièces an , puis le plus grand nombre possible de pièces an−1 si nécessaire, etc. On suppose que dans trois pays, n = 5 et les valeurs des pièces sont les suivantes: QUARTERLAND: a1 = 1, a2 = 5, a3 = 10, a4 = 20, a5 = 25. DISLAND: a1 = 1, a2 = 5, a3 = 10, a4 = 20, a5 = 40. Q 1. Quels sont le(s) pays dans le(s)quel(s) l’algorithme glouton donne une solution optimale? Justifier! Q 2. Supposons que a1 = 1, a2 = d, a3 = d2 , . . . , ai = di−1 , . . . , an = dn−1 , pour un certain entier d. Montrer que l’algorithme glouton qui consiste à utiliser le plus grand nombre de pièces de an , puis de an−1 ainsi de suite jusqu’à a1 donne toujours une solution optimale. 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 (ou projets ou..) de poids (ou volumes..ou coûts) pi et de valeur vi . On veut choisir les objets à emporter en respectant la capacité maximale et en optimisant la valeur. Pb (Optimisation): trouver la valeur maximale d’un chargement. Dans le cas fractionnable, on suppose qu’on peut fractionner les objets. Q 1. Proposer un algorithme polynomial qui résout le pb dans ce cas. Montrer qu’il donne bien le remplissage optimal et étudier sa complexité. Q 2. Le cas non fractionnable (0-1) 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