20062007 Algorithmique Avancée et Complexité Master 1 d'Informatique S.Tison UFR IEEA Fiche TD: Algorithmes gloutons Exercice 1 : Décrire un algorithme qui, étant donné un ensemble {x1 , . . . , xn } de points sur la droite réelle, détermine le plus petit ensemble d'intervalles fermés de longueur 1 qui contienne tous les points donnés. Montrer que votre algorithme est correct. Exercice 2 : Les stations-services Le professeur Midas conduit sa voiture de Lille à Pékin. Il part avec son réservoir d'essence plein. On suppose sa consommation constante. Il a une carte avec les stations et les distances les séparant. Il veut minimiser le nombre d'arrêts aux stations: quelle stratégie gloutonne proposez-vous? Il connait maintenant le prix du litre dans chaque station; on suppose que sa consommation est constante et connue. Quelle stratégie proposez-vous pour minimiser le coût total? Exercice 3 : Le problème du sac à dos dans le cas fractionnable Donnée du problème: p1 , · · · , p n n entiers v1 , · · · , vn un entier c n entiers positifs. positifs. Interprétation: il y a un sac de capacité maximale coûts) pi et de valeur c et n objets (ou projets ou..) de poids (ou volumes..ou 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? Exercice 4 : Les gardiens de musée Considérez une galerie de peinture rectiligne. Les tableaux sont placés aux positions réels). {x1 , . . . , xn } (les xi sont Un gardien peut surveiller des tableaux se trouvent à une distance au plus égale à 1 de lui-même à gauche comme à droite. Concenvez et écrivez un algorithme qui calcule le nombre minimal de gardiens requis pour surveiller tous les tableaux et les place. Analysez la complexité et justiez l'optimalité de la solution. Exercice 5 : 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 n. Le problème est d'aecter 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. n) de l'activité i Sortie Une aectation complète et correcte qui minimise le nombre de salles utilisées i.e.: af f : [1..n] → [1..p], p ≤ n , a(i) no de salle aectée à l'activité 1 i qui vérie la contrainte: af f (i) = af f (j) card(af f ([1..n])). si et qui minimise et i 6= j , alors ]di , fi [∩]dj , fj [= ∅ Q 1. Soient les activités données par les "heures" de début et n suivantes (1,5), (9,15), (4,8), (6,16). Proposer une aectation optimale. Q 2. Une première proposition consiste à remplir les salles une par une en utilisant le critère glouton par date de n croissante. pensez-vous que cette méthode forunit une solution optimale? Justier. Q 3. Proposer un algorithme glouton qui donne une solution optimale ... et le prouver. Que dire du nombre de salles utilisées? Exercice 6 : Stockage On a ei n enregistrements de longueur variable stockés dans un chier à accès séquentiel. Chaque enregistrement est de longueur si . Après chaque accès, on suppose que la fenêtre de lecture est repositionnée au début du ième chier. On suppose que le temps d'accès au des i enregistrement est proportionnel à la somme des longueurs premiers. e1 , e2 , si ils sont stockés dans l'ordre (e2 , e1 ), c ∗ (s2 + s1 ), c étant une constante. Par exemple pour deux enregistrements l'enregistrement e2 est c ∗ s2 , pour e1 , c'est le temps d'accès à Dans un premier temps, on suppose que les demandes d'accés à chaque enregistrement sont équiprobables. Donc, si les enregistrements sont stockés dans l'ordre eσ(1) , . . . , eσ(n) M = c ∗ 1/n ∗ j n X X ( le temps moyen d'accès est sσ(k) ) j=1 k=1 Par exemple pour deux enregistrements, si les enregistrements sont stockés dans l'ordre moyen est donc 1/2 ∗ c ∗ (s2 + (s2 + s1 )), soit (e2 , e1 ), le temps c ∗ (s2 + s1 /2). Le problème est donc déni par: Entrée: n le nombre d'enregistrements. s1 , s2 , .., sn les longueurs des enregistrements. Sortie: L'ordre de stockage optimal, i.e. une permutation Pn σ(1), .., σ(n) telle que M = c∗1/n∗ Pj j=1 ( k=1 sσ(k) ) ( on a Pn soit minimal. Q 1. Soit la donnée suivante : n = 3, s1 = 12; s2 = 26; s3 = 19. Donner la meilleure façon de stocker les enregistrements. Q 2. Proposer une méthode gloutonne qui donnera toujours une solution optimale. Justier! On suppose maintenant que pour chaque enregistrement i, on connait la fréquence d'accès, 1). fi i fi = Le temps moyen d'accès sera donc : M =c∗ n X (fσ(j) ∗ j=1 j X sσ(k) ) k=1 Par exemple pour deux enregistrements, si les enregistrements sont stockés dans l'ordre moyen est donc c ∗ (f2 ∗ s2 + f1 ∗ (s2 + s1 )), soit (e2 , e1 ), le temps c(s2 + f1 ∗ s1 ). Q 3. Soit l'heuristique consistant à ordonner les enregistrements selon les si croissants. Donner un exemple qui montre qu'elle ne donne pas toujours la solution optimale. Q 4. Soit l'heuristique consistant à ordonner les enregistrements selon les fi décroissants. Donner un exemple qui montre qu'elle ne donne pas toujours la solution optimale. Q 5. Proposer un algorithme glouton qui donne toujours la solution optimale. Justier. Exercice 7 : Réservation de trains Soient p trains numérotés dans l'ordre de leur heure de départ et le nombre de places libres, dem1 , ..., demn plac1 , ..., placp . n clients. Pour chaque train, on connaît et pour chaque client le numéro du train qu'il souhaite prendre, (on suppose que chaque client veut une et une seule place). On suppose que si le train demandé est complet, le client accepte de prendre un train après celui qu'il avait choisi. Le problème est d'aecter une place à chaque client dans un train, soit formellement: 2 Entrée: n, p le nombre de clients, le nombre de trains plac1 , ..., placp le nombre de places libres par train dem1 , ..., demn les demandes des clients (une demande: un numéro de train) Sortie: Une aectation i.e. af f : [1..n] → [1..p] telle que af f (i) >= demi 1 ≤ i ≤ n le client i ne prend pas un train avant celui qu'il avait choisi Et Card{i/af f (i) = j} <= placj 1 ≤ j ≤ p Q 1. Soient p = 3 , n = 6, il n'y a pas de surbooking! les demandes 2, 1, 3, 2, 2, 3 avec deux places de disponibles dans chacun des trois trains. Y-a-t-il une aectation possible? Q 2. Proposer un algorithme qui vérie si il existe une aectation possible. Q 3. Bien sûr toutes les aectations ne satisfont pas les clients de la même façon! On impose donc d'abord la condition suivante (Cond) si demi < demj , alors af fi <= af fj : Si un client a demandé un train qui part avant celui demandé par un autre, il ne peut partir après! p = 3, n = 6 et les demandes 2, 1, 1, 2, 1, 1 avec deux places libres dans chaque train, si af f (1) = 2, af f (2) = 1, af f (3) = 1, af f (4) = 2, af f (5) = 3, af f (6) = 3, la condition n'est pas respectée: le client 4 part avant le client 5 alors qu'il avait demandé à partir après! Q 3.1. Soient p = 3, n = 6 et les demandes 2, 2, 1, 3, 1, 1 avec deux places de disponibles dans chacun des trois Par exemple, pour on a trains. Proposer une aectation qui respecte la condition (Cond). Q 3.2. Montrer que si il existe une aectation possible, il existe une aectation qui vérie la condition (Cond). Q 4. La condition (Cond) n'est pas susante pour exprimer le contentement des passagers: par exemple, si le dernier train contient susamment de places, on pourrait mettre tous les clients dans ce dernier train! On ajoute donc une mesure du mécontentement: on mesure le degré de mécontentement d'un client par af f (i) − dem(i), qui est donc nul si il a eu le train désiré, >0 sinon. Le degré total de mécontentement est simplement la somme des degrés de mécontentement des clients, i.e. Pi=n i=1 (af f (i) − demi ). Par exemple, pour p = 3, n = 6 et les demandes 2, 1, 1, 2, 1, 1 avec trois places libres dans chaque train, si on af f (1) = 3, af f (2) = 1, af f (3) = 1, af f (4) = 3, af f (5) = 2, af f (6) = 1, le degré total de mécontentement est (3 − 2) + (1 − 1) + (1 − 1) + (2 − 1) + (2 − 1) + (1 − 1), soit 3. a Q 4.1. Pour l'exemple précédent, donner une aectation qui vérie la condition (Cond) et qui minimise le mécontentement. Q 4.2. Proposer un algorithme polynômial (de type glouton) qui permet de réaliser une aectation qui respecte la condition (Cond) et minimise le degré de mécontentement. Justier que votre algorithme produit bien une solution optimale et donner l'ordre de grandeur de la complexité de votre algorithme. Exercice 8 : Ordonnancement de tâches Le cadre général: Dans tous les cas, on a fractionnée. n tâches i = 1, . . . , n Pour chaque tâche, on a une durée taches commence à t = 0. à exécuter sur une seule machine. di (un entier positif ). Une tâche ne peut être On suppose que toute exécution des 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 diérents critères. Q 1.Le retard maximal Dans cette partie, pour chaque tâche, on a une date limite souhaitée donnée, une tâche est en retard si minimise ti > fi . fi (un entier positif ); pour une exécution on cherche à trouver une exécution de l'ensemble des tâches qui − fi ) i.e. le retard maximum. 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 1, 3, 2, 4, donnera un retard maximal de 5, l'exécution 1, 3, 4, 2 un retard maximal de 6 . maxi en retard (ti Exemple: Soit dans l'ordre Q 1.1. Dans l'exemple ci-dessus, donner une séquence où le retard maximum est minimal. 3 Q 1.2. Proposer un algorithme glouton polynômial 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é Dans cette partie, à 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. Reprenons un exemple avec quatre tâches: de 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 44. Quelle pénalité totale donnera l'exécution 1, 3, 4, 2? Q 2.2. Proposer un algorithme glouton polynômial 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 sont associées une pénalité d. P i/ti >d pi . ont le même deadline en retard, i.e. pi et que toutes les tâches On cherche à trouver une exécution qui minimise la somme des pénalités des tâches Le professeur Heuristus propose d'ordonnancer les tâches selon les ordonnancement n'est pas toujours optimal. 4 pi /di décroissants. Montrer que cet