TD6 - LSV

publicité
Algorithmique TD6
L3 Informatique – ENS Cachan
25 octobre 2012
Exercice 1 Dans l’adressage ouvert, le sondage quadratique est défini comme suit :
h(k, i) = (h0 (k) + c1 · i + c2 · i2 )
mod m,
où c1 , c2 sont des constantes, et m est la taille de la table de hachage.
Montrer qu’avec c1 = c2 = 21 et m = 2p , i 7→ h(k, i) est une permutation pour tout k.
Exercice 2 1. Calculer la hauteur moyenne d’un ABR construit aléatoirement.
Univers : Permutations de taille n avec distribution uniforme.
Hauteur : Pour une permutation σ, hauteur de l’arbre obtenu par insertions
successives de σ(1), ..., σ(n).
(Indication : inspirez-vous de l’analyse du tri rapide).
2. Calculer le coût moyen d’une recherche fructueuse.
Exercice 3 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érence de hauteur
entre le sous-arbre gauche et le sous-arbre droit est d’au plus 1.
1. Soit n le nombre de nœuds et h la hauteur d’un AVL (la hauteur d’un arbre réduit à sa racine est 1). Montrer
que Fh+2 − 1 ≤ n ≤ 2h − 1 où Fk est le k-ième nombre de Fibonacci avec F0 = 0, F1 = 1 et Fk+2 = Fk+1 + Fk
pour k ≥ 0. Montrer que ces bornes sont atteintes.
√
Montrer que pour k ≥ 0 on a Fk+2 ≥ φk où φ = (1 + 5)/2.
En déduire que log2 (n+1) ≤ h ≤ logφ (n+1) et que la recherche dans un AVL se fait au pire en temps O(log(n)).
Pour les algorithmes, un nœud x d’un AVL sera représenté par une structure comportant
– une clé, notée x · cle d’un type totalement ordonné (par exemple de type entier) ;
– un sous-arbre gauche, noté x · g et un sous-arbre droit, noté x · d ;
– la hauteur de l’arbre, notée x · h.
L’arbre vide est noté NULL. On notera h(x) la hauteur d’un arbre x avec h(NULL) = 0. On notera n(x) le nombre
de nœuds d’un arbre x.
2. Le but de cette question est d’écrire une procédure équilibrer(x) pour transformer en AVL en temps constant
un ABR de racine x en supposant que ses deux sous-arbres sont des AVL et que la différence de hauteur entre
les deux sous-arbres est d’au plus 2.
Proposer un rééquilibrage dans le cas où 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. Écrire la procédure équilibrer(x).
3. Écrire un algorithme pour insérer une clé c dans un AVL x en temps au pire O(1+h(x)). Si x0 est 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ééquilibrage.
4. Écrire un algorithme pour supprimer une clé c dans un AVL x en temps au pire O(1 + h(x)). Justifier la
correction de l’algorithme (on ne demande pas une preuve de programme). Combien de rééquilibrages peuvent
être nécessaires ?
1
5. Écrire un algorithme qui réalise la fusion de deux AVL x et y et d’une clé c en supposant que toutes les clés
de x sont strictement inférieures à c et que toutes les clés de y sont strictement supérieures à c. Cet algorithme
devra fonctionner en temps O(1 + |h(x) − h(y)|). Justifier.
6. Écrire un algorithme qui réalise la scission d’un AVL x en deux AVL y et z contenant respectivement les clés
de x inférieures ou égales à c pour y et strictement supérieures à c pour z. Cet algorithme devra fonctionner en
temps O(1 + |h(x)|). Justifier.
Exercice 4(Arbres a-b). Les arbres a-b sont des arbres dont toutes les feuilles ont même profondeur, et le nombre de
fils d’un noeud varie entre a et b. On fixe a ≥ 2 et b ≥ 2a − 1. Un arbre a − b vérifie les conditions suivantes :
1. Les feuilles ont toutes la même profondeur,
2. la racine a au moins 2 et au plus b fils,
3. les autres noeuds ont au moins a et au plus b fils.
Pour un sommet x, on note par d(x) le nombre de fils de x. On note par Ai (x) le i-ème sous-arbre de x. Chaque
sommet x contient d(x) balises, c-à-d des clés k1 < . . . < kd(x) − 1, avec la propriété suivante : les clés des feuilles de
Ai (x) sont inférieures ou égales à ki pour i = 1 . . . d(x)−1 ; et les clés des feuilles de Ai (x) sont strictement supérieures
à ki−1 pour i = 2 . . . d(x). On notera ki (x) la i-ème balise du sommet x.
1. Donner une borne sur la hauteur des arbres a − b. Donner la complexité de la recherche d’un élément.
2. On considère l’insertion des éléments dans ces arbres. Montrer que une insertion peut violer les propriétés des
arbres a − b.
3. Donner une procédure en O(log(n)) qui rétablit ces propriétés après une insertion.
4. Définir la suppression d’un élément en temps O(log(n)).
5. On se restreint aux arbres 2 − 4. On dit qu’un arbre est partiellement équilibré si au plus un sommet s vérifie
d(s) = 1 ou d(s) = 5, alors que pour les autres sommets s0 , on a d(s0 ) ∈ {2, 3, 4}.
On pose e(s) = min(d(s) − 2, 4 − d(s)), l’équilibre du sommet s. On obtient :

 −1 si d(s) = 1 ou d(s) = 5
0
si d(s) = 2 ou d(s) = 4
e(s) =

1
sid(s) = 3.
L’équilibre d’un arbre A est alors la somme des équilibres de chaque sommet.
En utilisant ces définitions, montrer que le coût amorti du rééquilibrage pour une suite d’insertion et de suppression est constant.
Exercice 3 Soit U l’ensemble des n-uplets dont les valeurs sont tirées de Zp et soit B = Zp avec p premier. Définir
la fonction de hachage hb : U 7→ B pour b ∈ Zp sur un n-uplet en entrée (a1 , a1 , . . . , an−1 ) dans U , sous la forme
hb ((a0 , a1 , . . . , an−1 )) =
n−1
X
aj bj ,
j=0
et soit H = {hb | b ∈ Zp }. Montrer que H est ((n − 1)/p)-universelle.
Exercice 4 On dit qu’une famille H de fonctions de hachage reliant un ensemble fini U à un ensemble fini B est
-universelle si, pour toute paire d’éléments distincts k et l de U ,
Pr(h(k) = h(l)) ≤ ,
où la probabilité est défini par le tirage aléatoire uniform de la fonction de hachage h dans la fammille H. Montrer
qu’une telle famille doit vérifier :
1
1
≥
−
.
|B| |U |
2
Téléchargement