Université Jean Monnet Licence d`Informatique

publicité
Université Jean Monnet
Licence d’Informatique
Analyse des algorithmes
Contrôle Continu - Décembre 2013
Durée : 2 heures
Tous documents manuscrits autorisés (sauf la copie du voisin bien sûr)
Barême (indicatif et provisoire)
Question
sur
Difficulté
I
6 pts
Facile
II
4 pts
Facile
III.1
5 pts
Dur
III.2
5 pts
Moyen
CONSEILS :
– lire tout l’énoncé avant de commencer ;
– une preuve d’arrêt et de correction de chacun des algorithmes demandés, même sommaire
pourvu qu’elle soit correcte, serait la bienvenue.
I (Chose promise, chose due) - On considère l’ordre d’insertion suivant dans un B-arbre
d’ordre 2 (c’est-à-dire un 2, 3, 4-arbre) :
m v z u n w x j f a r b p k t c g l h i y d o q s e
1 . Donner le B-arbre final si l’insertion se fait avec éclatement à la remontée.
2 . Donner le B-arbre final si l’insertion se fait avec éclatement à la descente.
3 . On considère le B-arbre suivant :
|________________________________________hs_____________________________________|
|_____________be__________|_____________lp__________|______________w____________|
|____a__|____cd_|_____fg__|____ijk|____mno|_____qr__|_______tuv___|_______xyz___|
On enlève successivement h, g, f puis a. Donner le B-arbre final.
II (Chemins de traverse) - Un chemin entre deux sommets x et y d’un arbre binaire A est une
liste récursive de sommets de A, dont les extrémités sont x et y, sans répétition de sommets,
et dans laquelle deux sommets adjacents sont père et fils dans A.
Soit chemin(A,x) un algorithme qui donne le chemin reliant la racine d’un arbre binaire A
à l’un de ses sommets x, sous la forme d’une liste récursive de sommets dont le premier est la
racine de A et le dernier est x. Écrire un algorithme utilisant chemin qui, prenant en entrée un
arbre binaire A et deux sommets x et y de A, renvoie le chemin (sous forme de liste récursive de
sommets) dans A reliant x à y. La liste retournée par votre algorithme peut commencer par x et
se terminer par y ou l’inverse.
NB : on ne demande pas d’écrire chemin(A,x), et on considèrera que sa complexité est linéaire
en le nombre de sommets de A.
III (The postman always rings twice) - On se propose d’écrire deux algorithmes construisant
l’arbre correspondant à une expression arithmétique ; pour le premier, l’expression est donnée sous
forme préfixe, pour l’autre sous forme postfixe. L’expression est dans une liste récursive, et on
supposera que l’on dispose de la fonction opérande?(x) qui renvoie vrai si et seulement si x est
une opérande.
Par exemple, la liste [+,*,x,+,x,2,*,-,x,4,x] devrait donner l’arbre
+
*
*
x
-
+
x
2
x
x
4
de même que la liste [x,x,2,+,*,x,4,-,x,*,+].
1 . Écrire l’algorithme prefixe2arb qui prend en entrée une liste représentant une expression arithmétique sous forme préfixe, et qui renvoie l’arbre correspondant.
(Indication : il pourra être utile de renvoyer quelque chose en plus de l’arbre binaire correspondant à l’expression.)
2 . Écrire l’algorithme postfixe2arb qui prend en entrée une liste représentant une expression arithmétique sous forme postfixe, et qui renvoie l’arbre correspondant.
(Indication : exceptionnellement, il pourra être utile d’écrire un algorithme itératif.)
NB : pour les deux algorithmes, on supposera que l’expression contenue dans la liste récursive est
correcte.
Téléchargement