Vous êtes sur la page 1sur 155

Université Blida 1

Faculté des Sciences


Département d’Informatique
Master GSI (Génie des Systèmes Informatiques)
Semestre 1

ALGORITHMIQUE AVANCÉE

Mme AROUSSI

2015-2016

Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/


PRÉAMBULE

 Pré-requis: Cours (Algo1-S4, Algo 2-S5).

 UEF: GLOG (Génie Logiciel)

 Volume horaire hebdomadaire: 1.5H Cours + 1.5H TD

 Évaluation: continu + Examen

 Coefficient 1, Crédit 3

2
OBJECTIFS DU COURS

 Donner un panorama des structures et des méthodes


que nous retrouvons dans divers domaines
d'applications algorithmiques: codage, réseaux,
robotique, compilation, conception assistée par
ordinateur (CAO), etc...

 Savoir analyser et comparer les performances de


différentes solutions algorithmiques.

3
CONTENU DU COURS

I. Arbres de Recherche

II. Plus Courts Chemins

III. NP-Complétude

IV. Heuristiques & Méta-heuristiques

4
Université Blida 1
Faculté des Sciences
Département d’Informatique
Master GSI (Génie des Systèmes Informatiques)
Semestre 1

CHAPITRE I:
ARBRES DE RECHERCHE

Mme AROUSSI

2015-2016

Disponible sur https://sites.google.com/a/esi.dz/s-aroussi/


PLAN DU CHAPITRE I

 Introduction

 Définitions et Terminologies

 Topologie

 Partie I: Arbres Binaires

 Partie II: Arbres Binaires de Recherche (ABR)

 Partie III: Arbres AVL

 Partie IV: Arbres M-aire de Recherche (AMR)


6

 Partie V: B-Arbres
INTRODUCTION
 Dans les tableaux, nous avons :

 Un accès direct par indice (rapide)

 L’insertion et la suppression nécessitent des décalages

 Dans les Listes Linéaires Chaînées, nous avons :

 Un accès séquentiel lent

 L’insertion et la suppression se font uniquement par modification de

chaînage

 Les arbres représentent un compromis entre les deux :


 Un accès relativement rapide à un élément à partir de sa clé
7

 L’insertion et la suppression non coûteuses


INTRODUCTION
 De plus, les arbres sont des structures de données

fondamentales en informatique, très utilisés dans tous les

domaines, parce qu’ils sont bien adaptés à la

représentation naturelle d’informations homogènes

organisées, et d’une grande commodité et rapidité de

manipulation.

8
INTRODUCTION
 Leur usage est multiple, car il capte l’idée de hiérarchie; à

titre d’exemples, nous pouvons citer:

 Découpage d’un livre en parties, chapitres, sections,

paragraphes…,
Livre

C1 C2 C3

S1.1 S1.2 S2.1 S2.2 S2.3


9

S2.1.1 S2.1.2
INTRODUCTION
 Leur usage est multiple, car il capte l’idée de hiérarchie; à

titre d’exemples, nous pouvons citer:

 Hiérarchies de fichiers,

10
INTRODUCTION
 Leur usage est multiple, car il capte l’idée de hiérarchie; à

titre d’exemples, nous pouvons citer:

 Expressions Arithmétiques

 L’expression A - (B + C * (D - E)) * F A *
se représente facilement par un arbre + F
où apparaît clairement la priorité des
B *
opérations:
C -
11

D E
DÉFINITION & TERMINOLOGIES
 Un arbre est une structure de données (souvent dynamique)
représentant un ensemble de valeurs organisées
hiérarchiquement (non linéaire). Chaque valeur est stockée dans
un nœud. Les nœuds sont connectés entre eux par des arêtes
qui représentent des relations parent/fils.
Arêtes Nœuds
A

B C D

E F G H I
12

J K L
DÉFINITION & TERMINOLOGIES
 Racine: est le nœud qui n'a
Racine
pas de prédécesseur (parent) et
A
possède zéro ou plusieurs fils. La Nœud interne
racine constitue la caractéristique B C D

d'un arbre.
E F G H I
 Feuille : est un nœud qui n'a
pas de successeur (fils). Une
J K L
feuille est aussi appelée un nœud
externe. Feuilles

 Nœud interne : est tout nœud


13
qui admet au moins un
successeur (fils).
DÉFINITION & TERMINOLOGIES
 Fils d’un nœud : sont ses
successeurs. Dans l'exemple, F,
G, H, et I sont les fils du nœud D.
A
 Frères : sont les successeurs
ou les fils issus d'un même nœud B C D
(parent direct). Dans l'exemple,
B, C et D sont des frères. E F G H I

 Père : est un nœud qui admet


J L
au moins un successeur (fils). K

Dans l'exemple, D est le père des


14
nœuds F, G, H et I.
DÉFINITION & TERMINOLOGIES
 Sous arbre : est une portion
de l'arbre. Dans l'exemple, le
nœud G avec ces deux fils J et K
A
constituent un sous arbre.
 Une branche est une suite de B C D
nœuds connectés de père en fils
(de la racine à une feuille). E F G H I

A-B-E
 A-C J K L

 A-D-F
A-D-G-J 15

…..
DÉFINITION & TERMINOLOGIES
 Descendants d’un nœud :
sont tous les nœuds du sous arbre
de racine nœud. Dans l'exemple,
A
les descendants de D sont F, G,
H, I, J, K et L. B C D
 Ascendants d’un nœud :
sont tous les nœuds se trouvant E F G H I

sur la branche de la racine vers


J L
ce nœud. Dans l'exemple, les K

ascendants de J sont G, D et A.
16
Les ascendants de E sont B et A.
DÉFINITION & TERMINOLOGIES
 Taille d’un arbre: est le
nombre de nœuds qu’il possède.
 Taille de l’arbre ci contre = 12
A
 Un arbre vide est de taille
égale à 0.
B C D
Degré d’un nœud : est le
nombre de ses fils. Dans E F G H I

l'exemple, le degré de B est 1, le


degré de D est 4. J K L

 Ordre d’un arbre : est le


degré maximum de ses nœuds. 17

 Ordre de l’arbre ci contre = 4


DÉFINITION & TERMINOLOGIES
 Le niveau d'un nœud: est la distance qui le sépare de la
racine:
 Le niveau de la racine = 0
 Le niveau de chaque nœud est égale au niveau de son père plus 1
 Le niveau du nœud contenant ‘G' est égal à 2.
Niveaux Racine
0 ………………………………....... A

1 .…………………………………………….......
B C D

2 E F
………………..…………………………………………….......
G H I
18

3 …..…………..…………………………………………….......
J K L
DÉFINITION & TERMINOLOGIES
 La profondeur d'un arbre (ou sa hauteur) : est le plus
grand niveau, c-à-d la distance entre la racine et la feuille la plus
lointaine. Dans l'exemple, la profondeur de l'arbre est égal à 3

Niveaux Racine
0 ………………………………....... A

1 .…………………………………………….......
B C D

2 E F
………………..…………………………………………….......
G H I

19

3 …..…………..…………………………………………….......
J K L
DÉFINITION & TERMINOLOGIES
 Forêt : est un ensemble d'arbres.

B C D

E F H I

G L

J K
20
DÉFINITION & TERMINOLOGIES
Définition récursive
 Cas particulier: NIL est un arbre vide, contenant zéro nœud

 Cas général: SI n est un


