Vous êtes sur la page 1sur 93

Arbres

• Un arbre est une structure de données


organisées de façon hiérarchique, à partir d’un
nœud distingué appelé racine.
• Très importante en informatique!.
• Arbre de jeux (i.e., Echecs ), système de fichiers
UNIX/Windows, Arbres de tri etc.
• Nous étudierons deux types d’arbres : Arbre
Binaires de Recherches et Arbres équilibrés
1
Arbres: définitions
• Un arbre est un ensemble de Nœuds, reliés par
des Arêtes. Entre deux nœuds il existe toujours
un seul chemin.

noeuds

arêtes
2
Arbres: définitions
• Les arbres sont enracinés. Une fois la racine définit tous les
nœuds admettent un niveau.
• Les arbres ont des noeuds internes et des feuilles (nœuds
externes). Chaque noeud (à l’exception de la racine) a un
parent et admet zéro ou plusieurs fils.
racine
niveau 0
niveau 1 nœuds internes
niveau 2
parent
niveau 3 et
feuilles 3 fils
Arbres binaires
• Un Arbre Binaire est un arbre où chaque
nœud admet au plus 2 fils.

4
Arbres – définitions
Terminologie
degré d’un noeud n deg(n): nombre de fils de n
degré d’un arbre deg(A) : max des degres de ses noeuds

profondeur d’un noeud n prof (n) : longueur du chemin entre la


racine et n
Hauteur d’un noeud : h(n) : 1 + longueur du plus long
chemin de n aux feuilles
hauteur d’un arbre h(A) : hauteur de sa racine
taille d’un arbre |A| : nombre de nœuds

5
Arbres Binaires: définitions
• Nœuds d’un arbre contiennent des clés (mots, nombres,
etc)
• Arbre Binaire plein : Un arbre binaire est plein si
chaque nœud a 0 ou 2 enfants. Nous pouvons également
dire qu'un arbre binaire plein est un arbre binaire dans
lequel tous les nœuds, à l'exception des feuilles, ont
deux enfants.. 14

10 16
8 12
7 9 11 13 6
Arbres Binaires: définitions
• Nœuds d’un arbre contiennent des clés (mots, nombres,
etc)
• Arbre Binaire complet : Un arbre binaire est complet
si tous les niveaux sont complètement remplis, sauf
peut-être le dernier niveau et le dernier niveau a toutes
les clés aussi gauche que possible. 14

10 16

8 12 15 18

7 9 11 13 7
Arbres Binaires: définitions
• Nœuds d’un arbre contiennent des clés (mots, nombres,
etc)
• Arbre Binaire parfait : Un arbre binaire est parfait si
tous les nœuds internes ont deux enfants et toutes les
feuilles sont au même niveau. Un arbre binaire parfait
est complet. 14

10 16

8 12 15 18

7 9 11 13
8
Exemples d’arbres non parfait
Exemples d’arbres complet
Arbre non complet Arbre complet
Arbres Binaires: représentation par
tableaux
• Un arbre binaire complet peut être
représenté par un tableau A avec un accès
en O(1) à chaque noeud:
– Mémoriser les neouds séquentiellement de la
racine aux feuilles et de gauche vers la droite.
– Fils gauche de A[i] est en A[2i]
– Fils droit de A[i] est en A[2i + 1]
– Parent de A[i] est en A[i/2]

11
Arbres Binaires: représentation par
tableau
1
14
2 3
10 16
4 5 6 7
8 12 15 18
8 9 10 11
7 9 11 13

1 2 3 4 5 6 7 8 9 10 11
tab A: 14 10 16 8 12 15 18 7 9 11 13
12
Arbres Binaires: représentation par
pointeurs
typedef struct n{
int clé;
struct n *fGauche, *fDroit;
}nœud;

typedef nœud * Arbre;

13
Parcours : inOrdre
InOrdre est décrit réursivement :

• Visiter le sous-arbre gauche en InOrdre


• Visiter la racine
• Visiter le sous-arbre droit en InOrdre

14
Parcours : préOrdre
PréOrdre est décrit réursivement :

• Visiter la racine
• Visiter le sous-arbre gauche en PréOrdre
• Visiter le sous-arbre droit en PréOrdre

15
Parcours: non-récursif
PréOrdre itératif en utilisant une Pile.

Pile S
empiler racine dans S
répéter jusqu’à S=φ
v = dépiler S
si v <> nil
visiter v
empiler le fils droit de v dans S
empiler le fils gauche de v dans S

