Devoir 3

publicité
INF7440 — Conception et analyse des algorithmes
Automne 2015
Devoir 3
(à remettre au plus tard le 27 novembre, à 16h00)
(dans la chute du département d’informatique, située au PK-4150)
Le devoir doit être rédigé individuellement et à l’ordinateur. Vous devez justifier chacune de vos réponses. La démarche ainsi que l’utilisation correcte de la notation mathématique
seront évaluées. Tout retard entraı̂nera une pénalité de 20% par jour ouvrable.
Question
1
2
3
Total
Sur
40
70
40
150
Note
1. (40 points) Dans ce problème, nous nous intéressons au nombre minimal de processeurs
nécessaires pour traiter un ensemble de n tâches, où n est un nombre naturel. On
suppose qu’à tout moment, un processeur ne peut jamais traiter plus d’une tâche.
Une tâche est représentée par un couple de réels (d, f ), où d indique le temps auquel
débute la tâche et f le temps auquel elle se termine. Bien entendu, d ≤ f . L’ensemble
de toutes les tâches est dénoté par T . On dit que deux tâches t = (d, f ) et t0 = (d0 , f 0 )
se chevauchent s’il existe un nombre réel x tel que
d<x<f
et d0 < x < f 0 .
Soit p le nombre maximal de tâches dans T qui se chevauchent simultanément, c’està-dire qu’il existe des tâches ti = (di , fi ), pour i = 1, 2, . . . , p et un nombre x tels que
di < x < fi pour i = 1, 2, . . . , p. Nous disons alors que p est la profondeur de l’ensemble
de tâches T .
Par exemple, si on a les tâches t1 = (0, 3), t2 = (1, 5), t3 = (2, 4) et t4 = (4, 6), alors
la profondeur de l’ensemble de ces quatre tâches est 3, puisque les tâches t1 , t2 et t3
se chevauchent en x = 2.5 et il n’existe aucun nombre pour lequel les quatre tâches se
chevauchent.
(a) (20 points) Donnez un algorithme glouton simple qui, étant donnés un ensemble
de tâches T et sa profondeur p, retourne une association (un mapping) indiquant,
pour chaque tâche i = 1, 2, . . . , n, le processeur parmi 1, 2, . . . , p qui traitera la
tâche. Indice : Il suffit d’abord de trier les tâches en ordre croissant de début de
traitement. Ensuite, en parcourant les tâches une par une, on assigne n’importe
quel processeur disponible pour traiter cette tâche.
(b) (20 points) Démontrez que l’algorithme donné en (a) fonctionne toujours. Plus
précisément, montrez qu’il existe toujours un processeur disponible à chaque fois
qu’on l’assigne dans l’algorithme. Indice : Procédez par l’absurde, c’est-à-dire
supposez qu’à un moment donné, aucun processeur n’est disponible, et montrez
qu’il y a alors une contradiction.
1/3
INF7440 — Conception et analyse des algorithmes
Automne 2015
2. (70 points) Soit w une chaı̂ne de caractères. L’image miroir de w, notée w,
e est la chaı̂ne
g = ogla.
de caractères obtenue de w en inversant l’ordre de ses lettres. Par exemple, algo
On dit que w est un palindrome si w = w.
e
(a) (20 points) En utilisant la programmation dynamique, décrivez un algorithme qui,
étant donné une chaı̂ne w de longueur n, retourne la longueur d’un plus long palindrome apparaissant dans w. Par exemple, si w = frénésie, alors il retourne 3, qui
est la longueur du palindrome éné. Votre algorithme doit avoir une complexité
O(n2 ). Indice : Pour 1 ≤ i ≤ j ≤ n, soit
(
vrai si w[i, j] est un palindrome;
P (i, j) =
faux sinon,
où w[i, j] est la sous-chaı̂ne de w commençant à l’indice i et terminant à l’indice j
(inclusivement). Vous devez justifier que votre algorithme est correct et expliquer
pourquoi sa complexité est O(n2 ).
(b) (20 points) Étendez l’algorithme présenté en (a) pour qu’il énumère tous les palindromes maximaux. Il n’est pas nécessaire de faire une analyse de complexité dans
ce cas, mais l’efficacité de votre algorithme sera évaluée.
(c) (30 points) Donnez une implémentation des algorithmes présentés en (a) et (b)
dans votre langage favori parmi C, C++, Java et Python. N’oubliez pas d’ajouter
des exemples d’entrées et de sorties qui montrent que votre algorithme fonctionne.
3. Soit G = (V, E) un graphe non orienté et U ⊆ V un sous-ensemble de sommets. On
dit que U est un transversal de cycles de G si tout cycle c de G passe par au moins un
sommets de U . En d’autres termes, si on supprime les sommets U du graphe G, alors
le résultat est un graphe acyclique (c’est-à-dire sans cycle). On s’intéresse dans cette
question au problème de décider s’il existe un transversal de cycles de taille k, où k est
un entier positif.
(a) (10 points) Pour chacun des deux graphes suivants, donnez un transversal de cycles
de taille minimale. Justifiez brièvement.
a1
a1
b1
a2
a0
b2
a2
b5
b3
a3
c1
b4
b0
b4
a3
2/3
b1
c0
c2
c4
b7
a0
b0
c3
b6
a4
b2
b3
b9
b8
a4
INF7440 — Conception et analyse des algorithmes
Automne 2015
(b) (30 points) Étant donnés un graphe non orienté G et un entier positif k, démontrez
que le problème de décider s’il existe un transversal de cycles de cardinalité k dans
G est un problème NP-complet. Indice : Considérez une réduction du problème de
décider s’il existe une couverture des arêtes par les sommets de taille k d’un graphe
G0 au problème de décider s’il existe un transversal de cycles de taille k d’un graphe
G. En particulier, les arêtes pour le problème de la couverture peuvent être en
correspondance avec des cycles de longueur 3 pour le problème du transversal de
cycles.
3/3
Téléchargement