Racine
nœud et si T1, T2, ...Tm sont Racine de T1
des arbres, ALORS on peut
construire un nouvel arbre en T1
Racine de T’1
connectant T1, T2, ...Tm
T’1
comme des fils à n.
 Chaque Ti est définit de la
même manière (récursivement).
 T1, T2, ...Tm sont alors des 21

sous- arbres de n.
TYPOLOGIE
Arbre binaire : est un arbre où le degré maximum d’un nœud
est égal à 2.
Arbre de Recherche Binaire : est un arbre binaire où la clé
de chaque nœud est supérieure à celles de ses descendants
gauche, et inférieure à celles de ses descendants droits.
Arbre m-aire d’ordre n : est un arbre ou le degré maximum
d’un nœud est égal à n.
B-Arbre d’ordre n: est un arbre où :
 la racine a au moins 2 fils
 chaque nœud, autre que la racine, a entre n/2 et n fils
22
 tous les nœuds feuilles sont au même niveau
 ……
PARTIE II:
ARBRES BINAIRES
PLAN DE LA PARTIE II

 Définition

 Modèle

 Parcours

 Exemples d’application

24
DÉFINITION
Un arbre binaire est un arbre où chaque nœud est connecté à
deux sous-arbres (un sous-arbre gauche et un sous-arbre droit).
Donc, un arbre binaire est un arbre d’ordre 2, c’est-à-dire que
chaque nœuds a au plus deux fils. Ainsi, le premier fils d'un nœud
n est appelé Fils-Gauche (FG) et le deuxième fils est appelé Fils-
Droit (FD). racine A

NIL
B F

C G K

D H I 25

J
DÉFINITION
 Un arbre binaire est dit strictement binaire si chaque nœud
interne (non feuille) a exactement 2 fils différents de NIL.
 Si un arbre strictement binaire a n feuilles Alors :
 le nombre total de ses nœuds = 2n-1.
 le nombre de ses nœuds non feuilles (nœuds internes) = n-1
A racine

 Le nombre de feuilles : n=6


B
(C, D,H, M, J, K) F

 Le nombre total de nœuds : C D G K

2n-1=11
H I
 Le nombre de nœuds 26

internes: n-1=5 (A, B, F, G, I) M


J
DÉFINITION
 Un arbre binaire complet est un arbre strictement binaire où
toutes les feuilles sont au même niveau.
 Dans un arbre binaire complet de profondeur « d » :
le nombre total de nœuds n = 20 + 21 + 22 + ... 2d = 2d+1-1
ainsi, d = log2(n+1) – 1
le nombre de nœuds internes = 2d-1
racine
le nombre de feuilles = 2d A

le nombre de nœuds dans le niveau i = 2i


B F

C D G K

27
DÉFINITION
 Un arbre binaire complet est un arbre strictement binaire où
toutes les feuilles sont au même niveau.
 Dans l’exemple ci dessous:
d = 2
le nombre total de nœuds n = 23-1 = 7
le nombre de nœuds internes = 22-1 = 3
racine
le nombre de feuilles = 22 = 4 A

le nombre de nœuds dans le niveau 1 = 2


B F

C D G K

28
MODÈLE

 L'arbre est implémenté souvent de manière dynamique

comme un ensemble de maillons (nœuds) chaînés entre eux.

 La structure d'un nœud de l'arbre est la suivante :

Structure de Données
TYPE Tnoeud = STRUCTURE
Info : Typeqq
FG : * Tnoeud
FD : * Tnoeud
FIN
VAR Arbre : * Tnoeud 29
MODÈLE
 On définit le modèle (machine abstraite) suivant d’un arbre
binaire:
Fonction Rôle
Info(p) permet d'accéder à l'information du nœud p
FG(p) permet d'accéder à l'information de fils gauche du nœud p
FD(p) permet d'accéder à l'information de fils droit du nœud p

Aff_info(p, x) permet de modifier l'information du nœud p

Aff_FG(p, x) permet de modifier l'information de fils gauche du nœud p

Aff_FD(p, x) permet de modifier l'information de fils droit du nœud p


permet de créer un nœud avec x comme information et
Créer_noeud(x) retourne la référence du nœud. Le nœud créé a Nil comme fils
gauche et droit.
30
Liberer_noeud(p) permet de libérer le nœud référencé par p.
PARCOURS
 Le parcours d’un arbre consiste à passer par tous ses
nœuds.
 Les parcours permettent d’effectuer tout un ensemble de
traitement sur les arbres.
 On distingue deux types de parcours :
 Des parcours en profondeur (depth-first) explorent
l'arbre branche par branche. Parmi lesquels: le Préordre,
l‘Inordre et le Postordre.
Des parcours en largeur (breadth-first) explorent
31
l'arbre niveau par niveau
PARCOURS EN PROFONDEUR
 Dans un parcours en profondeur, on descend le plus
profondément possible dans l’arbre puis, une fois qu’une
feuille a été atteinte, on remonte pour explorer les autres
branches en commençant par la branche « la plus basse »
parmi celles non encore parcourues.
 Le parcours en profondeur peut se faire en :
Préordre (Préfixe) : où on affiche la racine avant ses fils (Racine
FG FD),
Inordre (Infixe) : où on affiche le fils gauche avant sa racine et
son frère droit (FG Racine FD),
32
 Postordre(Postfixe) : où on affiche les fils avant leur racine (FG
FD Racine).
PARCOURS EN PROFONDEUR
 Ces parcours (préordre, inordre et postordre) sont des
parcours simples à définir et à programmer (en récursif).
 Soit R un arbre binaire (pouvant être vide : R=NIL).
 S'il n'est pas vide (n pointe le nœud racine), alors il a la forme
suivante (avec T1 et T2 des sous arbres définis de la même manière
que n) :
R

T1 T2

33

Sous arbre gauche G Sous arbre droit D


PARCOURS PREORDRE
 Le parcours préordre de R (s'il n'est pas vide) consiste à
visiter le nœud racine (R) ensuite parcourir récursivement
en préordre les sous arbres T1 (sous arbre gauche) puis T2
(sous arbre droit) ce qui donne : [ R , T1 , T2 ou RGD]

T1 T2

34

Sous arbre gauche G Sous arbre droit D


PARCOURS PREORDRE
 Le parcours préordre de R (s'il n'est pas vide) consiste à
visiter le nœud racine (R) ensuite parcourir récursivement
en préordre les sous arbres T1 (sous arbre gauche) puis T2
(sous arbre droit) ce qui donne : [ R , T1 , T2 ou RGD]

B C

D E F G

H I 35

Résultat de parcours: ABDH I EC FG


PARCOURS PREORDRE
 La procédure (récursive) qui affiche les valeurs en
parcours préordre d’un arbre de racine R est :

Procédure Préordre( R:* Tnoeud )


Début
SI R ≠ NIL
ecrire( Info(R) )
Préordre( FG(R) )
Préordre( FD(R) )
FSI
fin
36
PARCOURS INORDRE
 Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en inordre le sous arbre
gauche T1, puis visiter le nœud racine (R) ensuite parcourir
récursivement en inordre le sous arbre droit T2 ce qui donne
[ T1 , R , T2 ou GRD ]
R

T1 T2

37

Sous arbre gauche G Sous arbre droit D


PARCOURS INORDRE
 Le parcours inordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en inordre le sous arbre
gauche T1, puis visiter le nœud racine (R) ensuite parcourir
récursivement en inordre le sous arbre droit T2 ce qui donne
[ T1 , R , T2 ou GRD ]