16
Parcours: postOrdre
PostOrdre est décrit réursivement :

• Visiter le sous-arbre gauche en PostOrdre


• Visiter le sous-arbre droit en PostOrdre
• Visiter la racine

17
Parcours: levelOrdre
LevelOrdre visite les noeuds niveau par niveau depuis la racine:
• Peut être décrit facilement en utilisant une File (Comment??)
• Parcours appelé “Breadth First Search” (parcours en largeur)
dans les graphes

18
Arbre Binaire de Recherche
• Un Arbre Binaire de Recherche (ABR)
est un arbre binaire avec les propriétés
suivantes :
– La clé associée à un noeud est supérieur aux
clés des nœuds de son sous-arbre gauche

– La clé associée à un noeud est inférieur aux


clés des nœuds de son sous-arbre droit
19
Arbre Binaire de Recherche:
Exemples
racine
racine
14
C
10 16
A D racine
8 11 15 18
14

10 16

8 11 15
20
Arbre Binaire de Recherche:
Exemples
Arbre Binaire de Recherche
• ABR est un arbre avec la propriété suivante :
Clé.fGauche < Clé.parent < Clé.fDroit

NOTER! Le parcours InOrdre visite les clés dans


l’ordre croissant.
void inOrdre(Arbre racine) {
inOrdre(racine->fGauche)
print(racine->key)
inOrdre(racine->fDroit)
}
22
ABR: InOrdre
Exemple:

InOrdre visites :
14
(8)
(10)
10 16 (11)
(14)
8 11 15 18
(15)
(16)
(18)

23
ABR : Rechercher un élément
Soit un ABR :

G D

Problème: rechercher un noeud avec une clé x ?

24
ABR : Rechercher un élément
rechercher(racine, x) Exemple:
comparer x à la clé de racine:
14
- si x = clé return
- si x < clé => chercher dans G
10 16
- si x > clé => chercher dans D
8 11 15
chercher de la même manière
dans G ou D

x=8 (oui) x=17 (non)


25
ABR : Rechercher un élément
bool searchABR(Arbre racine; typeCle clé){
if (racine==NULL) return false
if (racine->clé==clé)
return true;
else if (key < racine->clé)
return searchABR(racine->fGauche, clé);
else
return searchABR(racine->fDroit, clé)
}

Donner une version itérative ?


26
ABR : Ajout d’un élément
ABR : Ajout d’un élément
Comment ajouter une clé? Exemple:

10
La même procédure que
searchABR s’applique:
Déterminer la position 8 ajout 4?
d’insertion par searchABR.
3 9 4
Ajouter la nouvelle clé si la
recherche échoue.
2 5

28
ABR : Ajout d’un élément
ABR : Ajout d’un élément
Construction d’un ABR
Exemple: ajouter C A B L M (dans l’ordre!)

1) Ajouter C 2) ajouter A 3) ajouter B C


C
C A
A
B
4) Ajouter L C 5) Ajouter M C

A L
A L
B
B M 31
Construction d’un ABR
L’ABR est-il unique pour une séquence de
lettres A B C L M ?
NON! différentes séquences donnent
différents ABR
Ajout de : A B C L M Ajout de : C A B L M
A
C
B
A L
C
L B M
M 32
Trier avec un ABR
Soit un ABR, peut-on afficher les Example:
clés dans l’ordre?
C
Visiter l’ABR avec un parcours
InOrdre:
A L
- visiter le sous-arbre gauche
- afficher racine B M
- visiter le sous-arbre droit
InOrdre affichage:
Comment trouver le minimum? A B C L M
Comment trouver le maximum? 33
Max dans un ABR
ABR : supprimer un élément
ABR : supprimer un élément
Pour supprimer un nœud contenant x,
rechercher x, une fois trouvé appliquer l’un des trois
cas suivants:

CAS A: x est une feuille


p p

q q

r x r

supprimer x On obtient un ABR


36
ABR : supprimer un élément
Cas B: x est un nœud interne avec un seul
sous-arbre

r r

x
q
q
suppr x L
L
On obtient un ABR
37
ABR : supprimer un élément
Cas C: x est un nœud interne avec 2 sous-arbres

r
r
u suppr x
x suppr x
s Z
q u
q
W Z
W
ts t
propriété ABR est conservé 38
ABR : supprimer un élément
Cas C suite: … ou encore comme suit

