Problème — Optimisation du temps de salle
Application directe du cours · niveau 2 · NSI (terminale), chapitre 8 — Les algorithmes gloutons
Énoncé
Problème — Optimisation du temps de salle.
Une salle de conférence reçoit des demandes de réservation, chacune avec une heure de début et de fin. On veut accepter le maximum de réunions sans chevauchement, puis afficher le planning retenu et le taux d'occupation (durée totale occupée sur l'amplitude totale).
Corrigé
On applique le glouton de sélection d'activités (tri par fin), puis on calcule les durées.
def planning_salle(reunions):
reunions = sorted(reunions, key=lambda r: r[1])
retenues = []
fin_courante = float("-inf")
for debut, fin in reunions:
if debut >= fin_courante:
retenues.append((debut, fin))
fin_courante = fin
if not retenues:
return [], 0.0
duree_occupee = sum(fin - debut for debut, fin in retenues)
amplitude = retenues[-1][1] - retenues[0][0]
taux = duree_occupee / amplitude
return retenues, taux
demandes = [(9, 11), (10, 12), (11, 13), (13, 14), (12, 15)]
planning, taux = planning_salle(demandes)
print(planning) # [(9, 11), (11, 13), (13, 14)]
print(round(taux, 2)) # 1.0
Le glouton sélectionne , , : trois réunions enchaînées sans temps mort, d'où un taux d'occupation de . La complexité reste .
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.