B C

D E F G
38
H I
Résultat de parcours: HDIBEAFC G
PARCOURS INORDRE
 La procédure (récursive) qui affiche les valeurs en
parcours inordre d’un arbre de racine R est :

Procédure Inordre( R:*Tnoeud )


Début
SI R ≠ NIL
Inordre( FG(R) )
ecrire( Info(R) )
Inordre( FD(R) )
FSI
fin
39
PARCOURS POSTORDRE
 Le parcours postordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nœud racine (R) ce qui
donne [ T1 , T2 , R ou GDR]

T1 T2

40

Sous arbre gauche G Sous arbre droit D


PARCOURS POSTORDRE
 Le parcours postordre de R (s'il n'est pas vide) consiste
d'abord à parcourir récursivement en postordre les sous
arbres T1 puis T2 ensuite visiter le nœud racine (R) ce qui
donne [ T1 , T2 , R ou GDR]

B C

D E F G

H I
41

Résultat de parcours: HIDEBFGCA


PARCOURS POSTORDRE
 La procédure (récursive) qui affiche les valeurs en
parcours postordre d’un arbre de racine R est :

Procédure Postordre( R: *Tnoeud)


Début
SI R≠NIL
Postordre( FG(R) )
Postordre( FD(R) )
ecrire( Info(R) )
FSI
fin

42
PARCOURS EN PROFONDEUR
 On peut faire ces trois parcours sans utiliser la
récursivité. Il faudra alors un moyen pour pouvoir remonter
dans les branches de l'arbre:
 On pourra par exemple utiliser une structure de pile pour
sauvegarder les adresses des nœuds par lesquels on est descendu et
les dépiler quand on en aura besoin pour remonter.
 On peut aussi enrichir la structure des nœuds en incluant un
pointeur vers le nœud père.

 Il existe d'autres types de parcours en profondeur, comme


par exemple:
 Le préordre inverse (R T2 T1 ou RDG),
43
 L'inordre inverse (T2 R T1 ou DRG),
 Le postordre inverse (T2 T1 R ou DGR).
PARCOURS EN LARGEUR
 Dans le parcours par niveau, tous les nœuds d’un même
niveau sont traités avant de descendre au niveau suivant

A Résultat de parcours:
ABCDEFGH I
B C

D E F G

H I

44
PARCOURS EN LARGEUR
 Dans le parcours par niveau, tous les nœuds d’un même
niveau sont traités avant de descendre au niveau suivant
Procédure parcours_largeur( R:* Tnoeud )
Var F:filed’attente; P: *Tnoeud;
Debut
P←R;
Si R ≠ NIL Alors
Enfiler(F,P);
TQ (Non FileVide(F))
Defiler(F,P);
écrire(info(P));
Si FG(P) ≠ NIL Alors Enfiler(F,FG(P));
Si FD(P) ≠ NIL Alors Enfiler(F,FD(P)); 45
FTQ
Fin
EXEMPLES D’APPLICATION
 Représentation des Expressions Arithmétiques :
 Les expressions arithmétiques peuvent êtres représentées sous
forme d'arbre binaire. Les nœuds internes contiennent des
opérateurs, alors que les feuilles contiennent des valeurs
(opérandes).
 Exemple: l'expression (a-b)*((c+d)/e) sera représentée par l'arbre
suivant :
*

- /

a b + e
46

c d
EXEMPLES D’APPLICATION
 Représentation des Expressions Arithmétiques :
 Les différentes formes de représentation d’une expression
arithmétiques peuvent être trouvés en parcourant l’arbre:
 Le parcours en préordre (RGD) donne la forme polonaise préfixée,
 Le postordre (GDR) donne la forme postfixée
 Le parcours inordre (GRD) donne la forme infixée (forme normale
sans parenthèses)
*

- /

a b + e
47

c d
EXEMPLES D’APPLICATION
 Représentation des Expressions Arithmétiques :
 L’évaluation d’une expression arithmétiques peuvent se faire les
deux fonctions suivantes:
 La fonction Opérande(T) qui retourne vrai si T est un
opérande, sinon elle retourne faux.
 La fonction Calcul qui permet de calculer l’opération
arithmétique entre deux opérandes

48
EXEMPLES D’APPLICATION
 Représentation des Expressions Arithmétiques :
Fonction Eval_inordre(A: *Tnoeud): réel
SI (A= Null) alors
Retourner (0)
SINON
SI Operande(A) alors
Retourner (Info(A))
SINON
Eval ← Calcul(Eval(Fg(A)), Info(A), Eval(Fd(A)))
FSI
*

- /

a b + e 49

c d
PARTIE III:
ARBRES BINAIRES DE
RECHERCHE(ABR)
PLAN DE LA PARTIE III

 Définition

 Complexité

 Parcours

 Opérations de Recherche et de mise à jours (Insertion et

Suppression)
51

 Exemples d’application: Tri par ABR


DÉFINITION
 Un Arbre Binaire de Recherche (ABR) est un arbre
binaire ordonné tel que pour tout nœud n:
 Toutes les valeurs du sous-arbe gauche de n sont strictement
inférieures à la valeur de n, et

 Toutes les valeurs du sous-arbre droit de n sont supérieures ou


égales à la valeur de n.

52
DÉFINITION
 Un Arbre Binaire de Recherche (ABR) est un arbre
binaire ordonné tel que pour tout nœud « i »:
 Toutes les valeurs du sous-arbre gauche de « i » sont strictement
inférieures à la clé de « i », et

 Toutes les valeurs du sous-arbre droit de « i » sont supérieures ou


égales à la clé de « i ».

 Intérêt de cette propriété : diminuer la complexité


temporel de recherche, d’insertion et de suppression dans
l’arbre
53
COMPLEXITÉ
 Intérêt de cette propriété : diminuer la complexité
temporel de recherche, d’insertion et de suppression dans
l’arbre

87 ?

O (h) tel que h = log2(n) dans un 54


arbre équilibré O (n)
PARCOURS
 Voici un exemple d’un ABR contenant des valeurs
entières, appliquer les différents parcours vus sur les
arbres binaires. 20

15 59

5 27 71

3 10 33

55
8

52
 Le parcours inordre de cet arbre donne la liste ordonnée
55

suivante : 3, 5, 8, 10, 15, 20, 27, 33, 52, 55, 59, 71


OPÉRATION DE RECHERCHE
 La recherche est dichotomique, à chaque étape, un sous
arbre est éliminé:
 Rechercher (55)
55 ?
 Rechercher (FD(20))
20
 Rechercher (FG(59))
15 59
 Rechercher (FD(27))

 Rechercher (FD (33)) 5 27 71

 Élément trouvé
3 10 33

55
8 56