q < x < u
r ⇒ q est inférieur au plus petit
élément de Z
q
⇒ r est supérieur au plus grand
W t élément de W
u

Z D’autres façon ?
s
39
ABR : supprimer un élément

38
ABR : supprimer un élément
ABR : supprimer un élément
ABR : supprimer un élément
ABR : Compléxité de rechercher
• Quelle est la compléxité de searchABR ?
• Dépend de :
– la clé x
– des autres données
– De la forme de l’arbre

Analyse de la compléxité : On est intéréssé par


la compléxité dans le meilleur cas, pire cas et
en moyenne 44
ABR : Compléxité de rechercher
niveau 0

niveau 1

niveau 2

niveau 3
• hauteur d’un ABR = niveau max (h =3)
• hauteur d’un noeud
h(x) = 0 si x est la racine
h(x) = 1+ h(y), y = pere(x)
• hauteur d’un ABR B : h(B) = max{h(x), x nœud de B}
45
ABR : Compléxité de rechercher

Si tout les nœuds de l’arbre Si tout les nœuds existent sauf


existent : ABR plein ceux du dernier niveau :
niveau-min ABR

46
ABR : Compléxité de rechercher

Théorème: h+1
Un ABR plein (complet) de hauteur h a 2 - 1 noeuds
Preuve: Par induction

Cas de base: un arbre de hauteur 0 a 1 nœud (racine)

Hypothèse inductive: Supposant qu’un ABR de hauteur h a


2 h+1
- 1 noeuds
47
ABR : Compléxité de rechercher
Etape d’induction: Connecter 2 ABR de hauteur h pour
construire un ABR de hauteur h+1. On a besoin d’ajouter
un noeud supplémentaire racine

h+1
h
G D

Par hypothèse inductive le nouveau nombre de noeuds est


(2 h+1
- 1) + (2 h+1- 1) + 1 = 2h+2 - 1 ……CQFD!
h h+1
Ou encore : n = 1+2+…+2 = 2 - 1 48
ABR : Compléxité de rechercher

Lemme 1: pour un ABR ayant n nœud et de hauteur h :

log2 n <= h <= n -1

Remarque: Un ABR parfait avec n noeuds a pour hauteur

h = log2 n
Car
h h+1
2 <= n <= 2 - 1 49
ABR : Compléxité de rechercher
Conséquence : pour un ABR plein avec N noeuds
la compléxité de searchABR:

meilleur cas ………… O(1)


Pire cas ………… O(log N)

50
ABR : compléxité de rechercher

• Maintenant que nous connaissons la


compléxité de searchABR que peut-on dire des
autres opérations?
Insertion ………… O(log N)
Suppression ………… O(log N)
Trouver le Min ………… O(log N)
Trouver le Max ………… O(log N)
Tri ABR = ………… O(N log N) Pourquoi?

Car: ABR tri = (Construction de l’ABR : N insertions)


+ (Parcourir ABR) 51
ABR : Compléxité de rechercher
• En résumé, il est nécessaire d’avoir un
ABR plein ou niveau-min ABR

Ä garder un arbre le plus équilibré possible


à tout moment (Arbre AVL)

52
Definition1 d’un tas
- Un tas est un arbre binaire dont tous les niveaux sont complètement
remplis sauf éventuellement le dernier. De plus, toutes les feuilles
doivent être le plus à gauche possible.
- On peut le représenter par un tableau A et un entier taille tels que les
éléments du tas soient dans A[1 . . . taille].
- Un tas max est un tas tel que la racine de tout sous-arbre est plus grande
que les éléments du sous-arbre
Definition 2 d’un tas
Definition d’un tas
Exercices : faire des exemples et rechercher la
complexité de :
- Insertion d’un élément ??
- Rechercher un élément ??
- Suppression d’un élément ??
Arbre équilibré et non équilibré
Arbre AVL
• Arbre AVL (Adelson-Velskii et Landis):
– Le meilleur ABR maintenant à tout moment un
arbre raisonnablement équilibré.
– Idée : si l’insertion ou la suppression provoque
un désiquilibre de l’arbre, rétablir l’équilibre.

– Toutes les opérations insertion, suppression,…


sur un arbre AVL avec N noeuds en O(log N)
(en moyenne et dans le pire cas!)
57
AVL Trees
Arbre AVL (propriété): c’est un ABR tq. la différence des
hauteurs du sous-arbre gauche et droit de la racine est d’au
plus 1 et les sous-arbres gauche et droit sont des AVL

