Solution de l`exercice 7. Un algorithme vorace pour

publicité
Solution de l’exercice 7. Un algorithme vorace pour résoudre ce problème consiste à affecter les
activités dans l’ordre croissant de leur temps de fin, en s’assurant à chaque fois que l’activité
choisie est compatible avec l’activité en cours. Cela permettra d’avoir n maximum d’activités.
En renommant les activités de telle manière que nous ayons la relation suivante des temps de fin
satisfaite :
f 1 ≤ f 2 ≤ ... ≤ f n
L’algorithme vorace est alors comme suit:
A = {1};
j = 1;
for(i = 2; i<=n; i++)
do if si >= fj {
A = A + {i};
j = i;
}
return A
Exemple:
i
f
s i fi
Théorème L’algorithme ci-dessus génère une solution optimale .
Preuve Soit S = {1, 2, . . . , n} l’ensemble des activités à ordonnancer. Comme bous supposons
que ces activités sont dans l’ordre croissant des temps de fin, alors l’activité 1 est celle qui a le
plus petit temps de fin. Nous allons montrer qu’il existe une solution optimal qui commence avec
un choix glouton c’est-à-dire avec l’activité 1.
Soit A ⊆ S une solution optimale à notre problème, et trions les activités de A dans l’ordre
croissant des temps de fin. De plus, supposons que la première activité de A est l’activité k.
Maintenant, si k = 1, alors A commence avec un choix glouton. Si, par contre, k ≠1, nous devons
montrer qu’il existe une autre solution optimale B à S qui, elle, commence avec un choix glouton,
c’est-à-dire avec l’activité 1.
Soit donc la solution B = A - {k}+ {1}. Comme f1 ≤ f k , les activités dans B sont disjointes. Et
comme B a le même nombre d’activités que A, elle est aussi optimale. Par conséquent, B est une
solution optimale pour S contenant le choix glouton de l’activité 1. Autrement dit, nous venons de
montrer que qu’il existe une solution optimale qui commence avec un choix glouton.
Par ailleurs, une fois ce choix glouton effectué, le problème se réduit maintenant à trouver une
solution optimale parmi les activités de S qui sont compatibles avec l’activité 1. C’est-à-dire, si A
est une solution optimale pour le problème de départ S, alors A' = A - {1} est une solution
optimale pour le problème S’ = {i ∈ S: si ≥ f1 }. Car si on pouvait trouver une solution B' à S'
avec plus d’activités que A', alors l’ajout de l’activité 1 à B' va engendrer une solution B à S qui
aura plus d’activités que A, en contradiction avec l’optimalité de A. Par conséquent, après chaque
choix glouton de fait, nous sommes laissés avec le même problème d’optimisation que celui de
départ. Par induction sur le nombre d’activités, chaque choix glouton effectué à chaque itération
fait partie de la solution optimale. Autrement dit, l’algorithme ci-dessus est optimal.
Téléchargement