52
OPÉRATION DE RECHERCHE
Fonction RechercherABR (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R = Null alors
Retourner (Null)
Sinon
Si Info (R) = x alors
Retourner (R)
Sinon
Si Info(R)>x alors
Retourner (RechercherABR (FG(R), x))
Sinon
Retourner (RechercherABR (FD(R), x)) 57

Fin
OPÉRATION D’INSERTION
 L'insertion d'un élément se fait toujours au niveau d'une

feuille. Cette insertion dans un ABR doit maintenir la

propriété des arbres de recherche, ainsi:

1. Rechercher la position d’insertion

2. Raccorder le nouveau nœud à son parent

58
OPÉRATION D’INSERTION
+ 25

20

15 59

5 27 71

3 10 25 33

55
 RechercherPosition (25) 8

 Rechercher (FD(20)) 52

 Rechercher (FG(59))

 Position trouvé pour l’insertion, le père est le nœud 27


59
 Insérer 25 au niveau de la feuille dont le père est 27
OPÉRATION D’INSERTION

Fonction InsererABR (R:*Tnoeud, x: entier) : * Tnoeud


Debut
Si R = Null alors
RCreerNoeud(x)
Sinon
Si Info(R)>x alors
Aff_FG(R, InsererABR (FG(R), x))
Sinon
Aff_FD(R, InsererABR (FD(R), x))
Retourner (R)
Fin 60
OPÉRATION DE SUPPRESSION
 Pour supprimer le nœud « i » d’un ARB, il faudra le

rechercher. Une fois le nœud « i » trouvé, on se trouve

dans une des situations suivantes :

61
OPÉRATION DE SUPPRESSION
 Cas 1: Suppression d'une feuille
 Il suffit de l'enlever de l'arbre vu qu'elle n'a pas de fils.

 Exemple: supprimer le nœud i qui contient la valeur 8

1. Rechercher(8)

2. Libérer le nœud « i » 20

15 59

5 27 71

3 10 33

«i» 12 55
8 62

52
OPÉRATION DE SUPPRESSION
 Cas 2: Suppression d'un nœud avec un fils
 Il faut l'enlever de l'arbre en le remplaçant par son fils.

 Exemple: supprimer le nœud i qui contient la valeur 10

1. Rechercher(10)

2. Chainer le père de i avec le FD(i) 20

3. Libérer le nœud « i » 15 59

5 27 71

3 10 33
«i»

12 55 63

52
OPÉRATION DE SUPPRESSION
 Cas 2: Suppression d'un nœud avec un fils
 Il faut l'enlever de l'arbre en le remplaçant par son fils.

 Exemple: supprimer le nœud i qui contient la valeur 10

1. Rechercher(10)

2. Chainer le père de i avec le FG(i) 20

3. Libérer le nœud « i » 15 59

5 27 71

3 10 «i» 33

55
8 64

52
OPÉRATION DE SUPPRESSION
 Cas 3: Suppression d'un nœud avec deux fils
 Etape 1: On échange le nœud à supprimer avec son successeur
le plus proche (le nœud le plus à gauche du sous-arbre droit) ou
son plus proche prédécesseur (le nœud le plus à droite du
sous-arbre gauche). Cela permet de garder une structure d'arbre
binaire de recherche. 34

22 66

8 29 50 71

Le plus proche 56 70 81
17 25 prédécesseur

9 23 32 55 69
65
Le plus proche
successeur
OPÉRATION DE SUPPRESSION
 Cas 3: Suppression d'un nœud avec deux fils
 Etape 1  Cas A: On échange le nœud à supprimer avec son
successeur le plus proche (le nœud le plus à gauche ou le plus
petit du sous-arbre)

 Racine: 71

 La plus petite valeur : 69


34

22 66

8 29 50 71

17 25 56 70 81
66

9 23 32 55 69
OPÉRATION DE SUPPRESSION
 Cas 3: Suppression d'un nœud avec deux fils
 Etape 1  Cas A: On échange le nœud à supprimer avec son
successeur le plus proche (le nœud le plus à gauche ou le plus
petit du sous-arbre)

 Racine: 71

 La plus petite valeur : 69


34

66
Fonction Successeur (R: *Tnoeud): *Tnoeud
Debut 50 71
RFD(R)
Si R≠Null alors 56 70 81
TQ FG(R)≠Null faire RFG(R) 67
Retourner (R)
55 69
Fin
OPÉRATION DE SUPPRESSION
 Cas 3: Suppression d'un nœud avec deux fils
 Etape 1  Cas A: On échange le nœud à supprimer avec son
plus proche prédécesseur (le nœud le plus à droite ou le plus
grand du sous-arbre gauche).

 Racine: 50

 La plus petite valeur : 56

34

22 66

8 29 50 71

17 25 56 70 81
68

9 23 32 55 69
OPÉRATION DE SUPPRESSION
 Cas 3: Suppression d'un nœud avec deux fils
 Etape 1  Cas A: On échange le nœud à supprimer avec son
plus proche prédécesseur (le nœud le plus à droite ou le plus
grand du sous-arbre gauche).

 Racine: 50

 La plus petite valeur : 56


34

Fonction Predecesseur (R: *Tnoeud): *Tnoeud 66


Debut
RFG(R) 50 71
Si R≠Null alors
TQ FD(R)≠Null faire RFD(R)
56 70
Retourner (R) 69
Fin
55 69
OPÉRATION DE SUPPRESSION
 Cas 3: Suppression d'un nœud avec deux fils
 Etape 2: on applique à nouveau la procédure de suppression qui
est maintenant une feuille ou un nœud avec un seul fils.

 Ainsi, si on choisit d’échanger le nœud « 66 » avec son plus proche


successeur « 69 », on obtient
34

22 66
69

8 29 50 71

17 25 56 70 81

9 23 32 55 69
70
OPÉRATION DE SUPPRESSION
 Cas 3: Suppression d'un nœud avec deux fils
 Puis on applique à nouveau la procédure de suppression qui est
maintenant une feuille ou un nœud avec un seul fils.

 Ainsi, si on choisit d’ échanger le nœud « 66 » avec son plus proche


prédécesseur « 56 », on obtient
34

22 66
56

8 29 50 71

17 25 55 70 81

9 23 32 69
71
OPÉRATION DE SUPPRESSION
 En conclusion, pour supprimer le nœud « i » d’un ARB, il
faudra le rechercher. Une fois le nœud « i » trouvé, on se
trouve dans une des situations suivantes :
«i»
Cas Action
FG FD
Feuille Null Null Remplacer « i » par Null
Avec un Null ≠Null Remplacer « i » par FD(i)
fils ≠Null Null Remplacer « i » par FG(i)
1. Rechercher le plus proche
Avec prédécesseur ou successeur de « i »,
deux ≠Null ≠Null soit P.
fils 2. Remplacer Info(i) par Info(P)
72
3. Remplacer P par FG(P) ou FD(P)
OPÉRATION DE SUPPRESSION
Fonction SupprimerABR (R:*Tnoeud, x: entier) : * Tnoeud
Debut
Si R = Null alors
Retourner (R)
Sinon
Si Info(R)>x alors
Aff_FG(R, SupprimerABR (FG(R), x))
Retourner (R)
Sinon
Si Info(R)<x alors
Aff_FD(R, SupprimerABR (FD(R), x))
Retourner (R)
Sinon // Info(R) = x
Retourner (SupprimerRacine (R))
73
Fin
OPÉRATION DE SUPPRESSION
Fonction SupprimerRacine (R:*Tnoeud) : * Tnoeud
Debut
Si FG(R) = Null alors
Si FD(R) = Null alors //Cas n°1: R est une feuille
LibérerNoeud(R)
Retourner (Null)
Sinon //Cas n°2: R possède un FD
DFD(R)
LibérerNoeud(R)
Retourner (D)
Sinon
Si FD(Q) = Null alors //Cas n°2: R possède un FG
GFG(R)
LibérerNoeud(R)
Retourner (G)
Sinon // Cas n°3: R possède deux fils
SSuccesseur (R)
Aff_Info (R, Info(S))
Aff_FD(R, SupprimerABR (DF(R), Info(S))) 74
Retourner (R)
Fin
EXEMPLE D’APPLICATION: TRI PAR ABR
 Étant donné un tableau d’entiers T (n: sa taille), dire

comment peut on trier ce tableau en utilisant un Arbre

Binaire de Recherche (ABR)?

 Exemple:

20 15 10 35 19 13 5 3 12 7 16 40 25 38

75
EXEMPLE D’APPLICATION: TRI PAR ABR

1. Insérer toutes les éléments du tableau dans un


ABR

20 15 10 35 19 13 5 3 12 7 16 40 25 38

20

15 35

10 25 40
19
5 13 38
76

16
3 7 12
EXEMPLE D’APPLICATION: TRI PAR ABR

2. Parcourir l’ABR en inordre : GRD


20

15 35

10 25 40
19
5 13 38

16
3 7 12

3 5 7 10 12 13 15 16 19 20 25 35 38 40 77
EXEMPLE D’APPLICATION: TRI PAR ABR
Procedure Tri_ARB(Var T: Tableau, n: entier)

Debut

RNull

Pour i0 à n-1 faire RInsererABR (R, T[i]).

Inordre (R, T); //Parcours Infixe

Fin
Indice est une variable globale initialisée à 0
Procedure Inordre (R: *Tnœud, Var T: Tableau)
Si ( R  Null) alors //Arbre n’est pas vide
Inordre(FG(R), T))
T[indice]Info(R) //Écrire la valeur dans le tableau
indice++ 78