Exemple:

58
Arbres AVL
Pour plus lisibilité , remplaçer les clés associées aux
nœuds en utilisant /, \, -, // et \\ pour représenter le
facteur d’équilibre d’un nœud :
/ : léger déséquilibre à gauche h(G) = 1 + h(D)
\ : léger déséquilibre à droite h(D) = 1 + h(G)
- : équilibré h(D) = h(G)
\\ : déséquilibre droit h(D) > 1 + h(G)

// : déséquilibre gauche h(G) > 1 + h(D)


59
Arbres AVL
Exemples :

/ -

- / // \\
- - - / \
- - - - - -

Les clés ne sont pas montré.


On suppose qu’elles satisfassent la propriété ABR
60
Arbres AVL
Un arbre AVL n’est ni un arbre plein ni un arbre niveau-min.
Insertions et suppression sont éffectuées de la même manière
que pour les ABR. Après chaque opération, on a besion de vérifier
la propriété d’AVL!. Car l’arbre peut ne plus l’être!

/ //
- - / -
- - / -
h diffère de 2!
nouveau -
noeuds 61
Arbres AVL
Après une insertion, si l’arbre est un AVL alors on ne fait rien.
Comme sur l’exemple ci-dessous :

- \ - /
- - - / -

- -
- /
/ \ - \ / \
- - - - - / - -
-

62
Arbres AVL
\
/ -

- - / \
- - - - - -
- - - -

Quand une insertion provoque le déséquilibre de l’arbre?


63
Arbres AVL : insertion d’un noeud
L’arbre devient déséquilibré si l’élément ajouté est le
descendant gauche (droit) d’un nœud avec un léger
déséquilibre gauche (droit). Alors la hauteur de ce sous-arbre
augmente.

Dans les figure suivantes, on note :

U: nouveaux nœuds pouvant déséquilibrer l’arbre


B: nouveaux laissant l’arbre équilibré

64
Arbres AVL: Insertion

\
/ -

- - / \
- - - - - -
B B - - - -
UU UU BBBB
U UUU U U UU

65
Arbres AVL: Insertion
Noter que l’insertion d’un nœud peut provoquer des
déséquilibre sur plusieurs nœuds.
Déséquilibre
par insertion //
/
/ - // -
- - - - / - - -
- - / -
- Le plus jeune ancêstre
du nœud inséré où la
propriété AVL est violée
nouveau noeud
66
Arbres AVL: Insertion
Supposons que le sous-arbre le plus haut est celui de gauche
et qu’un nœud est inséré pour augmenter la hauteur de ce
sous-arbre. L’arbre obtenu est déséquilibré
Rétablir un arbre AVL en utilisant des rotations
=> Soit A le plus jeune ancêtre où apparaît le déséquilibre
A
Dans l’arbre AVL, avant /
l’insertion, T1, T2 et T3
ont une hauteur h B
-
h T
Le même raisonnement peut être 3
utilisé si l ’arbre le plus haut est celui T1 h h T2
de droite 67
Rotations simples
Droite Gauche
Rotations Doubles
Droite Gauche
Arbres AVL: Insertion
Cas I: un nouveau nœud est inséré dans T1

Rééquilibrer par rotation droite:


P < B < q < A < r =>
Arbre Original A => propriété ABR maintenue!
// B
B r
/ -
p q h T3 p A
T1 -
T1 q r
h h T2
h+2 h+1 h+1
h T2 h T3
70
Arbres AVL: Insertion
Cas I: rotation Droite ou rotation Gauche

void RD(Arbre *a){ void RG(Arbre *a){


Arbre aux= (*a)->fg; Arbre aux= (*a)->fd;
(*a)->fg = aux->fd; (*a)->fd = aux->fg;
aux->fd= *a; aux->fg= *a;
*a= aux; *a= aux;
} }

71
Arbres AVL: Insertion
Cas II: nouveau noeud inséré dans T2

On a 3 cas a considérer :
A 1- nouveau nœud en C
/ 2- nouveau nœud ajouté à T2a
B s 3- nouveau nœud ajouté à T2b
-
p C h T3
T1 -
h
q s Les 3 cas sont similaires.
T2a h-1 h-1 T2b On considérera le cas 2.

