Vous êtes sur la page 1sur 33

No

No d'ordre : attribu par la bibliothque :

Universit DE CARTHAGE cole Suprieure de Technologie et d'Informatique Dpartement de Gnie lectrique

Support de Cours
STRUCTURES DE DONNES AVANCES & COMPLEXIT
PREMIRE ANNE D'INGNIEURS EN INFORMATIQUE APPLIQUE

Responsable du Module

Hazem FKAIER

Dernire mise--jour de ce document est eectue le : 5 mars 2012

A Ce document a tait gnr par L TEX 2

Prface

Ce support de cours est destin aux tudiants ingnieurs de la premire anne en Informatique Applique de l' cole Suprieure de Technologie et Informatique 1 . Le prsent document contient le support de cours de la matire  Strutures de Donnes Avances & Complexit . Le cours porte, dans sa premire partie sur des strutures de donnes avances de type Arbres Bianires de Recherche, Arbres AVL ou enocre Arbre rouges et noirs. La deuxime partie du cours porte sur la complexit et la prsentation de dirents paradigme de progarmmation comme : les algorithmes de type diviser pour rgner, les algorithmes glouttants ou encore la programmation dynamique. Outre que les exemples et applications illustratives du cours, chaque chapitre est suivi par une srie d'exercices .

1 ESTI,

www.esti.rnu.tn.

ii

Table des matires


1 LES ARBRES 1

1.1 Introduction . . . . . . . . . . . . . . . 1.2 Terminologie de base . . . . . . . . . . 1.2.1 Ordre sur les nuds d'un arbre 1.2.2 Parcours d'arbres . . . . . . . . 1.3 Les arbres binaires . . . . . . . . . . . 1.4 Les arbres bianires de recherche . . . . 1.5 Exercices . . . . . . . . . . . . . . . .

. . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1 2 3 4 5 5 6

2 LES ARBRES AVL

2.1 Introduction . . . . . . . . . . . . . . . . 2.2 Arbres AVL . . . . . . . . . . . . . . . . 2.3 Rquilibrage d'un AVL . . . . . . . . . 2.3.1 Rotation sur les AVL . . . . . . . 2.3.2 Rotation double . . . . . . . . . 2.4 Insertion d'un lment dans un AVL . . . 2.4.1 Principe de l'insertion . . . . . . 2.5 Suppression d'un lment dans un AVL . 2.6 Reprsentation des AVL par les pointeurs 2.7 Exercices . . . . . . . . . . . . . . . . .

9 10 10 11 12 12 15 15 15 17

3 LES ARBRES ROUGES ET NOIRS

3.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . 3.2 Insertion d'un lment dans un arbre rouge et noir . 3.2.1 Discussion . . . . . . . . . . . . . . . . . . . . 3.2.2 Cas 0 : le nud pre p est la racine de l'arbre 3.2.3 Cas 1 : le frre f de p est rouge . . . . . . . . 3.2.4 Cas 2 : le frre f de p est noir . . . . . . . . . 3.2.4.1 Cas 2a : x est le ls gauche de p . . 3.2.4.2 Cas 2b : x est le ls droit de p . . . 3.3 Suppression d'une valeur . . . . . . . . . . . . . . . . 3.3.0.3 Discussion . . . . . . . . . . . . . . 3.3.1 Cas 0 : le nud x est la racine de l'arbre . . 3.3.2 Cas 1 : le frre f de x est noir . . . . . . . . . iii

19

19 22 22 22 22 22 22 23 24 24 24 25

TABLE DES MATIRES

3.3.2.1 3.3.2.2 3.3.2.3 3.3.2.4

Cas Cas Cas Cas

1a : les deux ls g et d de f sont noirs . . . . . . . . 1b : le ls droit d de f est rouge . . . . . . . . . . . . 1c : le ls droit d est noir et le ls gauche g est rouge 2 : le frre f de x est rouge . . . . . . . . . . . . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

. . . .

25 25 26 26

iv

CHAPITRE 1 LES ARBRES


Introduction

1.1