Inordre(FD(R), T)
PARTIE IV:
ARBRES BINAIRES DE
RECHERCHE ÉQUILIBRÉS
(ARBRES AVL)
PLAN DE LA PARTIE IV

 Introduction

 Définition

 Techniques d’équilibrage

 Opérations de Base: Recherche, Insertion et

80
Suppression
INTRODUCTION
 La complexité au meilleur des cas de la recherche, de
l’insertion et de la suppression dans un ABR est O(h), où
h est la hauteur (ou profondeur) de l’arbre. Ce cas est
atteint par des arbres équilibrés

 Cependant, la complexité au pire cas pour un arbre à n


nœuds, est O(n). Ce cas est atteint par des arbres très
déséquilibrés, ou «filiformes».

 Plusieurs espèces des arbres équilibrés ont été


développés: les arbres AVL, les arbres 2-3, les arbres
81
rouge et noir, etc.
INTRODUCTION

ABR Equilibré Filiformes

87 ?

O (h) tel que h = log2(n) O (n) 82


DÉFINITION
 Les arbres AVL ont été introduits par les finlandais Adelson-
Velskii et Landis dans les années 60.
 Un arbre AVL est un ABR équilibré dont:
 la différence de hauteur (ou profondeur) entre le sous-
arbre gauche et le sous-arbre droit d'un nœud « R » diffère
d'au plus 1.
|Profondeur(FG(R) ) – Profondeur(FD(R)) | ≤ 1
 les arbres gauches et droits d'un nœud sont des arbres
AVL.
 Un champs supplémentaire est ajouté à tous les nœuds: c’est le
facteur de déséquilibre (appelé aussi facteur de balance «
83
Bal ») qui est calculé après chaque insertion/suppression.
EXEMPLE
 Exemple: soit l’ABR suivant. Est-il un arbre AVL?
Notons:
 qu’une feuille est un +1
100
arbre de hauteur 0,
 et que l’arbre vide a la +1
50
+1
200
hauteur −1.
 L’arbre vide et l’arbre
0
30 0
80 0
150
réduit à une feuille,
sont des arbres AVL 0
10 40

À vérifier pour chaque nœud R, on a:


84
| Profondeur(FG(R) ) – Profondeur(FD(R)) | <= 1

Cet arbre est un arbre AVL


EXEMPLE
 Exemple: Cet ABR est un arbre AVL avant insertion
Insérer la valeur 5 +1
100

+1
50
+1
200

0
30 0
80 0
150

0 0
10 40

85
EXEMPLE
 Exemple: Cet ABR est un arbre AVL avant insertion
Insérer la valeur 5 100

Après insertion, calculer le +2 50 +1 200


facteur de déséquilibre de
chaque nœud. +1 30 0
80 0
150

+1 10 0 40

5 0

Cet arbre n’est pas un arbre AVL après insertion de 5 86

 arbre déséquilibré
EXEMPLE
 Exemple: Cet ABR est un arbre AVL avant insertion
Insérer la valeur 45 +1
100

+1
50
+1
200

0
30 0
80 0
150

0 0
10 40

87
EXEMPLE
 Exemple: Cet ABR est un arbre AVL avant insertion
Insérer la valeur 45
100

+2 50 +1 200

-1 30 0
80 0
150

0 10 -1 40

45 0

Cet arbre n’est pas un arbre AVL après insertion de 45 88

 arbre déséquilibré
TECHNIQUES D’ÉQUILIBRAGE
 L’opération d’équilibrage, appelée rotation, s’applique à tous les
arbres binaires.
 Le but des rotations est de pouvoir rééquilibrer un ABR.
 On opère donc une rotation gauche lorsque l’arbre est
«déséquilibré à droite», i.e. son sous-arbre droit est plus haut
que son sous-arbre gauche.
 On opère une rotation droite dans le cas contraire à savoir son
sous-arbre gauche est plus haut que son sous-arbre droit.
 Les rotations ne sont donc définies que pour les arbres binaires non
vides dont le sous-arbre gauche (pour rotation gauche) et sous-arbre
droit (pour rotation droite) n’est pas vide.
89
 Les rotations préservent l’ordre des données d’un ABR (parcours
inordre).
TECHNIQUES D’ÉQUILIBRAGE
 Rotation simple : Rotation droite

 Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).

 La rotation droite est l’opération:

((X, P, Y), R, Z) → (X, P, (Y, R, Z))

+2
0
R P
Rotation droite
P 0
+1 R

Z
(hauteur
h)
X
Y (hauteur
h+1)
X
(hauteur
h) Y Z
(hauteur (hauteur 90
(hauteur
h+1) h) h)

Déséquilibre gauche
TECHNIQUES D’ÉQUILIBRAGE
 Rotation simple : Rotation droite

 Soit A=(B, R, Z) un arbre binaire tel que B=(X, P, Y).

 La rotation droite est l’opération:

((X, P, Y), R, Z) → (X, P, (Y, R, Z))

+2
-1
R P
Rotation droite
P +1
0 R

Z
(hauteur
h-1)
X
(hauteur

X Y h)
Y Z
(hauteur
(hauteur (hauteur 91
(hauteur
h) h) h-1)
h)

Déséquilibre gauche
TECHNIQUES D’ÉQUILIBRAGE
 Rotation simple : Rotation gauche

 Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).

 La rotation gauche est l’opération:

( X, R, (Y, P, Z)) → ((X, R, Y), P, Z)

-2 Rotation gauche 0
R P

-1 0 R
P

X
(hauteur
Z
h)
Y
(hauteur Z X Y (hauteur
h+1)
h) (hauteur (hauteur h)
(hauteur h)
h+1) 92

Déséquilibre droit
TECHNIQUES D’ÉQUILIBRAGE
 Rotation simple : Rotation gauche

 Soit A=(X, R, B) un arbre binaire tel que B=(Y, P, Z).

 La rotation gauche est l’opération:

( X, R, (Y, P, Z)) → ((X, R, Y), P, Z)

-2 Rotation gauche +1
R P

0 -1 R
P