72
Arbres AVL: Insertion
Cas II - T2a :
Rééquilibrage de l’arbre
A AVL avec une double rotation
// (gauche sur B et ensuite droite sur A)
B s
\
p C h T3
T1 /
h
q r
Cas II - T2b :
T2a h-1 h-1 T2b
Insertion en T2b => rotation
droite sur B et ensuite gauche
sur A
73
Arbres AVL: Insertion
Cas II - T2a :
Rotation gauche Rotation droite
sur B sur A
A
// C
C // s -
B- r h T3 B- A
\
p q h-1 T2b p q r s
T1 T2aT2b
h h-1 T2a T1 h h-1 h-1 h T3

La propriété ABR est maintenue! 74


Arbres AVL: Insertion
Cas II: nouveau noeud inséré dans T2
Cas II - T2a : Cas II - T2b :

void RGD(Arbre *a){ void RDG(Arbre *a){


RG( &((*a)->fg) ); RD( &((*a)->fd) );
RD(a); RG(a);
} }

75
Arbres AVL: Insertion

• Nous avons défini un arbre “équilibré” et nous


avons aussi montré comment insérer dans l’arbre
en utilisant les algorithmes ABR de manière à
maintenir l’équilibre (propriétés AVL) et la
propriété ABR.

76
Arbre AVL: Insertion (Algorithme)

• Propriété : Toute adjonction dans un AVL nécessite au


plus une rotation pour le rééquilibrer.
T
• Supposons que x soit ajouté en tant que feuille dans T.
C ’est uniquement sur le chemin de la racine à x que
vont intervenir des rotations éventuelles.
• On considère sur ce chemin le nœud le plus bas dont le
déséquilibre avant adjonction est non nul, et l ’on note
A le sous arbre enraciné en ce nœud A
• De par la nature des rotations, la hauteur de A n ’est ±1
pas modifiée par l ’adjonction de x (y compris en
prenant compte une rotation)
=> Dans l ’AVL résultant de l ’adjonction de x, le père
de A et tous ses ascendants ont exactement le Y
déséquilibre qu ’ils avaient avant l ’adjonction de x, il
n ’y a donc jamais besoin d ’effectuer de rotation « au-
dessus » de A, ni de mise à jour du déséquilibre. 77
Arbre AVL: Insertion (Algorithme)
• Algorithme d ’adjonction dans un AVL
Pour conserver la valeur du déséquilibre en chaque nœud de l ’arbre, on utilisera
les déclarations suivantes.
typedef struct n {
int val;
int deseq;
struct n * fg, *fd;
} nœud;
typedef nœud *AVL;
Principe :
Lors de la descente dans l ’arbre à la recherche de la place où l ’on doit ajouter x,
on mémorise le dernier sous-arbre A pour lequel le déséquilibre est ±1.
Après avoir ajouté x à la feuille Y, c ’est uniquement sur le chemin de A à Y qu ’il
est nécessaire de modifier les valeurs du déséquilibre. Il faut ensuite faire le cas
échéant, un rééquilibrage en A.

78
Arbre AVL: suppression
• La réorganisation de l ’arbre peut nécessiter plusieurs
rotations successives.
T -1
On veut supprimer 26, on le
26
remplace par 24, cette suppr
diminue la hauteur du sous-arbre
1 1 de racine 22 et le sous-arbre de
16 50 racine 16 est alors trop
1 déséquilibré.
-1
1 22 40 On le réorganise par une rotation
10
droite, mais cela accentue le
-1 déséquilibre du niveau
0 2 23
0 immédiatement supérieur et il faut
E faire une rotation droite gauche en
B
A 24 0
D 24. Les rotations peuvent ainsi
C
remonter en cascade jusqu ’à la
racine de l ’arbre.
=> 1.5 log2 n rotations.
=> la suppression est en O(log2 n)
79
Arbre AVL: suppression
• L ’arbre n ’est plus un AVL

T -1

24

2 1

16 50
1
0
1 22 40
10

0
0 2 23
0
E
B D
A C

On distingue différents80
cas…
Arbre AVL: suppression
• Cas I: Cas II:
T T

+1 0

A
A B B

• Ici la hauteur du sous-arbre


• Rienà faire, car la hauteur va évoluer(-1) localement :
de l’arbre n’a pas été aucun déséquilibre n ’est
modifié apparu, au contraire, le sous
• Avec -1 même situation arbre devient équilibré. Des
déséquilibre peuvent
apparaître plus haut !
81
Arbre AVL: suppression
• Cas III:
T

+2

B
A

