Structures de donn´ees avanc´ees
Master d’Informatique — UPMC
STL - M1.
UE Algorithmique avanc´ee
Semaines 1 `a 3 Ann´ee 2006 — 2007
1 Ordres de grandeur
1. Rappeler la d´efinition de O, Θ, Ω et o.
2. Montrer que :
si fO(g) alors O(f)O(g) et O(max(f, g)) = O(g)
O(f+g) = O(max(f, g)).
3. Ranger dans l’ordre croissant : O(nlog n), O(2n), O(log n), O(1), O(n2), O(n3) et O(n).
4. Montrer que : Pn
p=1 pkΘ(nk+1).
2 Coˆut amorti
Exercice 1 On consid`ere les deux op´erations fondamentales sur les piles : Empiler(S,x) et
Depiler(S), auxquelles on ajoute l’op´eration MultiDepiler(S,k). L’op´eration MultiDepiler(S,k)
retire les kpremiers objets du sommet de la pile si la pile contient au moins kobjets et vide la
pile sinon.
1. Calculer le coˆut amorti d’une op´eration en utilisant la m´ethode par agr´egat.
2. eme question en utilisant la m´ethode du potentiel.
Exercice 2 Aux trois op´erations : Empiler(S,x),Depiler(S) et MultiDepiler(S,k), d´efinies
sur les piles, on ajoute l’op´eration MultiEmpiler(S,x1,x2,...,xk), qui permet d’empiler les
objets x1, x2, ..., xk sur la pile.
1. En utilisant la m´ethode par agr´egat, calculer le coˆut amorti d’une op´eration dans chacun
des cas suivants :
dans l’op´eration MultiEmpiler(S,x1,x2,...,xk), le nombre d’objets que l’on peut
empiler est born´e par une constante c
dans l’op´eration MultiEmpiler(S,x1,x2,...,xk), le nombre d’objets que l’on peut
empiler est inf´erieur ou ´egal au nombre d’objets de la pile S.
2. eme question en utilisant la ethode du potentiel.
Exercice 3 Une s´equence de nop´erations est effectu´ee sur une structure de donn´ees. La i-`eme
op´eration coˆute isi iest une puissance de 2 et 1 sinon.
Le tableau a initialement une taille 1, on y met un ´el´ement et on fait grossir de 1
case.
Si on est en case i= 2k, on alloue icases suppl´ementaires et on met 0dedans. Ici
le potentiel est le nombre de cases occup´ees dans la seconde moiti´e du tableau.
1
1. Utiliser la m´ethode par agr´egat pour calculer le coˆut amorti par op´eration.
2. eme question en utilisant la ethode du potentiel.
Chercher eventuellement un exemple de cout moyen facile a calculer puis faire un cout amorti
qu’on espere different.
Exercice 4 Soit kun entier positif. On consid`ere les entiers naturels inf´erieur `a 2k.´
Etant
donn´e un tel entier x, son ´ecriture en binaire peut ˆetre stock´ee dans un tableau A[0..k 1] ne
contenant que des 0 et des 1 (le bit de poids le plus faible est stock´e dans A[0]). On d´efinit
l’op´eration Incrementer(A) comme suit :
Incrementer(A)
i <- 0 ;
tant que i < k et A[i] = 1 faire
A[i] <- 0
i <- i+1
fintantque
si i < k alors
A[i] <- 1
finsi
fin
1. Quel est l’effet de Incrementer ?
2. Le coˆut de l’op´eration Incrementer est le nombre de bits qui changent. On consid`ere une
suite de nincr´ementations `a partir de 0 (on suppose n < 2k). Calculer le coˆut amorti de
l’op´eration Incrementer :
(a) en utilisant la m´ethode par agr´egat
(b) en utilisant la m´ethode du potentiel.
3 Files de Fibonacci
Exercice 5 En d´esignant par Ukla famille des arbres binomiaux non ordonn´es dont la racine
est de degr´e k(i.e. akfils), on donne la d´efinition inductive suivante des arbres binomiaux
non ordonn´es :
U0={•}
Uk={(, Ui1,...,Uik)|(i1,...,ik) est une permutation de (0,...,k 1) et Uij∈ Uij}
Uk=
####
#
Ui1
Ui2...
c
c
c
c
c
Uik
Montrer que, pour tout arbre Ukde Uk:
1. Uka 2knœuds
2. La hauteur de Ukest k
3. Il y a Ci
knœuds `a la profondeur i(i= 0,...,k)
4. La racine de Ukest de degr´e k, sup´erieur au degr´e de n’importe quel autre nœud.
2
Exercice 6 Une file (ou tas) de Fibonacci est une collection d’arbres binomiaux non ordonn´es
dont les ´etiquettes croissent des racines vers les feuilles. Une file de Fibonacci est dite consolid´ee
si toutes les racines ont des degr´es diff´erents.
1. Montrer que pour tout entier n, il existe une file de Fibonacci consolid´ee de taille n.
2. Quelles sont les tailles des arbres binomiaux non ordonn´es qui forment une file de Fibonacci
de taille n? les degr´es des diff´erentes racines ? le degr´e maximum d’un nœud ?
Exercice 7 Structure de donn´ees : Etant donn´es une file de Fibonacci Het un nœud x
quelconque de H:
min (H) d´esigne la racine de l’arbre qui contient la plus petite cl´e (si Hest vide alors min (H) =
nil)
pere (x) est le p`ere de x(si xest une racine alors pere (x) = nil)
fils (x) est l’un des fils de x(si xest une feuille alors fils (x) = nil)
pred (x) est le fr`ere gauche de xet succ (x) est son fr`ere droit (si xest une racine alors pred (x)
et succ (x) sont des racines, si xest fils unique alors pred (x) = succ (x) = x)
degre (x) est le nombre de fils de x.
Remarque : les racines sont reli´ees par une liste doublement chaˆın´ee ; les enfants d’un mˆeme
nœud sont eux aussi reli´es par une liste doublement chaˆın´ee.
1. On dispose de la proc´edure CreerFibVide de cr´eation d’une file de Fibonacci vide. ´
Ecrire
les proc´edures
InserererFib d’insertion d’un nœud xdans une file de Fibonacci (on ins´erera xdans
la liste des racines sans consolider la file)
ConcatenerFib d’union de deux files de Fibonacci (sans consolidation).
2. ´
Ecrire une proc´edure ConsoliderFib de consolidation d’une file de Fibonacci.
3. ´
Ecrire une proedure d’extraction ExtraireMinFib du minimum dans une file de Fibonacci
(avec consolidation).
Exercice 8 En utilisant la m´ethode du potentiel, calculer le coˆut amorti de l’extraction du
minimum dans une file de Fibonacci.
Exercice 9 On rappelle que les nombres de Fibonacci sont d´efinis par : F0= 0, F1= 1 et
Fk+2 =Fk+1 +Fkpour k0.
1. Calculer Fk.
2. Montrer que 1 +
k
X
i=0
Fi=Fk+2.
3. Montrer que Fk+2 Φkavec Φ = 1 + 5
2(on a Φ 1,61803).
Exercice 10 Pour impl´ementer les op´erations de diminution d’une cl´e et de suppression d’une
cl´e, on autorise tout nœud xd’une file de Fibonacci `a avoir un fils de moins qu’il ne devrait,
avec un marquage de cette situation. Chaque nœud xcontient un bool´een marque (x) qui a la
valeur vrai s’il manque un fils `a xet f aux sinon.
1. ´
Ecrire une proedure DiminuerCleFib de diminution d’une cl´e dans une file de Fibonacci.
2. ´
Ecrire une proedure SupprimerCleFib de suppression d’une cl´e dans une file de Fibonacci.
3. On note D(n) le degr´e maximum d’un nœud dans une file de Fibonacci de taille n. Montrer
que D(n)logΦn.
4. En utilisant la m´ethode du potentiel, calculer le coˆut amorti de la suppression d’une cl´e
dans une file de Fibonacci.
3
4 Arbres bicolores et arbres 2-3-4
4.1 Arbres bicolores
4.1.1 D´efinition
Un arbre bicolore de recherche est un arbre binaire de recherche compl´et´e dans lequel tout sommet
poss`ede une couleur (blanc ou rouge) et tout nœud interne poss`ede une cl´e et qui v´erifie :
les feuilles sont blanches (et ne poss`edent pas de cl´e)
le p`ere d’un sommet rouge est blanc
les chemins issus d’un mˆeme sommet et se terminant en une feuille ont le mˆeme nombre
de sommets blancs.
4.1.2 Primitives
Pour manipuler les arbres bicolores, on dispose des primitives habituelles sur les arbres binaires :
ArbreVide : >arbre binaire
ArbreVide() renvoie un arbre vide
ArbreBinaire : ´el´ement ×arbre binaire ×arbre binaire >arbre binaire
ArbreBinaire(x,G,D) renvoie l’arbre binaire dont la racine a pour contenu l’´el´ement x
et dont les sous-arbres gauche et droit sont respectivement G et D
EstArbreVide : arbre binaire >bool´een
EstArbreVide(T) renvoie VRAI ssi T est un arbre binaire vide
Racine : arbre binaire >´el´ement
Racine(T) renvoie le contenu de la racine de l’arbre binaire T
SousArbreGauche : arbre binaire >arbre binaire
SousArbreGauche(T) renvoie une copie du sous-arbre gauche de l’arbre binaire T
SousArbreDroit : arbre binaire >arbre binaire
SousArbreDroit(T) renvoie une copie du sous-arbre droit de l’arbre binaire T
et de primitives sp´ecifiques aux arbres bicolores :
FeuilleBlanche : >arbre binaire
FeuilleBlanche() renvoie l’arbre binaire r´eduit `a une feuille de couleur c blanche
ArbreBinaire : cl´e ×couleur ×arbre binaire ×arbre binaire >arbre binaire
ArbreBinaire(a,c,G,D) renvoie l’arbre binaire dont la racine a pour cl´e a et
pour couleur c et dont les sous-arbres gauche et droit sont respectivement G et D
EstFeuille : arbre binaire >bool´een
EstFeuille(T) renvoie VRAI ssi T est un arbre binaire r´eduit `a une feuille
CleRacine : arbre binaire >cl´e
CleRacine(T) renvoie la cl´e de la racine de T
CouleurRacine : arbre binaire >couleur
CouleurRacine(T) renvoie la couleur de la racine de T
ModifierCouleur : arbre binaire ×couleur >Rien
ModifierCouleur(T,c) remplace par c la couleur de la racine de l’arbre binaire T
4.2 Arbres 2-3-4
1. Rappeler les r`egles d’´eclatement d’un 4-nœud dans un arbre 2-3-4, lorsque les ´eclatements
se font `a la descente.
2. Construire par adjonctions successives un arbre 2-3-4 contenant les cl´es 8, 3, 2, 4, 1, 15,
10, 9, 11, 7, 6, 13, 12, 5, 14, 16, 17. On nommera cet arbre A-ex1.
4
4.3 Arbres 2-3-4 et arbres bicolores
4.3.1 Transformation d’un arbre 2-3-4 en arbre bicolore
Principe Pour obtenir un arbre bicolore `a partir d’un arbre 2-3-4, on proc`ede de la fa¸con
suivante :
l’arbre vide est transform´e en une feuille blanche (sans cl´e)
chaque 2-nœud prend la couleur blanche et ses deux sous-arbres sont transform´es en arbres
bicolores
un 3-nœud, qui compte deux cl´es a < b, se scinde en deux nœuds de l’arbre bicolore ; ces
deux nœuds contiennent respectivement les cl´es aet b. Il y a deux possibilit´es : ou bien b
est `a la racine du sous-arbre droit de aou bien aest `a la racine du sous-arbre gauche de
b. Le fils prend la couleur rouge et le p`ere prend la couleur blanche. Les trois sous-arbres
du 3-nœud sont eux-mˆemes transform´es en arbres bicolores et deviennent les sous-arbres
des nœuds contenant les cl´es aet b
un 4-nœud, qui compte trois cl´es a < b < c, se scinde en trois nœuds de l’arbre bicolore ;
ces trois nœuds contiennent respectivement les cl´es a,bet c. La cl´e aest `a la racine du
sous-arbre gauche de bet la cl´e cest `a la racine du sous-arbre droit de b. Les fils prennent
la couleur rouge et le p`ere prend la couleur blanche. Les quatre sous-arbres du 4-nœud
sont eux-mˆemes transform´es en arbres bicolores et deviennent les sous-arbres des nœuds
contenant les cl´es aet c.
1. Illustrer le principe ´enonc´e ci-dessus (au moyen de petits dessins).
2. Montrer que l’arbre ainsi obtenu est un arbre bicolore et encadrer la hauteur de cet arbre.
3. Construire un arbre bicolore, que l’on nommera B-ex1, transform´e de l’arbre 2-3-4 A-ex1.
4. ´
Ecrire l’algorithme de transformation d’un arbre 2-3-4 en arbre bicolore.
4.3.2 Transformation d’un arbre bicolore en arbre 2-3-4
1. Donner le principe de la transformation d’un arbre bicolore en arbre 2-3-4. Illustrer ce
principe au moyen d’un exemple.
2. ´
Ecrire l’algorithme de transformation d’un arbre bicolore en arbre 2-3-4.
4.4 Insertion dans un arbre bicolore
4.4.1 Rotations dans un arbre binaire
On d´efinit les rotations simples RotationGauche et RotationDroite de sp´ecifications :
RotationGauche : arbre binaire >arbre binaire
RotationGauche(T) renvoie l’arbre obtenu en faisant basculer T vers la gauche
RotationDroite : arbre binaire >arbre binaire
RotationDroite(T) renvoie l’arbre obtenu en faisant basculer T vers la droite
ainsi que les rotations doubles RotationDroiteGauche et RotationGaucheDroite de sp´ecifications :
RotationDroiteGauche : arbre binaire >arbre binaire
RotationDroiteGauche(T) renvoie l’arbre obtenu en faisant basculer d’abord le sous-arbre
droit de T vers la droite puis l’arbre T ainsi modifi´e vers la gauche
RotationGaucheDroite : arbre binaire >arbre binaire
RotationGaucheDroite(T) renvoie l’arbre obtenu en faisant basculer d’abord le sous-arbre
gauche de T vers la gauche puis l’arbre T ainsi modifi´e vers la droite
1. ´
Ecrire la d´efinition de l’une des deux rotations simples et la d´efinition de l’une des deux
rotations doubles.
5
1 / 7 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 !