X
(hauteur
Z
h-1)
X Y
Y Z (hauteur h-1)
(hauteur
(hauteur
h)
(hauteur (hauteur h)
h) h) 93

Déséquilibre droit
TECHNIQUES D’ÉQUILIBRAGE
 Rotation double : double rotation gauche-droite

 C’est une rotation gauche sur le sous arbre-gauche du nœud r

suivie d’une rotation droite sur le nœud r

Rotation gauche Rotation droite


+2 R R Q
+2 0
-1 P +1 Q P R
0 0
D D
Q (h) P (h)

A 0 0
(h) C A B C D
(h) (h) (h)
(h) (h)

A B
B C (h) (h)
(h) (h)
94

((A, P, (B, Q, C)), R, D) → (((A, P, B), Q, C), R, D) → ((A, P, B), Q, (C, R, D))
TECHNIQUES D’ÉQUILIBRAGE
 Rotation double : double rotation gauche-droite

 C’est une rotation gauche sur le sous arbre-gauche du nœud r

suivie d’une rotation droite sur le nœud r

Rotation gauche Rotation droite


+2 R R Q
+2 0
-1 P +2 Q P R
0 -1
D D
Q (h) P (h)
A +1 0
(h) C A B C D
(h) (h) (h)
(h-1) (h-1)

A B
B C (h) (h)
(h) (h-1)
95

((A, P, (B, Q, C)), R, D) → (((A, P, B), Q, C), R, D) → ((A, P, B), Q, (C, R, D))
TECHNIQUES D’ÉQUILIBRAGE
 Rotation double : double rotation gauche-droite

 C’est une rotation gauche sur le sous arbre-gauche du nœud r

suivie d’une rotation droite sur le nœud r

Rotation gauche Rotation droite


+2 R R Q
+2 0
-1 P +1 Q P R
+1 0
D D
Q (h) P (h)

A -1 +1
(h) C A B C D
(h) (h-1) (h)
(h) (h)

A B
B C (h) (h-1)
(h-1) (h)
96

((A, P, (B, Q, C)), R, D) → (((A, P, B), Q, C), R, D) → ((A, P, B), Q, (C, R, D))
TECHNIQUES D’ÉQUILIBRAGE
 Rotation double : double rotation droite-gauche
 C’est une rotation droite sur le sous arbre-droit du nœud r suivie
d’une rotation gauche sur le nœud r
Rotation droite Rotation gauche
-2 R R
Q
-2
0
P Q
A
R P
+1 -1
A (h) 0 0
(h) Q P
0 D B 0
(h) (h) A B C D
(h) (h) (h) (h)
B C C D
(h) (h) (h) (h)

97

(A, R, ((B, Q, C), P, D)) → (A, R, (B, Q, (C, P, D))) → ((A, R, B), Q, (C, P, D))
TECHNIQUES D’ÉQUILIBRAGE
 Rotation double : double rotation droite-gauche
 C’est une rotation droite sur le sous arbre-droit du nœud r suivie
d’une rotation gauche sur le nœud r
Rotation droite Rotation gauche
-2 R R
Q
-2
0
P Q
A
R P
+1 -1
A (h) 0 -1
(h) Q P
+1 D B -1
(h) (h) A B C D
(h) (h) (h-1) (h)
B C C D
(h) (h-1) (h-1) (h)

98

(A, R, ((B, Q, C), P, D)) → (A, R, (B, Q, (C, P, D))) → ((A, R, B), Q, (C, P, D))
TECHNIQUES D’ÉQUILIBRAGE
 Rotation double : double rotation droite-gauche
 C’est une rotation droite sur le sous arbre-droit du nœud r suivie
d’une rotation gauche sur le nœud r
Rotation droite Rotation gauche
-2 R R
Q
-2
0
P Q
A
R P
+1 -2
A (h) 1 0
(h) Q P
-1 D B 0
(h) (h-1)
A B C D
(h) (h-1) (h) (h)
B C C D
(h-1) (h) (h) (h)

99

(A, R, ((B, Q, C), P, D)) → (A, R, (B, Q, (C, P, D))) → ((A, R, B), Q, (C, P, D))
OPERATIONS DE BASE
 La recherche est identique à celui des ABR car les
arbres AVL sont avant tout des ABR équilibrés.
 L’insertion d’un élément dans un arbre AVL peut
provoquer un déséquilibre. Donc, pour rétablir l’équilibre
(rééquilibrer) de l’arbre après une insertion, une seule
rotation ou double rotation suffit.
 La suppression d’un élément dans un arbre AVL peut
provoquer un déséquilibre. Donc pour rétablir l’équilibre
(rééquilibrer) de l’arbre après une suppression, il faut
jusqu’à h rotations (h est la hauteur de l’arbre) ou double
100

rotations.
INSERTION
 L’ajout d’un nœud se fait toujours au niveau d’une feuille,
puis on rééquilibre l’arbre AVL si l’insertion a
déséquilibré l’arbre.

 Le déséquilibre est rencontré lorsque le facteur


d’équilibrage d’un nœud de l’arbre égale à ± 2.

101
INSERTION
 Exemple: soit la série de nombres à insérer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14 2 10 12 4 16 8 6 14
-2
2
0
2

10 -1
2 10 12 4 16 8 6 14
Rotation simple
2 -1 12 0

10 0 10 0

102

2 0 12 0
INSERTION
 Exemple: soit la série de nombres à insérer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14 2 10 12 4 16 8 6 14

10 1
10 0

2 -1 12 0 2 -1 12 -1

4 0 4 0 16 0

103
INSERTION
 Exemple: soit la série de nombres à insérer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14
10 1

0
10

2 -2 12 -1

Rotation 4 0
12 -1

simple
-1
4 16 0

0 2 8 0 16 0

104
8 0
INSERTION
 Exemple: soit la série de nombres à insérer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14

10 1

4 -1 12 -1

0 2 8 1 16 0

105
6 0
INSERTION
 Exemple: soit la série de nombres à insérer dans un
arbre AVL (2 10 12 4 16 8 6 14 )

2 10 12 4 16 8 6 14
1
10 0 10

12 4 -1 14 0
4 -1 -2
Rotation
double
0
2 8 1 16 1 2 8 1 12 16
0
0 0

6 14 0 6 0 106
0
INSERTION
 Exemple 2: soit l’arbre suivant, donner le résultat après
insertion de 7

10

4 14

2 8 12 16

1 6 9

107
INSERTION
 Exemple 2: soit l’arbre ci-dessus, donner le résultat
après insertion de 7

2
10 8
0

4 -1 14 0

Rotation 0
4 10
-1

double
1
2 8 1 12 16
0 0
14 0
1
2 6 -1 9 0
0
1 6 -1 9 0

12 16
0
1 7 0 0
0
7
0 108

Nœud inséré
INSERTION
Après insertion à gauche Avant Après insertion à droite

+1 R 0 R -1 R

h+1 h h h h h+1

+2 R Cas A +1 R 0 R

h+2 h h+1 h h+1 h+1

0 -1 R -2 Cas B
R R

h+1 h+1 h h+1 h h+2


109
INSERTION
 Remarques:
 Après une insertion, seules les nœuds qui sont sur le chemin du
point d’insertion à la racine sont susceptibles d’être déséquilibrés.

 Cas A: L’arbre devient non équilibré quand le nouveau nœud


inséré est un descendant gauche d’un nœud qui avait un facteur
d’équilibrage égal à 1

 Cas B: L’arbre devient non équilibré quand le nouveau nœud