Ici la hauteur du sous-arbre n’a pas évolué mais le déséquilibre


est passé à 2 : il faut intervenir; on distingue la différents cas de
figure qui sont liées au fils gauche :

82
Arbre AVL: suppression
• Cas III.1: T
T p
RD(T)
q -1
q
+2 +1
p
A
0
B C
C

A B

Il y a arrêt du traitement ici, puisque :


•le sous-arbre est équilibré
• sa hauteur n’a pas été modifiée (il est donc inutile de propager
le résultat vers le haut)
83
Arbre AVL: suppression
• Cas III.2: T
T p
RD(T)
q 0
q
+2 0
p
A
-1
B
C
C
B
A

Le sous-arbre est rééquilibré, mais la hauteur a été modifié


il faut remonter l ’information au dessus de T pour procéder
éventuellement à des rééquilibrage
=> appliquer le même principe que celui qui vient d ’être
appliqué en considérant I,II et les différents cas de III.
84
Arbre AVL: suppression
• Cas III.3:
T T
RD(T)
r q
+2 0
p p r
-1,0
-1 1,0
q
-1,0,+1 D
A A B C
D

B C

Le sous-arbre est rééquilibré, mais sa hauteur a diminué de 1


=> remonté de l ’information comme en III.2
85
Arbre AVL: suppression
Principe de l ’algorithme :
– Réorganisation de l’arbre de la feuille
supprimée jusqu’à la racine de l ’arbre avec
éventuellement des rotations (on s’arrête pour
les cas I ou III.1)
• recalcul des déséquilibres occasionnés par la
suppression et éventuelle exécutions des rotations
nécessaires du fait de nouveaux déséquilibres
• la propagation continue tant que l ’arbre demeure
déséquilibré lors de la remontée
• Au pire cas le nombre de rotation est log2 n
86
Arbres AVL : analyse de
compléxité
Soit T(n) la compléxité de l’insertion d’un
nœud dans un arbre AVL.

Quelle est la meilleur structure d’arbre AVL


possible?
– Arbre plein è T(n) = O(log n)

87
Arbres AVL : analyse de
compléxité
Le pire cas d’arbres AVL qu’on peut rencontrer sont
les AVL ayant la partie gauche (ou droite) en léger
déséquilibre pour tous les nœuds.

/
/ /
/ / / -
/ - - -
-
88
Arbres AVL : analyse de
compléxité
• Quelle est la hauteur maximale d’un AVL
avec N noeuds?
• Quelle est le plus petit nombre Nh de
noeuds d’un AVL avec une hauteur h :

Nh = 1 + Nh-1 + Nh-2

Chacun est le plus petit arbre avec les


tailles respectives 89
Arbres AVL : analyse de
compléxité
• La hauteur d’un arbre AVL avec n nœuds
est au plus égale à 1.44 log2 (n+2).
• La hauteur d’un arbre binaire avec n
noeuds est au moins égale à log2 (n+1).

log2 (n+1) <= height <= 1.44 log2 (n+2)

90
Arbres AVL : analyse de compléxité
• Soit Nh = min # noeuds d’un arbre AVL avec une
hauteur h.
• N0 = 0.
• N1 = 1.
• Nh, h > 1
• G et D sont des arbres AVL.
• La hauteur de l’un est h-1.
• La hauteur de l’autre est h-2. G D
• Le sous arbre ayant une hauteur h-1 à Nh-1 noeuds.
• Le sous arbre ayant h-2 à Nh-2 noeuds.
• alors, Nh = Nh-1 + Nh-2 + 1. 91
Arbres AVL : analyse de compléxité
Séquence de nombre de Fibonacci
• F0 = 0, F1 = 1.
• Fi = Fi-1 + Fi-2 , i > 1.
• N0 = 0, N1 = 1.
• Nh = Nh-1 + Nh-2 + 1, h > 1.
• Nh = Fh+2 – 1.
• Fi ~ φ i/ 5.
i
1 ⎡1+ 5 ⎤
• Fi ≈ ⎢ ⎥
5⎣ 2 ⎦
92
Arbres AVL : analyse de
compléxité
h+3
1 ⎡1+ 5 ⎤
Nh ≈ ⎢ ⎥
5⎣ 2 ⎦
⇒ h ≈ 1.44 log2 Nh
⇒ h ≈ 1.44 log2 N

Toutes les opérations AVL sont en O(log2 N)

93

Vous aimerez peut-être aussi