L'arbre est une structure de donnes fondamentale en informatique. On rencontre cette structure dans tout les domaines de l'informatique :  Algorithmique (exp : mthodes de tri) ;  Compilation (arbres syntaxiques) ;  Intelligence articielle (arbres de dcisions, de rsolution, ) ...
Exemple 1 (Reprsentation d'une expression arithmtique)

 @   hh @ @ h A  @ @hh @   h + F  @   hh @ @ h B  @ @hh @   h C  @ @hh @   h D E  

A (B + C (D E)) F

Exemple 2 (Reprsentation d'une table de matire d'un livre) Livre Chap I S1.1 S1.2

1.2 Terminologie de base

Chap II S2.1 SS2.1.1 SS2.1.2 S2.2 S2.3 ChapIII Chap I SS1.1

LIVRE
@@hhhhh @ @ @@ h

Chap II SS2.1

Chap III SS2.3

rr r

SS1.2

h h h h hhh

SS2.2

SS2.1.1 SS2.1.2

rr

Exemple 3 (reprsentation d'un arbre gnalogique,. . .)

1.2

Terminologie de base

Un arbre est une collection d'lments homognes organise en niveaux. Chaque lment, appel  nud , d'un niveau donn peut tre reli plusieurs lments du niveau inferieur, par des branches ne formant pas de boucles (sinon on aaire un graphe). On peut dnir simplement un arbre de faon rcursive de la faon suivante :  un arbre d'lments de type T est soit vide,  soit forme d'une donne de type T appele  racine et d'un ensemble ni de taille variable d'arbre de type T appels sous-arbres. Un nud comme tout lment d'une liste, peut tre de n'importe quel type et les nuds sont lis par une relation dite de  parent . On appelle feuille la racine d'un arbre n'ayant pas lui mme de sous-arbres. La racine et les feuilles sont des nuds particuliers. Un sous-arbre d'un arbre et appel son  ls , et inversement celui-ci sera appel  pre de celui l. Deux sous-arbres du mme arbre sont des  frres .
Exemple 4 ()

 a  &   & &  b c d    d d   e f   b, e, f, d :feuilles de A ;

Arbre A

a : racine de A

Chapitre 1. LES ARBRES

c est le pre de e et de f d ls de a.

Soit n1 , . . . , nk une suite de nuds d'un arbre telle que ni est le parent de ni+1 pour 1 i < k. Cette suite est appele  chemin entre le noeud n1 et le nud nk . La longueur d'un chemin est gale au nombre d'arcs (le nombre de nuds qu'il contient -1).
Exemple 5 () Dans l'arbre A de l'exemple prcdent, le chemin a c f est de longueur 2.

S'il existe un chemin entre 2 nuds x et y , on dit que x est un  ascendant ou un  anctre de y et rciproquement que y est un  descendant de x.
Exemple 6 () Dans l'arbre A, les ascendants de c sont lui mme et a et ses descendants sont lui mme, e et f .
Remarque

Tout nud est la fois l'un de ses propres descenants et l'un de ses propres ascendants. La  profondeur d'un nud est la longueur du chemin entre la racine et ce nud.
Exemple 7 () La profondeur du noeud d de l'arbre A est gale 1.

1.2.1 Ordre sur les nuds d'un arbre

Les ls d'un noeud sont habituellement ordonns de gauche vers la droite.
Exemple 8 () Les deux arbres ordonns suivants sont dirents :
  a a   d d d   d   b c c b    

Si l'on dsir ignorer explicitement l'ordre des ls, on dit que l'on travaille sur un arbre non ordonn. L'ordre  gauche-droite permettant la comparaison d'enfants d'un mme pre peut tre tendu pour comparer 2 nuds qui ne sont pas lis par la relation ascendant-descendant. Si a et b sont 2 frres et si a est gauche de b, tout descendant de a est gauche de tout descendant de b.

1.2 Terminologie de base

Exemple 9 ()

Une rgle simple pour trouver tous le nuds situs droite ou gauche d'un noeud n est de tracer le chemin reliant la racine ce dernier. Toute les branches de l'arbre partant sur la gauche de ce chemin aboutissent aux noeuds situs gauche de n. Tout les nuds issus de branches sur la droite du chemin sont droite de n.
1.2.2 Parcours d'arbres

Il existe plusieurs manires de parcourir les nuds d'un arbre. Les trois parcours les plus imporants sont les parcours prx (ou prordre), postx (ou postordre) et inx (ou ordre). Un parcours d'un arbre est tout algorithme permettant d'accder une et une seule fois tout les nuds de l'arbre. Soit A un arbre de racine n et A1 , . . ., Ak k sous-arbres de A, comme suit : 1. Pour eectuer le parcours prx des nuds de A, on commence par la racine n puis on parcourt en prx les nuds de A1 , puis ceux de A2 . . .ainsi de suite jusqu' les nuds de Ak .
Exemple 10 ()

2. Pour eectuer le parcours postx des nuds de A, on eectue le parcours postx des nuds de A1 , puis ceux de A2 , . . ., Ak et l'on termine par la racine n.
Exemple 11 () ==> Parcours postx de T : 7, 1, 4, 5, 12, 10, 8, 2.

3. Pour eectuer le parcours inx des nuds de A, on commence par le parcours inx des nuds de A1 , puis on passe par la racine n, puis on eectue le parours inx des noeuds de A2 , . . ., Ak .
Exemple 12 () ==> parcours inx de T : 1, 7, 5, 4, 2, 8, 12, 10.

Les principes des procdures rcursives PREFIXE (resp. INFIXE) permettant le parcours prx (resp. inx) des nuds d'un arbre sont les suivants :

Chapitre 1. LES ARBRES

Procdure PREFIXE (n : nud) dbut lister(n) pour chaque ls f de n, s'il y en a, depuis le plus gauche jusqu'au le plus droite faire PREFIXE(f ) finpour fin Procdure INFIXE (n : nud) dbut si n est une feuille alors lister(n) sinon INFIXE(le ls le plus gauche de n) lister (n) pour chaque ls f de n, l'exception du plus gauche, depuis la gauche jusqu'au la droite faire INFIXE(f ) finpour finsi fin

La procdure eectuant le parcours postx peut tre facilement dduite partir de la procdure PREFIXE(). Exercice 1 ( pts) Appliquer les procdures PREFIXE(), POSTFIXE() et INFIXE() sur l'arbre de l'exemple XXX et donnez le rsultat obtenu avec chacune des 3 procdures. On suppose que les nuds 10 et 7 sont des ls gauches.

1.3

Les arbres binaires

Un AB est un arbre dans lequel chaque nud possde 0, 1 ou 2 ls (ls gauche et ls droite). Un AB peut tre vide. Chaque nud stocke une donne appele valeur du nud. La dnition rcursive d'un AB se rduit : Un AB est :  soit vide ;  soit form d'une racine et deux sous-arbres : le sous-arbre gauche et le sous-arbre droit qui sont eux-mme des AB.
1.4

Les arbres bianires de recherche

1.5 Exercices

1.5

Exercices

Exercice 2 (- pts) Lister les nuds de l'arbre ci-dessous suivant les parcours prx, postx et inx.
 B   C      E F G H         I J K L       M N    A 

 D 

Exercice 3 (- pts) Insrer les entiers 7, 2, 9, 0, 5, 6, 8, et 1 dans un arbre binaire de recherche vide. Que devient l'arbre prcdent aprs suppression de 2 puis de 7. Exercice 4 (- pts) Soit A un arbre binaire reprsent par pointeurs (utiliser les types NUD et ARBRE dnis en cours). a. crire des programmes rcursifs permettant les parcours prx, postx et inx. b. crire la version itrative du parcours prx. Exercice 5 (- pts) On se propose d'crire un ensemble de sous-programmes rcursifs permettant la manipulation d'un arbre binaire de recherche reprsente par pointeurs. En utilisant les types NUD et ARBRE dnis en cours, crire : 1. une fonction Recherche(x, A) qui retourne VRAI si l'lment x appartient l'arbre A et FAUX sinon. 2. une procdure Insertion(x, A) permettant l'insertion de l'lment x dans l'arbre A. On suppose ici que les lments de l'arbre ne peuvent pas tre dupliqus. 3. une fonction Suppression_Min(A) qui retourne l'lment de plus faible valeur dans l'arbre A. 4. En dduire une procdure Suppression(x, A) permettant de supprimer l'lment x dans l'arbre A. Exercice 6 (- pts)

1. 2. 3. 4.

crire une fonction qui teste si deux arbres binaires sont gaux ou non. crire une fonction qui transforme un arbre binaire en son symtrique par rapport la racine. crire une procdure qui construit une copie d'un arbre binaire. Soit un arbre binaire d'entiers. crire une fonction qui calcule la somme des valeurs dans un tel arbre.

Exercice 7 (- pts)

Soient A un arbre quelconque non vide et n un nud de A. On dnie le degr de n dans A comme tant le nombre de ses ls. Notons par N n2 le nombre de nuds de degr 2 et par N f le nombre de feuilles dans A. En supposant que A est un arbre binaire, on vous demande de :
6

Chapitre 1. LES ARBRES

1. Dterminer le nombre maximum de nuds de l'arbre A s'il est de hauteur h. 2. Montrer, en vous inspirant de la question prcdente, que N f = N n2 + 1. 3. crire une fonction pour calculer la hauteur h de l'arbre A.
Exercice 8 (session de contrle 2006 l'ESSTT : Arbres N -aires de Recherche. pts)

Nous rappelons qu'un arbre binaire de recherche est un arbre binaire (chaque nud admet au plus 2 ls) tel que toutes les valeurs stockes dans la descendance gauche d'un nud sont infrieures la valeur stocke dans ce nud et toutes les valeurs stockes dans la descendance droite d'un nud sont suprieures la valeur stocke dans ce nud. Ainsi, nous avons la proprit suivante : Proprit : le parcours inx d'un arbre binaire de recherche permet de lister ces valeurs dans l'ordre croissant. Le but de cet exercice est d'tendre cette proprit aux arbres n-aires (chaque nud admet, au plus, n ls). Nous appelons, alors, arbre n-aire de recherche chaque arbre n-aire dont le parcours inx permet de lister ces valeurs dans l'ordre croissant. 1. Rappeler la dnition du type des arbres n-aires d'entiers. 2. Soient A un arbre 3-aire reprsent ci-dessous et E = {3, 7, 8, 18, 16, 19}. Donner l'tat de A aprs l'insertion de chaque lment de l'ensemble E .
 10 I   PPP  c   P   5 15 E 20   

Indication : vrier chaque fois que l'arbre A vrie la proprit des arbres de recherche. 3. crire une fonction rcursive, valeur_max(), qui retourne la valeur la plus grande dans un arbre n-aire de recherche, sachant que les ls existants d'un nud sont stockes, de manire contigu, dans les cases d'un tableau de gauche vers la droite. 4. Nous supposons disposer des deux fonctions valeurs_max() et valeur_min() retournant, respectivement, la valeur la plus grande et la valeur la plus petite d'un arbre n-aire de recherche. En s'inspirant de la dnition nonce plus haut et en utilisant ces deux fonctions, crire la fonction rcursive de type binaire, Est_AN R(), qui retourne VRAI si un arbre n-aire pass en paramtre est un arbre n-aire de recherche et FAUX sinon. 5. crire la procdure rcursive Insert_val() qui permet d'insrer une valeur dans un arbre n-aire de recherche. Nous distinguons, entre autres, les cas suivant :  Si la valeur insrer est infrieure ou gale la valeur dans la racine alors l'insertion se fait dans le ls le plus gauche.  Si la valeur insrer est suprieure la valeur la racine alors  Si cette valeur est encadre entre les valeurs de deux ls successifs, alors insrer, selon les cas, gauche de l'un ou droite de l'autre.  Si on peut crer un nouveau ls alors l'insertion se fait dans un nouveau ls.

1.5 Exercices

CHAPITRE 2 LES ARBRES


AVL

2.1

Introduction

Complexit des algorithmes

Deux algorithmes produisant les mmes rsultats peuvent tre trs dirents du point de vue des mthodes utilies, de leur complxit et de leur ecacit. pratiques de l'excution.
Complxit thorique : c'est un ordre de grandeur des cots thoriques indpedant des conditions

Soient A et B deux algorithmes traitant le mme problme (de taille n) ayant les complexits temporelles (nombre d'oprtions eectues) suivantes  A : O (n ) = a.n + O (n1 )  B : O (n ) = b.n + O (n1 ) Nous disons que A est meilleurs que B si :  < alors A est meilleurs  = et a < b alors A est meilleurs

Motivation des AVL

L'ecacit des algorithmes d'insertion et de suppression dans un ABR dpend considrablement de la forme de l'arbre sur lequel on travaille.

2.2 Arbres

AVL

Exemple 1 (Formes d'un ABR)

 4 @   hh @ @ h 2 6   h hh @ @h h   h @ 3 5 7    hh h 8 

ABR1 : quilibr

 4  hh h 5  hh h 6  hh h 7  hh h 8  hh h 9  ABR2 : quivalent une liste chane

La recherche d'un lment dans l'ABR2 (appel arbre dgnr) prend un temps en O (n) alors qu'elle prend un temps en O (log2 (n)) dans le cas de l'ABR1 (n tant le nombre de nuds de l'arbre). On'a donc intrt avoir des arbres les moins hauts possible.
Remarque
ABR1 est appel arbre quilibr ou arbre AVL. La recherche dans un AVL est plus ecace.

Il faut donc maintenir l'quilibre de tous les nuds au fur et mesure des oprations d'isertion ou de suppression d'un nud dans un AVL.
2.2

Arbres

AVL

Dnition

Un arbre AVL (Adelson-Velskii, Landis, 1962) est un ABR particulier o on contrle la forme gnrale de l'arbre an d'optimiser les requtes de recherche tout moment. Un AVL vrie la proprit fondamentale suivante : les hauteurs des deux sous arbres gauche et droite de tout nud de l'arbre dirent de 1 au plus.
|h(fg ) h(fd )| 1

Proprit

tout sous-arbre d'un AVL est un arbre AVL.


2.3

Rquilibrage d'un

AVL

Pour rquilibrer un AVL aprs une insertion ou une suppression, on suppose que tout nud contient un champ annexe  bal (comme balance) contenant la dirence de hauteur entre le ls droit et le ls gauche :  0 : les deux sous-arbres du nud ont la mme hauteur ;  -1 : le sous-arbre gauche et plus haut que le sous arbre droit ;
10

Chapitre 2. LES ARBRES

AVL

 +1 : le sous-arbre droit et plus haut que le sous-arbre gauche. Aprs chaque insertion ou suppression, il faut regarder si cela a entran un dsquilibrage, et si c'est le cas on rquilibre l'arbre par des  rotations .

2.3.1 Rotation sur les

AVL

Il y a deux sortes de rotations : simple et double.


Rotation simple

Une rotation simple peut tre droite ou gauche :


La rotation Droite simple RD

La rotation droite simple est dnie par :

RD(r, (S, R, Q), T ) = (S, R, (r, Q, T ))

Mettre S la racine ( la place de r) et raecter le sous-arbre droit de S au sous-arbre gauche de r.


Exemple 2 (Rotation droite simple)
 r  @  hh @ @ h S  $$ T Q

 S @  @ @hh h r  $$ R Q T

RD

La rotation Gauche simple RG

La rotation gauche simple est l'opration inverse (ou symtrique) :


RG(s, R, (r, Q, T )) = (r, (S, R, Q), T )

mettre r la place de S et raecter le sous-arbre gauche de r au sous arbre de S .

11

2.4 Insertion d'un lment dans un

AVL

 r  $ $ $ S  @@hh R Q T

Exemple 3 (Rotation gauche simple)

 S  $ $ $  r  @@hh T R Q

RG

2.3.2 Rotation double

Une rotation double est simplement compose de deux rotations simples


La rotation double gauche droite RGD

Elle correspond une rotation gauche du sous-arbre gauche (G ) suivie d'une rotation droite (D).
Exemple 4 (Rotation double Gauche Droite)
j D  C   j   G  A  @@hh  x D  $ $ u v w  C       A D   @@hh @@hh u v w x

RGD

La rotation double droite gauche RDG

Elle est la symtrique RGD.


2.4

Insertion d'un lment dans un

AVL

Soit insrer un lment x dans un AVL A(r, Ag , Ad ). On suppose que x n'est pas dj prsent dans A et que A tait prcdemment quilibr. Si x < r, deux cas se prsentent aprs l'insertion de x :  la hauteur de Ag n'augmente pas : l'arbre reste alors quilibr ;
12

Chapitre 2. LES ARBRES

AVL

 la hauteur de Ag augmente : trois cas se prsentent. 1. h(Ag ) tait gale h(Ad ) 1 : dans ce cas l'arbre devient mieux quilibr qu'avant l'insertion. Ici, la hauteur de l'arbre n'augmente pas.
Exemple 5 (h(Ag ) = h(Ad ) 1)
@  @ @hh h Ag h1 h Ad
+1 r

 r 0  @@hh @ h Ag Ad

Avant l'insertion

Aprs l'insertion

2. h(Ag ) tait gale h(Ad ) : l'arbre reste quilibr


Exemple 6 (h(Ag ) = h(Ad ))
 r @  @ @hh h
0

 r 1 @  @ @hh h Ag Ad

Ag h1 h

Ad

Avant l'insertion

Aprs l'insertion

3. h(Ag ) tait gale h(Ad ) + 1 : l'arbre devient dsquilibr.


Exemple 7 (h(Ag ) = h(Ad ) + 1)
@  @ @hh h Ag h1 h h+1 Ad
1 r

 r 2 @  @ @hh h Ag Ad

Avant l'insertion

Aprs l'insertion

tudions maintenant les direntes possibilits qui se prsentent lorsque l'arbre est dsquilibr. Supposons qu'avant l'insertion h(Ad ) = h 1, h(Ag ) = h, elle a augment lors de l'insertion. Soit B le sous-arbre gauche de A. Deux cas se prsentent alors : a. B

penche gauche : le dsquilibre est caus par le ls gauche de B

Exemple 8 (B penche gauche)


13

2.4 Insertion d'un lment dans un

AVL
  B @  @ @hh h 0 A $ $
0

h1 h h+1

@  @ @ h  hh 0 B  r r Ad Bg Bd

1 A

@  @ @ h  hh 1 B  r r Ad Bg Bd

2 A

RD

Bg

Bd

Ad

Avant insertion b. B

Aprs insertion

Aprs rquilibrage

penche droite : le dsquilibre est caus par le ls droite de B

Exemple 9 (Rotation double Gauche Droite)


1  A    0   B  @@hh 0  Ad C  $ $ Bg Cg Cd h1 h h+1 2  A      +1  B  @@hh 1  Ad C  $ $ Bg Cg Cd 0  C   0   +1  B A      

RGD

Bg

Cg

Cd

Ad

Avant insertion

Aprs insertion

Aprs rquilibrage

Application 1 () Insrer dans l'ordre les llements 20, 18, 12, 14, 8 et 4. dans un AVL vide.
1  20  0  18  2  20  1 18  0  12  0  18  r  0  r 0 12 20   1  18  r  0  r 0 20 12   rr  0  0 8 14  

Insertion de 12

Rotation Droite

Insertion de 8 et 14

Insertion de 4

2  18  r  1  r 0 12 20   rr  1  0 8 14    0 4 

0  12  r  1  r 0 8 18   rr 0  0   0 4 14 20   

Rotation Droite

14

Chapitre 2. LES ARBRES

AVL

Application 2 ()

2.4.1 Principe de l'insertion

Aprs avoir insrer un lment dans un arbre AVL, on remonte dans l'arbre (en suivant le chemin de l'insertion) et on teste si les nuds qu'on croise sont balancs. Dans le cas contraire, on les rebalance par une rotation simple ou une rotation double et on continue monter vers la racine.

si le dsquilibre et caus par le ls gauche fg de A alors on eectue une rotation simple sur A ou bien une rotation double gauche-droite (sur fg , puis A) sinon on eectue une rotation simple gauche sur A ou bien une rotation double droite-gauche (sur fd , puis A) finsi
Remarque

Une insertion d'un lment dans un AVL donnera lieu au plus une opration de rotation (simple ou double).
2.5

Suppression d'un lment dans un

AVL

La suppression dans un AVL repose, comme la suppression dans un ABR sur le replacement de l'lment supprimer, disons x, par un autre lment. L'limination de x de l'arbre est susceptible de rduire la hauteur du sous arbre o se trouve x et de modier l'quilibe de l'arbre tout entier. Il faut donc rquilibrer l'arbre.
Remarque

Une suppression peut entraner plusieurs rotations. En eet, une seule rotation n'assure pas forcment que l'arbre soit quilibr.
Exemple 10 ()

2.6

Reprsentation des

AVL

par les pointeurs

On suit la mme reprsentation que pour le cas des ABR, en ajoutant un champ  bal dans chaque nud de l'arbre pour contenir la dirence entre la hauteur du ls droit et le ls gauche. On dnit alors le type NUD comme suit :
15

2.6 Reprsentation des

AVL

par les pointeurs

val : Typedonne bal : entier fd , fg : NUD

type NUD =enregistrement

finenregistrement

Exemple 11 () NUD :
val bal
fg fd

On peut dnir le type AVL comme un pointeur sur la racine d'un arbre :
type AVL = NUD

16

Chapitre 2. LES ARBRES

AVL

2.7

Exercices

Exercice 1 (- pts) On s'intresse aux arbres binaires de recherche et aux arbres AVL. 1- Considrons l'ensemble d'lments E ci-dessous. Reprsenter E sous la forme d'un ABR en insrant les lments dans l'ordre. E = {3, 5, 10, 15, 20, 25, 35, 75, 70, 65, 40, 37}. 2- Reprsenter E sous la forme d'un AVL en quilibrant chaque fois qu'il est ncessaire. 3- Supprimer, dans l'ordre, de l'AVL obtenu les valeurs suivantes : 75, 37, 70, 40, 65. Exercice 2 (- pts) Soient n donnes distinctes a1 , a2 , . . . , an . On suppose que les donnes sont insres dans l'ordre dans un arbre binaire de recherche vide, not A1 . 1. Dcrire la forme de A1 correspondant au pire des cas. Quelle est la hauteur h de A1 ? 2. Supposons maintenant qu'on dsire gnrer, partir des n donnes, un arbre AVL, not A2 , en rquilibrant, si ncessaire, l'arbre aprs chaque insertion. Il est connu que la hauteur moyenne hm dun arbre AVL peut tre dcrite par :
hm = c log2 (n),

o c 1.4. Comparer h avec hm pour : n = 50, n = 100 et n = 500. Conclure.


Exercice 3 (- pts)

1. 2. 3. 4.

crire une procdure RD permettant d'eectuer une rotation droite sur A. crire une procdure RG permettant d'eectuer une rotation gauche sur A. Dduire la procdure Insertion_AVL(). Dduire aussi la procdure Suppression_AVL.

Problme I
Le prsent problme traite les arbres binaires, les arbres binaires de recherche et les arbres AVL. Le but de ce problme est de vrier si un arbre binaire quelconque est un ABR et s'il est un arbre AVL. Il est aussi question de transformer un AB quelconque, en premier temps, en un ABR, et en deuxime temps, en un arbre AVL. Soient les dclarations suivantes :
Type Nud = enregistrement

val : entier fg, fd : Nud nenregistrement AB, ABR, AVL = Nud tels que AB est le type des arbres binaires, ABR celui des arbres binaires de recherche et AVL celui des arbres AVL. Notons que dans cette mise en uvre, nous ne retenons pas le champ  bal dans les nuds des arbres AVL.
17

2.7 Exercices

Partie A (Questions du cours - pts)

A.1. Rappeler la proprit qui rgie les ABR, que l'on notera P_ABR. A.2. Rappeler la proprit qui rgie les arbres AVL, que l'on notera P_AVL. A.3. Soient E = {1, 2, 3, 4, 5, 6, 7} et A un arbre AVL vide de type AVL. Donner l'tat de A aprs l'insertion, dans l'ordre, de chaque lment de E .
Partie B (Vrication des proprits - pts)

B.1. crire une primitive Nud_min(), qui trouve le nud qui contient la valeur minimale d'un arbre (AB ou ABR ou AVL) quelconque pass en paramtre. B.2. Nous admettons, ds maintenant, que nous disposons des deux primitives, Nud_min() et Nud_max() qui trouvent respectivement le nud qui contient la valeur minimale et le nud qui contient la valeur maximale d'un arbre binaire pass en paramtre. crire la fonction boolenne Est_ABR() qui rpond par VRAI ou faux suivant qu'un AB donn soit un ABR ou non. B.3. crire la fonction h() qui renvoie la hauteur d'un arbre (AB ou ABR ou AVL) donn. B.4. crire la fonction boolenne Est_Equilibr() qui rpond par VRAI ou FAUX suivant qu'un nud donn soit quilibr ou non (sans tenir compte de l'tat de ses ls). B.5. crire la fonction boolenne Est_AVL() qui rpond par VRAI ou faux suivant qu'un arbre binaire donn soit un arbre AVL ou non.
Partie C (Transformations - pts)

C.1. crire la primitive rcursive qui transforme un AB en un ABR. Le principe de la primitive tant comme suit : Jusqu' ce que le nud courant devienne un ABR :  S'il y a deux valeurs, l'une gauche de la racine et l'autre droite de la racine, qui violent P_ABR alors les permuter ;  S'il y a une seule valeur qui viole P_ABR alors la permuter avec la racine. Cette primitive est de type prx ou post-x ? Justier. C.2. crire la procdure RD() qui applique une rotation vers la droite sur un nud pass en paramtre. C.3. Nous admettons, ds maintenant, que nous disposons des deux procdures RD() et RG() appliquant, respectivement, une rotation vers la droite et une rotation vers la gauche, autour d'un nud pass en paramtre. crire une procdure qui transforme un ABR en un AVL. Le principe de la transformation tant : Tant que le nud courant n'est pas quilibr :  On fait en sort que ce nud devienne quilibr ;  On revisite un (ou les deux) ls, si besoin est. Noter que cette procdure est fortement rcursive et qu'elle n'est ni de type prx ni inx ni post-x, parce que l'quilibrage d'un nud peut engendrer le dsquilibrage de l'un de ces descendants et inversement l'quilibrage d'un nud peut engendrer le dsquilibrage de l'un de ces ascendants. Remarquer, aussi, que cette transformation n'obit pas aux mmes rgles que le rquilibrage eectu aprs l'insertion d'un lment dans un arbre AVL, parce que l'tat initial dans notre cas n'est pas un arbre AVL valable.

18

CHAPITRE 3 LES ARBRES ROUGES ET NOIRS


Introduction

3.1

Les arbres rouges et noirs sont une variante des arbres binaires de recherche. Leur intrt principal est qu'ils sont relativement quilibrs. On considre ici des arbres binaires de recherche o les valeurs sont portes par les nuds internes. Les feuilles ne sont pas prises en compte dans la hauteur de l'arbre.
Dnition

Un arbre binaire de recherche est un arbre rouge et noir s'il satisfait les proprits suivantes : 1. Chaque nud est soit rouge, soit noir. 2. les feuilles (Nil) sont noires, 3. les ls d'un nud rouge sont noirs, 4. le nombre de nuds noirs le long d'une branche de la racine une feuille est indpendant de la branche. La premire condition est simplement technique et sans grande importance. La seconde condition stipule que les nuds rouges ne sont pas trop nombreux. La dernire condition est une condition d'quilibre. Elle signie que s'il on oublie les nuds rouges d'un arbre on obtient un arbre binaire parfaitement quilibr. Dans un arbre rouge et noir, on peut toujours supposer que la racine est noire. Si elle est rouge, on change sa couleur en noire et toutes les proprits restent vries. Par commodit, on remplace les pointeurs null vers des sous-arbres vides par des feuilles sans cls. On les appelle nuds externes. Les nuds internes sont ceux qui ne sont pas externes.
Application 1 () Montrer qu'un arbre ayant n nuds internes possde n + 1 nuds externes.

19

3.1 Introduction

Fig.

3.1  Exemple d'arbre rouge et noir

Application 2 () Montrer que l'on ne peut pas avoir deux nuds rouges successifs le long d'un chemin d'un arbre rouge et noir (ARN).

En contrlant cette information de couleur dans chaque nud, on garantit qu'aucun chemin ne peut tre deux fois plus long que n'importe quel autre chemin, de sorte que l'arbre reste quilibr. Mme si l'quilibrage n'est pas parfait, on montre que toutes les oprations de recherche, d'insertion et de suppression sont en O(log2 n).
Hauteur

Un arbre binaire complet de hauteur h possde au plus 1 + 2 + . . . + 2h = 2h+1 1 nuds internes. Autrement dit, un arbre ayant n nuds internes est de hauteur au moins gale log2 (n + 1) 1. La hauteur minimale d'un arbre n nuds internes est atteinte lorsque l'arbre est parfaitement quilibr et que feuilles sont toutes sur un ou deux niveaux.
log2 (n + 1) 1 h

Les arbres rouges et noirs sont relativement bien quilibrs. La hauteur d'un arbre rouge et noir est de l'ordre de grandeur de log2 (n) o n est le nombre d'lments dans l'arbre. En eet, la hauteur h un arbre rouge et noir ayant n lments vrie l'ingalit
h 2 log2 (n + 1)

Hauteur noire

Pour un arbre rouge et noir, on appelle  hauteur noire le nombre k de nuds internes noirs le long d'une branche de la racine une feuille. On montre par rcurrence sur cette hauteur noire, qu'un arbre de hauteur noire gale k possde au moins 2k 1 nuds internes. Si cette hauteur noire vaut 0, l'arbre est rduit une seule feuille et il ne possde aucun nud interne. Si un arbre est de hauteur noire gale k > 0, alors ses sous-arbres gauche et droit sont au moins de hauteur noire k 1. Par hypothse de rcurrence, ils ont chacun au moins 2k1 1 nuds internes et l'arbre a au moins
(2k1 1) + (2k1 1) + 1 = 2k 1

20

Chapitre 3. LES ARBRES ROUGES ET NOIRS

nuds internes au total. Ceci montre que la hauteur noire k d'un arbre vrie
k log2 (n + 1)

. Puisque la racine peut tre suppose noire et qu'une branche ne contient pas deux nuds rouges conscutifs, la hauteur h de l'arbre vrie h 2k. Elle vrie donc nalement
h 2 log2 (n + 1)

Thorme

Un arbre rouge et noir contenant n nuds internes a une hauteur au plus gale 2 log2 (n + 1). Ce thorme montre bien que les arbres rouge et noir sont relativement quilibrs : la hauteur d'un arbre rouge et noir est au pire du double de celle d'un arbre binaire parfaitement quilibr. Toutes les oprations sur les arbres rouge et noir sont de cot O(h), c'est--dire O(logn), ce qui justie leur utilisation par rapport aux arbres binaires de recherche classiques.
Rotations

Les rotations sont des modications locales d'un arbre binaire. Elles consistent changer un nud avec l'un de ses ls. Dans la rotation droite, un nud devient le ls droit du nud qui tait son ls gauche. Dans la rotation gauche, un nud devient le ls gauche du nud qui tait son ls droit. Les rotations gauche et droite sont inverses l'une de l'autre. Elle sont illustres la gure ci-dessous. Dans les gures, les lettres majuscules comme A, B et C dsignent des sous-arbres.

Fig.

3.2  Rotations gauche et droite

21

3.2 Insertion d'un lment dans un arbre rouge et noir

3.2

Insertion d'un lment dans un arbre rouge et noir

L'insertion d'une valeur dans un arbre rouge et noir commence par l'insertion usuelle d'une valeur dans un arbre binaire de recherche. Le nouveau nud devient rouge de telle sorte que la proprit (4) reste vrie. Par contre, la proprit (3) n'est plus ncessairement vrie. Si le pre du nouveau nud est galement rouge, la proprit (3) est viole.
3.2.1 Discussion

An de rtablir la proprit (4), l'algorithme eectue des modications dans l'arbre l'aide de rotations. Ces modications ont pour but de rquilibrer l'arbre. Soit x le nud et p son pre qui sont tous les deux rouges. L'algorithme distingue plusieurs cas :
3.2.2 Cas 0 : le nud pre

est la racine de l'arbre

Le nud pre devient alors noir. La proprit (3) est maintenant vrie et la proprit (4) le reste. C'est le seul cas o la hauteur noire de l'arbre augmente.

Fig.

3.3  Le nud pre p est la racine de l'arbre

3.2.3 Cas 1 : le frre

de

est rouge

Les nuds p et f deviennent noirs et leur pre pp devient rouge. La proprit (4) reste vrie mais la proprit (3) ne l'est pas ncessairement. Si le pre de pp est aussi rouge. Par contre, l'emplacement des deux nuds rouges conscutifs s'est dplac vers la racine.
3.2.4 Cas 2 : le frre

de

est noir

Par symtrie on suppose que p est le ls gauche de son pre. L'algorithme distingue nouveau deux cas suivant que x est le ls gauche ou le ls droit de p.
3.2.4.1

Cas 2a : x est le ls gauche de p

L'algorithme eectue une rotation droite entre p et pp. Ensuite le nud p devient noir et le nud pp devient rouge. L'algorithme s'arrte alors puisque les proprits (3) et (4) sont maintenant vries.
22

Chapitre 3. LES ARBRES ROUGES ET NOIRS

Fig.

3.4  le frre f de p est rouge

Fig.

3.5  x est le ls gauche de p

3.2.4.2

Cas 2b : x est le ls droit de p

L'algorithme eectue une rotation gauche entre x et p de sorte que p deviennent le ls gauche de x. On est ramen au cas prcdent et l'algorithme eectue une rotation droite entre x et pp. Ensuite le nud x devient noir et le nud pp devient rouge. L'algorithme s'arrte alors puisque les proprits (3) et (4) sont maintenant vries.

Fig.

3.6  x est le ls droit de p

23

3.3 Suppression d'une valeur

Application 3 ()

Application 4 () Construire dans cet ordre un arbre rouge et noir, partir des nuds suivants A, L, G, O, R, I, T, H et M.

3.3

Suppression d'une valeur

Comme pour l'insertion d'une valeur, la suppression d'une valeur dans un arbre rouge et noir commence par supprimer un nud comme dans un arbre binaire de recherche. Si le nud qui porte la valeur supprimer a zro ou un ls, c'est ce nud qui supprimer et son ventuel ls prend sa place. Si au contraire, ce nud a deux ls, il n'est pas supprim. La valeur qu'il porte est remplace par la valeur suivante dans l'ordre et c'est le nud qui portait cette valeur suivante qui est supprim. Ce nud supprim est le nud au bout de la branche gauche du sous-arbre droit du nud qui portait la valeur supprimer. Ce nud n'a pas de ls gauche.
3.3.0.3

Discussion

Si le nud supprim est rouge, la proprit (4) reste vrie. Si le nud supprim est noir, on considre que le nud qui remplace le nud supprim porte une couleur noire en plus. Ceci signie qu'il devient noir s'il est rouge et qu'il devient  doublement noir s'il est dj noir. La proprit (4) reste ainsi vri mais il y a ventuellement un nud qui est doublement noir. An de supprimer ce nud doublement noir, l'algorithme eectue des modications dans l'arbre l'aide de rotation. Soit x le nud doublement noir.
3.3.1 Cas 0 : le nud

est la racine de l'arbre

Le nud x devient simplement noir. La proprit (3) est maintenant vrie et la proprit (4) le reste. C'est le seul cas o la hauteur noire de l'arbre diminue.

Fig.

3.7  le nud x est la racine de l'arbre

24

Chapitre 3. LES ARBRES ROUGES ET NOIRS

3.3.2 Cas 1 : le frre

de

est noir

Par symtrie, on suppose que x est le ls gauche de son pre p et que f est donc le ls droit de p. Soient g et d les ls gauche et droit de f . L'algorithme distingue nouveau trois cas suivant les couleurs des nuds g et d.
3.3.2.1

Cas 1a : les deux ls g et d de f sont noirs

Le nud x devient noir et le nud f devient rouge. Le nud p porte une couleur noire en plus. Il devient noir s'il est rouge et il devient doublement noir s'il est dj noir. Dans ce dernier cas, il reste encore un nud doublement noir mais il s'est dplac vers la racine de l'arbre. C'est ce dernier cas qui est reprsent la gure ci-dessous.

Fig.

3.8  les deux ls g et d de f sont noirs

3.3.2.2

Cas 1b : le ls droit d de f est rouge

L'algorithme eectue une rotation gauche entre p et f . Le nud f prend la couleur du nud p. Les nuds x, p et d deviennent noirs et l'algorithme se termine.

Fig.

3.9  le ls droit d de f est rouge

25

3.3 Suppression d'une valeur

3.3.2.3

Cas 1c : le ls droit d est noir et le ls gauche g est rouge

L'algorithme eectue une rotation droite entre f et g . Le nud g devient noir et le nud f devient rouge. Il n'y a pas deux nuds rouges conscutifs puisque la racine du sous-arbre D est noir. On est ramen au cas prcdent puisque maintenant, le frre de x est g qui est noir et les deux ls de g sont noir et rouge. L'algorithme eectue alors une rotation entre p et g . Le nud f redevient noir et l'algorithme se termine.

Fig.

3.10  le ls droit d est noir et le ls gauche g est rouge

3.3.2.4

Cas 2 : le frre f de x est rouge

Par symtrie, on suppose que x est le ls gauche de son pre p et que f est donc le ls droit de p. Puisque f est rouge, le pre p de f ainsi que ses deux ls g et d sont noirs. L'algorithme eectue alors une rotation gauche entre p et f . Ensuite p devient rouge et f devient noir. Le nud x reste doublement noir mais son frre est maintenant le nud g qui est noir. On est donc ramen au cas 1.

Fig.

3.11  le frre f de x est rouge

Exercice 1 ( pts) Supprimer les nuds A, L, G, O, R, I, T H M de l'arbre rouge et noir suivant

26

Table des gures


3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 3.9 3.10 3.11 Exemple d'arbre rouge et noir . . . . . Rotations gauche et droite . . . . . . . Le nud pre p est la racine de l'arbre le frre f de p est rouge . . . . . . . . x est le ls gauche de p . . . . . . . . x est le ls droit de p . . . . . . . . . . le nud x est la racine de l'arbre . . . les deux ls g et d de f sont noirs . . . le ls droit d de f est rouge . . . . . . le ls droit d est noir et le ls gauche g le frre f de x est rouge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . est rouge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20 21 22 23 23 23 24 25 25 26 26

27

TABLE DES FIGURES

28

Liste des tableaux

29