inséré est un descendant droit d’un nœud qui avait un facteur
d’équilibrage égal à -1

110
+2 Cas A
R
INSERTION
h+2 h

Avant
+1 R

0 P
h

+2 R h h +2 R

+1 P -1 P
h h

h+1 h h h+1

Si insertion dans le sous-arbre Si insertion dans le sous-arbre droit


111
gauche du fils gauche alors du fils gauche alors Rotation
Rotation Simple à droite Double Gauche-Droite
Cas B
-2 R INSERTION
Avant
h h+2 -1 R

0 P
h

h h

-2 R -2 R

+1 P -1 P
h h

h+1 h h h

Si insertion dans le sous-arbre gauche Si insertion dans le sous-arbre


112
du fils droit alors Rotation Double droit du fils droit alors Rotation
Droite-Gauche Simple à gauche
SUPPRESSION
 Le principe de la suppression d’un élément dans un arbre

AVL est le même que dans un ABR, c.à.d. recherche de

l’élément à supprimer, suppression et remplacement, le

cas échéant, par l’élément qui lui immédiatement

inférieur ou supérieur.

 Après la première phase de la suppression, la hauteur de

l’arbre est diminué de 1. Le problème est que cet arbre

n’est plus forcément un arbre AVL. Il faut donc 113


le

rééquilibrer.
SUPPRESSION
 S’il y a déséquilibre, la rotation appliquée peut diminuer

à son tour la hauteur de l’arbre et générer un nouveau

déséquilibre. En fait les rotations peuvent s’enchainer en

cascade depuis l’élément supprimé jusqu’à la racine.

Ainsi, on peut faire jusqu’à h simple rotations ou double

rotations (h est la hauteur de l’arbre initial).

114
SUPPRESSION
 Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 10:

0 0
8 8

0 0
4 10
-1
4 12
-1

14 0
14 -1
1
2 6 -1 9 0 1
2 6 -1 9 0

0
1 12 16 0 0
1 16 0
7 0 0 7 0

115
SUPPRESSION
 Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 8:

0 0
8 9

0 0
4 12
-1
4 12
-2

14 -1 14 -1
1
2 6 -1 9 0 1
2 6 -1

0
1 16 0 0
1 16 0
7 0
7 0

116
SUPPRESSION
 Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 8:

1
0
9 9
RSG
0 0
4
0 -2 4 14
12

0 0
14 -1 1
2 6 12 16
1
2 6 -1
-1

0
1 16 0
0
1 7 0
7 0

117
SUPPRESSION
 Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 12 puis 16:

1
9 9
+2

0 0
4 14 4
0
14
0

0 0
1
2 6 -1 12 16 1
2 6 -1

0
1 7 0 0
1 7 0

118
SUPPRESSION
 Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 12 puis 16:

+2
9 -1
4
RSD
0 0
4 14 1
2 1
9

1
2 6 -1 1 0 6 -1
14 0

0
0
1 7 0 7

119
SUPPRESSION
 Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 30:
-1 -1
50 50

+2
30
+1
100
+1
40 100
+1

0
-1 -1
-1
10 40 80 +1 200 -1
10 80 +1 200

+1 0
0
0 0
0
20 70 90 300 0
20 70 90 300
+1

0
60 120
60 0
SUPPRESSION
 Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 30:
-1
50 -2
50
+2 RDG-D
40 100
+1
0
20 100
+1

-1 0
-1
10 80 +1 200 0
-1
10 40 80 +1 200
+1 0
0
0

20 70 90 300
70 90 0 300 0

+1
0
60 121
0
60
SUPPRESSION
 Exemple: soit l’arbre suivant. Donner le résultat après la
suppression de 30:

-2 0
50 80
RDD-G
0 0
20 100
+1
50 100
-1

0 0
-1 -1
10 40 80 +1 200 20
0 +1
70 90 200
0

70 90 0 300 0
10 40 60 300
0
+1
0 0 0
122
0
60
PARTIE V:
ARBRES M-AIRE DE
RECHERCHE (AMR)
PLAN DE LA PARTIE V

 Définitions

 Modèle

 Opérations de Base: Recherche, Insertion et

Suppression

124
DÉFINITION

 Un arbre de recherche m-aire peut être défini comme une

généralisation de l'arbre de recherche binaire. Au lieu d'avoir

une clé et deux pointeurs, on aura « d-1 » clés et « d »

pointeurs.

 Un arbre de recherche m-aire d'ordre « d » est un arbre

dans lequel chaque nœud peut avoir « d » fils.

125
DÉFINITION
 Si s1, s2, ... sd sont les « d » sous arbres issus d'un nœud
donné avec les clés k1, k2, ....,kd-1 dans l'ordre ascendant,
alors :
 Toutes les clés dans s1 sont inférieurs à k1
 Toutes les clés dans sj (j=2,3, ...d-1) sont supérieurs à kj-1 et
inférieur à kj
 Toutes les clés dans sd sont supérieurs kd-1.

ki des données tq: k1 < k2 ....< kd-1

s1 k1 s2 ….. kj-1 sj kj …... kd-1 sd


126
DÉFINITION
 Propriété d’ordre:
ki des données tq: k1 < k2 ....< kd-1

s1 k1 s2 ….. kj-1 sj kj …... kd-1 sd

(Éléments du s1) < k1 (Éléments du sd) > kd-1

sd1 kd1 sd2 kd2 ....... sd(d-1) kd(d-1) sdd

s11 k11 s12 k12 ....... s1(d-1) k1(d-1) s1d


kj-1 < (Éléments du sj) < kj
(j=2,3, ...d-1)

sj1 kj1 sj2 kj2 ....... sj(d-1) kj(d-1) sjd


127
EXEMPLE
 Soit l’arbre m-aires de recherche AMR d’ordre 4

128
MODÈLE
 La structure de l’arbre ARM est la suivante:

Type TnœudAMR = Structure

Info : Tableau[0..d-2] d’entier

Fils : Tableau[0..d-1] de *TnoeudAMR

Degré : [0 .. d] (intervalle d’entier)

Fin

129
MODÈLE
 Pour écrire des algorithmes sur ce type d'arbres, le modèle
doit être formé des opérations suivantes :

 CreerNoeud(x)  LibererNoeud(P)
 Info(P, i)  Aff_info(P, x, i)
 Fils (P, i)  Aff_fils(P, Q, i)
 Degré(P)  Aff_Degré(P, n)

130
RECHERCHE

 La recherche dans un AMR ressemble beaucoup à celle

effectuée dans un ABR, excepté qu’au lieu de prendre à

chaque nœud une décision de branchement binaire (Fils

gauche ou droit), on prend une décision à options multiples,

selon le nombre de fils du nœud.

131
RECHERCHE
 Exemple: Rechercher l’élément 68.

On récupère l’adresse du nœud (nœud P) ainsi la position


dans le nœud (soit pos = 2) où l’élément 68 doit exister.
132
INSERTION
 L’insertion se déroule comme suit:
1. Rechercher l’élément à insérer « x »:
RechercherAMR(R, x, Var P, Var pos, Var trouve).

2. Si l’élément n’est pas trouvé (trouve = faux)


a. Si le tableau « Info » du nœud « P » n’est pas plein alors
insérer l’élément à sa position « pos » dans ce tableau «
Info ».
b. Sinon le tableau « Info » du « P » est plein alors créer un
nouveau nœud contenant l’élément « x » à insérer
ensuite placer comme fils numéro « pos » du « P » 133
INSERTION
 Exemple: Insérer les éléments suivants: 1, 40, 68, 170.

