Académique Documents
Professionnel Documents
Culture Documents
Sujet 2020
Sujet 2020
Sujet 2020
Algorithmique 2 - Session 1
- le 26 mail 2020, Durée : 1h20min
Rappel Important. Pour donner la complexité en temps d’une fonction, il faut d’abord
indiquer le paramètre. Ensuite, il faut justifier en expliquant comment à partir des opérations du
pseudo-code on peut aboutir à la complexité donnée.
p. 1/2
Exercice 2 TDA Collection (16 pts)
Le TDA Collection permet de stocker des données et admet les opérations suivantes :
— creerCollection () : permet de créer une collection vide ;
— ajouter (C,e) : ajoute l’élément e dans la collection C ;
— premier (C) : permet d’initier un parcours des éléments de C en renvoyant un élément de C ;
— suivant (C,e) : prend une collection C, un élément e visité et renvoie un nouvel élément non
encore visité ;
— finVisite (C) : retourne true si et seulement si on a visité tous les éléments de C, sinon false.
1. En utilisant le TDA Liste, expliquez comment implémenter le TDA Collection. Vous donnerez
le pseudo-code pour chacune des opérations du TDA Collection. Les fonctions doivent avoir
la meilleure complexité possible. (3 pts)
2. Peut-on avoir une complexité en temps O(1) pour chacune des opérations avec l’implémen-
tation précédente ? Justifiez vos réponses. (2 pts)
3. Peut-on avoir une complexité en temps O(1) pour chacune des opérations du TDA Collection
si on utilise les arbres binaires implémentées avec le tableau PERE (vu en TD) ? Sinon, quelle
est la meilleure complexité en temps que l’on peut espérer pour chacune des opérations ?
Justifiez vos réponses. (3 pts)
On veut maintenant écrire les deux fonctions suivantes manipulant le TDA Collection.
a.1 associer (C, f) : Si la collection C est composée des éléments {e1 , . . . , en }, renvoie une col-
lection C’ composée des éléments {f (e1 ), . . . , f (en )} ;
a.2 filtrer (C,f) : retourne une collection composée des éléments de la collection C et pour
lesquelles la fonction f renvoie true ; f prend un élément et retourne un booléen.
b.1 plier_gauche (C,f,a) : si la collection C est composée des éléments {e1 , . . . , en }, renvoie
f (. . . (f (f (a, e1 ), e2 ) . . .), en ) ;
b.2 plier_droite (C,f,a) : si la collection C est composée des éléments {e1 , . . . , en }, renvoie
f (e1 , f (e2 , (f (. . . (f (en , a)) . . .)))).
On suppose que dans notre pseudo-code on peut donner des fonctions comme paramètres
à d’autres fonctions, comme les pointeurs de fonctions en C, mais ici, on va simplifier la syn-
taxe. Pour dire qu’un paramètre est une fonction, on utilise la syntaxe suivante (fun id-fonction :
T1 , T2 , . . . , Tp , T) où
— id-function est l’identifiant du paramètre,
— T1 , . . . , Tp sont les types des paramètres attendu par la fonction id-function, et T le type de
la valeur de retour.
Pour utiliser le paramètre id-function dans le pseudo-code, on utilise son identifiant en faisant
un appel classique de fonction. Par exemple, la fonction f ci-dessous prend comme paramètre une
fonction que l’on a nommé g et cette dernière a deux paramètres entiers et retourne un float. Notre
fonction f ici ne fait que retourner la valeur retournée par l’appel à la fonction g.
Function f (int x, int y, (fun g:int,int,float)) {
return g(x+1,y*2-1)
}
4. Ecrivez le pseudo-code pour les fonctions a.1/2 et b.1/2 avec la meilleure complexité en
temps. Attention, vous n’avez accés qu’aux fonctions du TDA Collection et on ne suppose
aucune implémentation spécifique du TDA. (4 pts)
5. A partir des réponses précédentes, faites un tableau comparatif de la complexité en temps de
chacune des deux fonctions a.1/2 et b.1/2 avec les deux implémentations du TDA Collection
discutées précédemment. Justifiez vos réponses. (4 pts)
p. 2/2