MI2E - 2EANNÉE
ALGORITHMIQUE GÉNÉRALE
Vincent Mousseau
EXAMEN FINAL
2 Février 2006 - 2 heures
Aucun document autorisé
Exercice 1 :
On s’intéresse à la gestion informatique des réservations sur l’année d’une salle de conférences.
La salle ne peut être réservée que par journées complètes. Ainsi, une réservation peut être assimilée à
un intervalle de jours I= [u(I), v(I)], où u(I)est le jour d’arrivée des participants et v(I)le dernier
jour de la conférence.
Au cours de l’année, les clients potentiels envoient au gestionnaire de la salle des demandes de
réservations sous la forme d’un intervalle. Celui-ci doit vérifier qu’aucune demande antérieure n’in-
tersecte cette demande. Dans ce cas, il peut accepter cette réservation. Il arrive, enfin, que des clients
annulent une réservation.
Il existe donc trois opérations de base à réaliser : Intersecte(I) est une fonction qui renvoie
Vrai lorsqu’il existe une réservation antérieure qui intersecte I.Ajouter(I) ajoute un intervalle
disjoint à l’ensemble des réservations. Supprimer(I) supprime une réservation.
a) On suppose que les réservations acceptées sont gérées à l’aide d’une liste simplement chaînée.
Donner les déclarations de ce type LISTINTERVAL.Indiquer la complexité des trois opérations
de base, lorsque la liste est quelconque, puis lorsque la liste est triée selon les u(I)croissant.
Justifier votre réponse.
b) On suppose maintenant que les réservations sont stockées dans un arbre binaire de recherche
et que la clé d’un intervalle Iest u(I). Les sommets comporteront donc, en plus des champs
habituels fgauche,fdroit et pere, les champs u,vreprésentant les bornes de l’intervalle
associé au sommet. On notera ABRI le type correspondant. Donnez les déclarations de ce type.
c) Représentez graphiquement l’arbre binaire de recherche (de type ABRI) correspondant aux
réservations successives (dans l’ordre) [37,39], [3,7], [100,120], [50,68], [10,30], [1,2] et [8,9].
d) Ecrire l’algorithme Intersecte(I :intervalle, A :ABRI)et analyser sa complexité.
Exercice 2 :
On considère un type LISTENT représentant des listes simplement chaînées d’entiers. Dans tout
l’exercice, vous utiliserez, sans les re-écrire, les primitives sur les listes. Toutefois, pour chacune des
primitives utilisées, vous en rappellerez la définition précise.
a) Ecrire deux algorithmes, l’un récursif, l’autre itératif, permettant de calculer la somme des
éléments de la liste.
b) Ecrire l’algorithme itératif permettant de supprimer toutes les occurrences de l’entier nde la
liste L.
c) Ecrire l’algorithme itératif permettant de supprimer la première occurrence de l’entier nde la
liste L.
d) En supposant que les listes L1 et L2 ne peuvent pas comporter de doublons, écrire un algo-
rithme récursif permettant de déterminer la liste L3 intersection des listes L1 et L2.
e) Analyser la complexité de l’algorithme de la question d) en fonction de la complexité des
primitives.