1 6 10 37 40
170

68

134
SUPPRESSION
 On distingue deux types de suppression:
1. Suppression logique:
 Laisser la clé au niveau du nœud et le marquer comme
supprimé
 Le nœud reste utilisé pour l'algorithme de recherche
 L’insertion d’un nœud supprimé consiste à le marquer
comme non supprimé

2. Suppression physique: Technique similaire à celle


des ABR

135
SUPPRESSION
 Suppression physique:
a. Si l’élément à supprimer est le seul élément dans le
nœud alors libérer le nœud.
 Exemple: supprimer 37 ou 110

136
SUPPRESSION
 Suppression physique:
b. Si l’élément à supprimer a un sous arbre gauche ou
droit vide alors supprimer l’élément, ensuite tasser le
nœud (décalage dans le nœud + changer l’adresse du
fils).
 Exemple: la suppression du 65 entraîne le décalage de 69 à la
position de 65 ainsi le déplacement du fils droit de 65.

62 69 137

68 68
SUPPRESSION
 Suppression physique:
b. Si l’élément à supprimer a un sous arbre gauche ou
droit vide alors supprimer l’élément, ensuite tasser le
nœud (décalage dans le nœud + changer l’adresse du
fils).
 Exemple: la suppression du 120 entraîne le décalage de 150 à
la position de 120.

100 120

110
138

68
SUPPRESSION
Suppression physique:
c. Si l’élément à supprimer a des sous arbres gauche et
droit tous les deux non vides alors remplacer l’élément
à supprimer par son successeur/prédécesseur, ensuite
supprimer ce successeur/prédécesseur
 Exemple: la suppression du 85 entraîne le remplacement du
85 par 100 , ensuite la suppression du 100

12 50 100

120 150

139

110
PARTIE VI:
B-ARBRES: AMR EQUILIBRÉS
PLAN DE LA PARTIE VI

 Introduction

 Définition

 Opérations de Base: Insertion et Suppression

141
INTRODUCTION

 Le problème avec les AMR est celui du maintien de

l'équilibre de l'arbre i.e. tous ses feuilles sont au même

niveau.

 Bayer et McCreight (en 1970) ont fourni une solution à ces

problèmes par l'invention des B-arbres (B pour Bayer /

Boeng / Balanced).

142
DÉFINITION

Un B-arbre d'ordre d (tel que d= 2*m +1) est défini comme

suit :

La racine, si elle n’est pas une feuille, a au moins 2 fils.

Chaque nœud contient k clés avec:

 1≤k≤2*m (nœud racine)

 m≤k≤2*m (nœud non racine)

Tous les nœuds feuilles sont au même niveau.


143
INSERTION

 L’insertion se fait toujours au niveau des feuilles.

 Ainsi, l’insertion se déroule comme suit:

1. Rechercher la position de l’élément à insérer, soit P le

nœud trouvé.

2. Si le nœud (P) n’est pas plein alors insérer la clé à sa

bonne position dans le nœud.

144
INSERTION
 Exemple: Considérons le B-arbre suivant d'ordre 3,
insérer les valeurs suivantes dans l’ordre : 55, 57, 95, 85, 87.

145
INSERTION
2. Si le nœud (P) n’est pas plein alors insérer la clé à sa
bonne position dans le nœud.
3. Sinon, si le nœud (P) est plein, l’éclatement se fait en
cascade (approche ascendante) comme suit
a. Classer les clés dans l’ordre croissant : a1, a2, …ad; soit
amil la clé du milieu
b. déplacer les clés amil+1 … ad dans un nouveau nœud (Q)
c. Insérer la valeur du milieu amil dans le nœud père (aller
à 2) de telle sorte que le nœud P se trouvera à sa
gauche et Q à sa droite. 146
INSERTION
 Exemple: Considérons le B-arbre suivant d'ordre 3,
insérer les valeurs suivantes dans l’ordre : 55, 57, 95, 85, 87.

147
INSERTION
 Exemple: Considérons le B-arbre suivant d'ordre 3,
insérer les valeurs suivantes dans l’ordre : 55, 57, 95, 85, 87.

148
SUPPRESSION
 Il faut supprimer l‘élément tout en préservant la qualité
de B-arbre, c'est à dire en gardant au moins m clés dans le
nœud (non racine).
 C'est le cas de la suppression physique dans un Arbre de
M-aire Recherche (AMR). En plus, si le nœud feuille qui
contenait la clé à supprimer a moins de m clés, alors l'action
suivante est entreprise :

149
SUPPRESSION
 Cas 1: Si l'un des frères (gauche ou droit) contient plus de
m clés, alors la clé, soit Ks, dans le nœud père qui sépare
entre les deux frères est ajoutée au nœud "underflow" et le
dernier (si frère droit) ou le premier élément (si frère gauche)
est ajoutée au père à la place de Ks.
B-arbre d’ordre 5

Suppression de 113

150
SUPPRESSION
 Cas 2-a: Si les deux frères contenaient exactement m clés,
le nœud "underflow" et l'un de ses frères seront concaténés (
fusionnés ou consolidés) en un seul nœud qui contient aussi
la clé séparatrice de leur père.
B-arbre d’ordre 5

Suppression de 120

151
SUPPRESSION
 Cas 2-b: Il est aussi possible que le père contient
seulement m clés et par conséquent il n'a pas de clé à
donner. Dans ce cas, il peut emprunter de son père et frère.
B-arbre d’ordre 5

Suppression de 65

152
SUPPRESSION
 Cas 2-c: Dans le pire des cas, quand les frères du père
n'ont pas des clés à donner, le père et son frère peuvent aussi
être concaténés et une clé est prise du grand père.
B-arbre d’ordre 5

Suppression de 173

153
SUPPRESSION
 Cas 2-d: Si tous les antécédents d'un nœud et leurs frères
contiennent exactement m clés, une clé sera prise de la
racine (due aux concaténations en cascades):
Si la racine avait plus d'une clé, ceci termine le
processus.
Si la racine contenait une seule clé, elle sera utilisée
dans la concaténation. Le nœud racine est libéré et la
profondeur de l'arbre est réduit d'une unité.

154
SOURCES DE CE COURS
 N. EL-ALLIA , Cours d’Algorithmique et Structures de données dynamiques, Ecole
nationale Supérieure d’Informatique (ESI), 2014.

 Djamel Eddine ZEGOUR, Cours de Structures de Données, Ecole nationale


Supérieure d’Informatique (ESI), Disponible sur
http://zegour.esi.dz/Cours/Cours_sdd.htm

 W. K. Hidouci, Cours Structures De Données et Fichiers, École nationale Supérieure


d’Informatique, Disponible sur hidouci.esi.dz/algo/

 B. Boutoumi, Cours d’Algorithmique et Structures de données, Université Saad


Dahlab de Blida, 2014, Disponible sur https://sites.google.com/a/esi.dz/s-
aroussi/algorithmique-et-structure-de-donnees/nouveau-programme .

 A. Aroussi, Cours d’ Algorithmique et Structure de Données (ancien


programme/semestre 2), Université de Blida 1, 2015, Disponible sur
https://sites.google.com/a/esi.dz/s-aroussi/algorithmique-et-structure-de- 155

donnees/annee-universitaire-2014-2015/ancien-programme/semestre-2

Vous aimerez peut-être aussi