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.