Algorithmique TD4
L3 Informatique – ENS Cachan
Exercice 1 On souhaite impl´ementer une pile `a l’aide d’un tableau. Si on fixe la taille du
tableau a priori, on perd en efficacit´e pour deux raisons : lorsqu’il y a trop peu de donn´ees, beaucoup
de place est perdue ; lorsqu’il y a trop de donn´ees, on ne peut pas tout rentrer dans le tableau.
Pour r´esoudre ce probl`eme, on utilise des piles dynamiques dont la taille peut changer de telle
sorte qu’au moins la moiti´e du tableau est toujours rempli. L’op´eration qu’on veut impl´ementer
est l’empilement : elle consiste `a ins´erer l’´el´ement `a la premi`ere place libre lorsque le tableau n’est
pas plein ; sinon, on cr´ee un nouveau tableau de taille double du pr´ec´edent, on copie dedans tous
les ´el´ements du premier tableau puis on empile finalement l’´el´ement dedans.
1. Impl´ementer la fonction empiler(x).
2. Quelle est la complexit´e dans le pire cas de l’appel empiler(x) ?
3. Trouver la complexit´e amortie de la fonction empiler(x) lorsqu’on commence par une pile
vide.
4. On consid`ere une proedure diff´erente empiler2(x) qui consiste `a augmenter la taille du
tableau d’une constante kplutˆot que de la doubler, lorsque le tableau est plein. Quelle est
la complexit´e amortie de cette procdure ?
5. eme question dans le cas o`u on ´el`eve au carr´e la taille du tableau lorsqu’il est plein.
6. Supposons qu’on veuille ´egalement une op´eration de d´epilement depiler(), qui consiste `a
effacer le dernier ´el´ement du tableau. Si la suppression du dernier ´el´ement r´esulte en un
tableau `a moiti´e plein, on cr´ee un tableau de taille divis´ee par deux et on copie les ´el´ements
du tableau dedans. Quel est le coˆut amorti des op´erations empiler(x) et depiler().
Exercice 2 Files
Une file est une liste lin´eaire o`u les insertions se font toutes d’un mˆeme cˆot´e et les suppressions
toutes de l’autre cˆot´e ( `
A l’inverse des piles dans lesquelles insertions et suppressions sont faites du
mˆeme cˆot´e).
1. efinir le type abstrait file
2. Impl´ementer une file `a l’aide de deux piles et calculer le coˆut amorti d’une op´eration.
Exercice 3 R´ecursivit´e et Piles
1. ´
Ecrire une fonction r´ecursive pour ´evaluer une expression pr´efixe.
/+ 8 ×3 4 5 3
2. ´
Ecrire une version it´erative de cette fonction (utiliser les piles).
3. ´
Ecrire une version it´erative du tri rapide (utiliser les piles) telle que la taille maximale de la
pile est inf´erieur `a log n
1
Exercice 4 Hauteur moyenne d’un ABR
1. Calculer la hauteur moyenne d’un ABR construit al´eatoirement.
Univers : Permutations de taille navec distribution uniforme.
Hauteur : Pour une permutation σ, hauteur de l’arbre obtenu par insertions
successives de σ(1), ..., σ(n).
2. Calculer le coˆut moyen d’une recherche fructueuse et infructueuse dans un ABR construit
al´eatoirement.
Exercice 5 Arbres AVL (Extrait Partiel 2006)
Un AVL est un arbre binaire de recherche (ABR) tel que pour chaque nœud de l’arbre, la
diff´erence de hauteur entre le sous-arbre gauche et le sous-arbre droit est d’au plus 1.
1. Soit nle nombre de nœuds et hla hauteur d’un AVL (la hauteur d’un arbre r´eduit `a sa
racine est 1). Montrer que Fh+2 1n2h1 o`u Fkest le k-i`eme nombre de Fibonacci
avec F0= 0, F1= 1 et Fk+2 =Fk+1 +Fkpour k0. Montrer que ces bornes sont atteintes.
Montrer que pour k0 on a Fk+2 φko`u φ= (1 + 5)/2.
En d´eduire que log2(n+ 1) hlogφ(n+ 1) et que la recherche dans un AVL se fait au
pire en temps O(log(n)).
Pour les algorithmes, un nœud xd’un AVL sera repr´esent´e par une structure comportant
une cl´e, not´ee x·cle d’un type totalement ordonn´e (par exemple de type entier) ;
un sous-arbre gauche, not´e x·get un sous-arbre droit, not´e x·d;
la hauteur de l’arbre, not´ee x·h.
L’arbre vide est not´e NULL. On notera h(x) la hauteur d’un arbre xavec h(NULL) = 0. On
notera n(x) le nombre de nœuds d’un arbre x.
2. Le but de cette question est d’´ecrire une proedure ´equilibrer(x) pour transformer en AVL
en temps constant un ABR de racine xen supposant que ses deux sous-arbres sont des AVL
et que la diff´erence de hauteur entre les deux sous-arbres est d’au plus 2.
Proposer un r´e´equilibrage dans le cas o`u h(a·g)h(a·d) = 2. On pourra distinguer les cas
h(a·g·g)h(a·g·d) et h(a·g·g)< h(a·g·d). Illustrer les transformations sur des dessins.
´
Ecrire la proc´edure ´equilibrer(x).
3. ´
Ecrire un algorithme pour ins´erer une cl´e cdans un AVL xen temps au pire O(1 + h(x)). Si
x0est l’arbre obtenu, comparer h(x0) et h(x). Justifier la correction de l’algorithme (on ne
demande pas une preuve de programme). Montrer que cet algorithme engendre au plus un
r´e´equilibrage.
4. ´
Ecrire un algorithme pour supprimer une cl´e cdans un AVL xen temps au pire O(1 +
h(x)). Justifier la correction de l’algorithme (on ne demande pas une preuve de programme).
Combien de r´e´equilibrages peuvent ˆetre n´ecessaires ?
5. ´
Ecrire un algorithme qui r´ealise la fusion de deux AVL xet yet d’une cl´e cen supposant que
toutes les cl´es de xsont strictement inf´erieures `a cet que toutes les cl´es de ysont strictement
sup´erieures `a c. Cet algorithme devra fonctionner en temps O(1 + |h(x)h(y)|). Justifier.
6. ´
Ecrire un algorithme qui r´ealise la scission d’un AVL xen deux AVL yet zcontenant
respectivement les cl´es de xinf´erieures ou ´egales `a cpour yet strictement sup´erieures `a c
pour z. Cet algorithme devra fonctionner en temps O(1 + |h(x)|). Justifier.
2
1 / 2 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !