2 Arbres Equilibres PDF
2 Arbres Equilibres PDF
2 Arbres Equilibres PDF
• Files
• Listes
• Arbres
• Graphes
• Dictionnaires
‣ Arbres binaires de recherche, tables de hachage, ...
• Files de priorité
• etc
Dictionnaires et algorithmes de recherche
• Dictionnaire: un type abstrait de données qui permet de représenter et manipuler des
ensembles (typiquement ordonnés).
• Éléments de l’ensemble accessibles par un champ clef (identifiant) sur un domaine totalement
ordonné
• D’autres informations associées à chaque élément: schématisées par un seul autre champ
valeur, qui peut être d’un type complexe.
Dictionnaires
Implémentations possibles
par Tableau (non-trié et trié)
par Liste (non-trié et trié)
par Table de Hachage
par Arbre Binaire de Recherche :
complexité des opérations de recherche/insertion/suppression:
• O(log n) cas moyen
• O(n) cas pire - dû au possible déséquilibre dans l’arbre (cas pire: arbre dégénéré en
une liste)
• Arbres a-b
Rappel: Soit Tclef un domaine totalement ordonné, et Tval un type pour les valeurs:
Arbre binaire de recherche (ABR) sur (Tclef, Tval):
un arbre binaire sur un domaine (Tclef, Tval) tel que pour tout sommet x
clefs dans le sous-arbre gauche de x < x. clef < clefs dans le sous-arbre droit de x
Rotations:
• des opérations de réorganisation “locale” des noeuds d’un ABR, qui préservent la propriété
d’ABR
• briques de base pour les opérations de rééquilibrage dans les ABR équilibrés
Rotations
x y
rotation gauche
y x
A rotation droite C
B C A B
Rotations
x z
rotation gauche-droite
y y x
z D
A A B C D
B C
x z
rotation droite-gauche
y x y
A z
D A B C D
B C
Toutes les opérations de rotation sur les arbre binaires peuvent être réalisées en temps O(1)
Arbres AVL (Adelson-Velskii et Landis)
Pour un arbre binaire A et un sommet x de A :
A(x) : sous-arbre de A de racine x
Ag (x) : sous arbre gauche de A(x)
Ad (x) : sous-arbre droit de A(x)
Equilibre de x :
δ (x) = hauteur( Ag(x) ) - hauteur( Ad(x) )
( par convention la hauteur d’un arbre vide est -1 )
Arbre AVL: ABR tel que, pour tout sommet x de l’arbre δ(x) ∈ { -1, 0, 1 }
Proposition
Soit A un arbre AVL ayant n sommets et de hauteur h, alors:
log2 (n+1) ≤ h+ 1 ≤ 1,44 log2 (n+2)
Hauteur d’un arbre AVL
Preuve.
1) L’arbre binaire de hauteur h ayant plus de sommets est l’arbre complet
#sommets de l’arbre complet: 1 + 2 + ...+ 2h = 2h+1 -1
n ≤ 2h+1 -1 h+ 1 ≥ log2 (n+1)
1 ph+3 -1
n ≥ N(h) = F(h) -1 n+1 >
√5
h+ 3 < log p (n+2) + log p √5 ≤ (1/ log2 p) · log 2 (n+2) + 2 =1, 44 log 2 (n+2) + 2
➡ La recherche d’une clef dans un arbre AVL se fait en temps O(log n) dans le cas pire
2) rééquilibrage de l’arbre
x
u
• calculer (et stocker) la nouvelle profondeur du sous-arbre A(v) (au plus +1)
• vérifier les conditions AVL pour A(v)
x: le premier sommet de γ (de s vers la racine) tel que A(x) n’est pas AVL ( |δ’(x)| =2 )
u: le fils de x dans γ (supposer u fils gauche, le cas u fils droit est symétrique)
(u est dans A)
Insertion dans un arbre AVL
Propriétés de A (arbre avant l’insertion) et γ
Lemme A γ
1) Pour tous descendant v de x sur le chemin γ (x exclus): x
δ(v)=0
v
2) Pour x: δ(x) =1
Preuve:
x A’
A:
x
u u
h
h h
s
⇓
A’: x rééquilibrage : u
rotation droite
x équilibre rétabli
u h(A’(u)) =h(A(x))
h
h h+1 h h
h+1
Insertion dans un arbre AVL
Rééquilibrage de A’, deux cas
2) s inséré dans le sous-arbre droit de u
x A’
A:
x
u
u
y
h
h h-1 h-1
s
⇓
rééquilibrage :
x y y peut être éventuellement le
A’: rotation gauche-droite
nouveau noeud inséré
u u x équilibre rétabli
y h(A’(y)) =h(A(x))
h
h-1
h h-1 h h h
h
Insertion dans un arbre AVL
Complexité de l’insertion : O(log n)
Xs
2) rééquilibrage de l’arbre
A’
Xs
x: le premier sommet de γ (de s vers la racine) tel que A(x) n’est pas AVL ( |δ’(x)| =2 )
supposons s dans le sous-arbre droit de x (l'autre cas est symétrique)
Suppression dans un arbre AVL
Dans A’: x plus précisément: x
u
h h
h+2
AVL
h+2
AVL
Deux cas:
1) Le sous-arbre gauche de u à hauteur h+1
x rééquilibrage : u
rotation droite
x
u
h
rééquilibrage :
x y
rotation gauche-droite
u u x
y h(A’(y)) = h(A(x))-1
h
h-1
h h-1 h ou h h h
ou h h
Si après une étape de rééquilibrage l'équilibre n’est pas rétabli, répéter le rééquilibrage sur le
noeud père, et ainsi de suite, au pire jusqu’à la racine
Suppression dans un arbre AVL
Complexité de la suppression : O(log n)
1 3 6 9 10 Un arbre 3-5
1, v1 2, v2 5, v3 7, v4 9, v5 10, v6 11, v7
Relation entre la hauteur et la taille
Proposition
Soit A un arbre a-b avec n feuilles et de hauteur h, alors
log n / log b ≤ h ≤ 1 + log (n/2) / log a
Preuve:
n ≤ bh
parce que chaque noeud interne a au plus b fils
n ≥ 2·ah-1
parce que la racine a au moins 2 fils et les autres noeuds internes ont au moins a fils
Recherche dans les arbres a-b
Recherche d’une clef c dans A: descente dans la profondeur de l’arbre
x ← racine de A
Tant que le sommet courant x n’est pas une feuille
trouver i tel que Ki-1 ≤ c ≤ Ki Ki-1 Ki x
(parcours linéaire des balises de x)
( i=1 si c ≤ K1 Ai(x)
ci, vi c, v ci, vi
ci, vi ci, vi c, v
Insertion dans les arbres a-b
Deuxième phase (rééquilibrage)
y K
x K
(si x est la racine une nouvelle racine contenant uniquement la clef K est créée)
Complexité:
Première phase: O(log n)
Deuxième phase : O(log n) - chaque opération d'éclatement se fait en temps O(1)
L’insertion dans un arbre a-b à n éléments (feuilles) se fait en temps O(log n) dans le cas pire
Suppression dans les arbres a-b
Première phase:
c, v
c, v
x z K
<b >a ≤b ≥a
≥ a-1 ≤b ≥a ≤b
K y
x z K
a≤ + ≤b a≤ ≤b
En particulier a-1 + a ≤b
Répéter le rééquilibrage sur le noeud y et ainsi de suite (au pire) jusqu’à la racine
Suppression dans les arbres a-b
Complexité:
Première phase: O(log n)
Deuxième phase : O(log n) - chaque opération de partage ou fusion se fait en temps O(1)
La suppression dans un arbre a-b à n éléments (feuilles) se fait en temps O(log n) dans le cas pire
Concaténation et scission dans les arbres a-b
Rappel:
Type abstrait dictionnaire: un dictionnaire est un ensemble de couples (clef, valeur)
Opérations typiques dans un dictionnaire:
Concaténation et scission peuvent être implémentés efficacement (O(log n)) dans les arbres a-b
Concaténation de deux arbres a-b
On suppose d’abord avoir une clef max(D1) ≤ c < min(D2) et on implémente la fonction
suivante:
pre-conditions:
• A1, A2 sont deux arbres a-b qui représentent les dictionnaires D1 et D2 , respectivement
• max(D1) ≤ c < min(D2)
• Descendre la branche la plus à droite de A1, jusqu'au noeud x dont le sous arbre a hauteur h2
• Fusionner x avec la racine de A2, en utilisant la clef c (Remarquer que clefs de A(x) ≤ c <
clefs de A2)
c x’
h1
h2
d(x’) ≤ 2b
Concaténation de deux arbres a-b
CONCATENER ( Arbre A1, Tclef c, Arbre A2 ): Arbre; Supposer h1 ≥ h2
Deuxième phase: O(1+|h1-h2|)
c x’
h1
h2
Si d(x’) > b
• A1, A2 sont deux arbres a-b qui représentent les dictionnaires D1 et D2 , respectivement
• max(D1) < min(D2)
CONCATENER ( Arbre A1, Arbre A2 ): Arbre;
Retourne un arbre a-b qui représente D1 ∪ D2
Implementation:
trouver c = clef maximale dans A1 → O(1+h1)
retourner CONCATENER ( A1, c, A2 ); → O( 1 + |h1-h2| )
Pre-conditions:
A g1 d1
g2 d2
d3
g3
c, v
Scission d’un arbre a-b
Soit π le chemin de la racine de A à la feuille contenant la clef de scission c
A g1 d1
g2 d2
d3
g3
c, v
G1 g1 d1 D1
G2 g2 d2 D2
d3 D3
G3 g3
G4 c, v
• clefs de Di+1 ≤ di ≤ clefs Di (parce que Di+1 est dans le sous-arbre gauche de di )
• clefs de Gi ≤ gi ≤ clefs Gi+1 (parce que Gi+1 est dans le sous-arbre droit de gi )
Scission d’un arbre a-b
clefs de Gi ≤ gi ≤ clefs Gi+1 clefs de Di+1 ≤ di ≤ clefs Di
G1 g1 d1 D1
G2 g2 d2 D2
d3 D3
G3 g3
G4 c, v
CONCATENER (G3, g3, G4) → G3’ CONCATENER (D3, d2, D2) → D2’
CONCATENER (G2, g2, G3’) → G2’ CONCATENER (D2’, d1, D1) → D1’
CONCATENER (G1, g1, G2’) → G1’
si la racine de G1’ (ou D1’) a un seul fils, la supprimer
retourner (G1’, D1’)
Scission d’un arbre a-b
G1 D1
G2 D2
D3
G3
G4 c, v
P(s)+E(s)+F(s)
Coût amorti de rééquilibrage pour s :
n
Coût amorti des arbres 2-4
Proposition
Sur un suite s quelconque de n opérations d’insertion et suppression dans un arbre 2-4
initialement vide, le coût amorti de rééquilibrage est constant.
Plus précisément, soit i le nombre d’insertions et d le nombre de suppressions dans s, alors
P(s) ≤ d
E(s)+F(s) ≤ n + (i-d-1) / 2
P(s)+E(s)+F(s)
Par conséquent ≤ 3
n 2
Preuve: Exercice
B-arbres
Quand b=2a -1, un arbre a-b est appelé B-arbre d’ordre a-1 (ordre = nombre de clefs dans un
noeud)
B-arbres:
• Utilisées pour la recherche de clefs en mémoire secondaire (indexes sur les bases de données)
• Informations associées a chaque clef (le champ val) : pointeur au données sur disque
tels que:
1) seules les noeuds internes (i.e. non-feuille) de A contiennent des couples (clef, valeur)
2) la fonction c satisfait les propriétés suivantes:
a) le feuilles sont noires
b) la racine est noire
c) le père d’un sommet rouge est noir
d) tous les chemins d’un même sommet x vers les feuilles ont le même nombre de sommets
noirs - ce nombre (x exclu) est appelé rang de x
Arbres rouge-noir - Exemple
Un arbre rouge-noir et sa fonction de rang:
2
6
2 4 8 1
1 3 5 1 1 7
0
1 2
0 0 0 0 0
0 0
log n ≤ h ≤ 2 log n
2) Borne supérieure:
On montre que pour chaque sommet x de A de hauteur h(x), de rang k et dont le sous-arbre
a n(x) sommets:
h(x) ≤ 2k et 2k ≤ n(x)
De plus, si x est rouge, les inégalités sont strictes.
x a deux fils rouges x a deux fils noirs x a un fils rouge et un fils noir
k k k
x x x
8 8
4 4
5 5
c x
• x n’est pas la racine et x a un père y rouge y a un père z et z est noir. Deux cas:
y y
x x
k+1 z k+1 y
rotation simple
x et t “éloignés”
k+1 y k t x k+1 z k+1
+ recoloriage
k+1 x w w t k
k+1 noeuds noirs, y compris w
k+1 z k+1 x
rotation double
x et t “proches”
k+1 y k t y k+1 z k+1
+ recoloriage
x k+1 t k
- x noir et y rouge:
x 1 y équilibre rétabli
- x noir et y noir: +
x 1 feuille dégradée
y
Suppression dans les arbres rouge-noir
2) x a deux fils non-feuille
x c x m
y y
m m
• Le sous-arbre enraciné dans un sommet dégradé est rouge-noir (quand le sommet dégradé est
vu comme un noeud noir habituel)
• Un arbre rouge-noir avec un sommet noir dégradé satisfait toutes les conditions d’un arbre
rouge-noir si le sommet dégradé est vu comme un noeud noir, mais compte comme 2 dans le
calcul du nombre de noeuds noirs sur les chemins
⇓
rang dans un arbre avec un sommet dégradé: le sommet dégradé compte comme 2
Suppression dans les arbres rouge-noir
Deuxième phase: élimination du sommet dégradé
- x a un frère rouge
- x est la racine
Suppression dans les arbres rouge-noir
Soit x le sommet dégradé courant.
- x a un frère noir z et z a deux fils noirs
+
père noir y k+2 y k+1 y degradé
+
x k z k+1 x k z k+1
père rouge
+
x k z k+1 x k z k+1
Suppression dans les arbres rouge-noir
Soit x le sommet dégradé courant.
- x a un frère noir z et z a un fils rouge
rotation simple
y k+2 z k+2
x et t éloignés
+
x k z k+1 y k+1 t k+1
rotation double
y k+2 t k+2
x et t proches
+
x k z k+1 y k+1 z k+1
k+1 t u k x u k
équilibre rétabli
Suppression dans les arbres rouge-noir
Soit x le sommet dégradé courant.
- x a un frère rouge
rotation simple
y k+2 z k+2
+
x k z k+2 y k+2
+
x k
x est dégradé, mais une seule autre étape de rééquilibrage suffit pour rétablir l'équilibre
(toutes les règles telles que le père de x est rouge rentabilisent l'équilibre)
- x est la racine
+
x x équilibre rétabli
Suppression dans les arbres rouge-noir
• La suppression peut introduire une feuille dégradée
⇓
Au plus h+1 étapes de rééquilibrage