Chapitre 1 arbres de recherche

Post on 23-Jan-2018

1.690 views 0 download

Transcript of Chapitre 1 arbres de recherche

ALGORITHMIQUE AVANCÉE

Université Blida 1Faculté des Sciences

Département d’InformatiqueMaster GSI (Génie des Systèmes Informatiques)

Semestre 1

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éthodesque nous retrouvons dans divers domainesd'applications algorithmiques: codage, réseaux,robotique, compilation, conception assistée parordinateur (CAO), etc...

Savoir analyser et comparer les performances dediffé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

CHAPITRE I: ARBRES DE RECHERCHE

Université Blida 1Faculté des Sciences

Département d’InformatiqueMaster GSI (Génie des Systèmes Informatiques)

Semestre 1

Mme AROUSSI

2015-2016

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

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)

Partie V: B-Arbres6

PLAN DU CHAPITRE I

7

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é

L’insertion et la suppression non coûteuses

INTRODUCTION

8

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.

INTRODUCTION

9

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…,

INTRODUCTION

Livre

C1 C2 C3

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

S2.1.1 S2.1.2

10

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

titre d’exemples, nous pouvons citer:

Hiérarchies de fichiers,

INTRODUCTION

11

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

titre d’exemples, nous pouvons citer:

Expressions Arithmétiques

INTRODUCTION

-

A *

+ F

B *

C -

D E

L’expression A - (B + C * (D - E)) * F

se représente facilement par un arbre

où apparaît clairement la priorité des

opérations:

12

DÉFINITION & TERMINOLOGIES

Un arbre est une structure de données (souvent dynamique)représentant un ensemble de valeurs organiséeshiérarchiquement (non linéaire). Chaque valeur est stockée dansun nœud. Les nœuds sont connectés entre eux par des arêtesqui représentent des relations parent/fils.

A

C DB

E G HF I

LKJ

NœudsArêtes

13

DÉFINITION & TERMINOLOGIES

Racine: est le nœud qui n'apas de prédécesseur (parent) etpossède zéro ou plusieurs fils. Laracine constitue la caractéristiqued'un arbre. Feuille : est un nœud qui n'apas de successeur (fils). Unefeuille est aussi appelée un nœudexterne. Nœud interne : est tout nœudqui admet au moins unsuccesseur (fils).

A

C DB

E G HF I

LKJ

Racine

Nœud interne

Feuilles

14

DÉFINITION & TERMINOLOGIES

Fils d’un nœud : sont sessuccesseurs. Dans l'exemple, F,G, H, et I sont les fils du nœud D. Frères : sont les successeursou les fils issus d'un même nœud(parent direct). Dans l'exemple,B, C et D sont des frères. Père : est un nœud qui admetau moins un successeur (fils).Dans l'exemple, D est le père desnœuds F, G, H et I.

A

C DB

E G HF I

LKJ

15

DÉFINITION & TERMINOLOGIES

Sous arbre : est une portionde l'arbre. Dans l'exemple, lenœud G avec ces deux fils J et Kconstituent un sous arbre. Une branche est une suite denœuds connectés de père en fils(de la racine à une feuille).

A-B-E A-C A-D-FA-D-G-J…..

A

C DB

E G HF I

LKJ

16

DÉFINITION & TERMINOLOGIES

Descendants d’un nœud :sont tous les nœuds du sous arbrede racine nœud. Dans l'exemple,les descendants de D sont F, G,H, I, J, K et L. Ascendants d’un nœud :sont tous les nœuds se trouvantsur la branche de la racine versce nœud. Dans l'exemple, lesascendants de J sont G, D et A.Les ascendants de E sont B et A.

A

C DB

E G HF I

LKJ

17

DÉFINITION & TERMINOLOGIES

Taille d’un arbre: est lenombre de nœuds qu’il possède. Taille de l’arbre ci contre = 12 Un arbre vide est de tailleégale à 0.

Degré d’un nœud : est lenombre de ses fils. Dansl'exemple, le degré de B est 1, ledegré de D est 4. Ordre d’un arbre : est ledegré maximum de ses nœuds. Ordre de l’arbre ci contre = 4

A

C DB

E G HF I

LKJ

18

DÉFINITION & TERMINOLOGIES

Le niveau d'un nœud: est la distance qui le sépare de laracine:

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.

Racine

…..…………..…………………………………………….......

………………..…………………………………………….......

……………………………….......

.…………………………………………….......

A

C DB

E G HF I

LKJ

Niveaux

0

1

2

3

19

DÉFINITION & TERMINOLOGIES

La profondeur d'un arbre (ou sa hauteur) : est le plusgrand niveau, c-à-d la distance entre la racine et la feuille la pluslointaine. Dans l'exemple, la profondeur de l'arbre est égal à 3

Racine

…..…………..…………………………………………….......

………………..…………………………………………….......

……………………………….......

.…………………………………………….......

A

C DB

E G HF I

LKJ

Niveaux0

1

2

3

20

DÉFINITION & TERMINOLOGIES

Forêt : est un ensemble d'arbres.

A

C DB

E

G

HF I

L

KJ

21

DÉFINITION & TERMINOLOGIESDéfinition récursive Cas particulier: NIL est un arbre vide, contenant zéro nœud

T1

T’1

RacineRacine de T1

Racine de T’1

Cas général: SI n est unnœud et si T1, T2, ...Tm sontdes arbres, ALORS on peutconstruire un nouvel arbre enconnectant T1, T2, ...Tmcomme des fils à n. Chaque Ti est définit de lamême manière (récursivement). T1, T2, ...Tm sont alors dessous- arbres de n.

22

TYPOLOGIE

Arbre binaire : est un arbre où le degré maximum d’un nœudest égal à 2.Arbre de Recherche Binaire : est un arbre binaire où la cléde chaque nœud est supérieure à celles de ses descendantsgauche, et inférieure à celles de ses descendants droits.Arbre m-aire d’ordre n : est un arbre ou le degré maximumd’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 tous les nœuds feuilles sont au même niveau

……

PARTIE II:ARBRES BINAIRES

Définition

Modèle

Parcours

Exemples d’application

24

PLAN DE LA PARTIE II

25

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 quechaque nœuds a au plus deux fils. Ainsi, le premier fils d'un nœudn est appelé Fils-Gauche (FG) et le deuxième fils est appelé Fils-Droit (FD). A

B

C KG

F

H I

J

racine

D

NIL

26

DÉFINITION

Un arbre binaire est dit strictement binaire si chaque nœudinterne (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

B

C KG

F

H I

J

racine

D

M

Le nombre de feuilles : n=6(C, D,H, M, J, K) Le nombre total de nœuds :2n-1=11 Le nombre de nœudsinternes: n-1=5 (A, B, F, G, I)

27

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-1ainsi, d = log2(n+1) – 1le nombre de nœuds internes = 2d-1le nombre de feuilles = 2d

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

racine

D

A

B

C KG

F

28

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 = 2le nombre total de nœuds n = 23-1 = 7le nombre de nœuds internes = 22-1 = 3le nombre de feuilles = 22 = 4le nombre de nœuds dans le niveau 1 = 2

racine

D

A

B

C KG

F

29

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éesTYPE Tnoeud = STRUCTURE

Info : TypeqqFG : * TnoeudFD : * Tnoeud

FINVAR Arbre : * Tnoeud

30

MODÈLE

On définit le modèle (machine abstraite) suivant d’un arbrebinaire:

Fonction RôleInfo(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

Créer_noeud(x)permet de créer un nœud avec x comme information etretourne la référence du nœud. Le nœud créé a Nil comme filsgauche et droit.

Liberer_noeud(p) permet de libérer le nœud référencé par p.

31

PARCOURS

Le parcours d’un arbre consiste à passer par tous sesnœuds. Les parcours permettent d’effectuer tout un ensemble detraitement sur les arbres. On distingue deux types de parcours : Des parcours en profondeur (depth-first) explorentl'arbre branche par branche. Parmi lesquels: le Préordre,l‘Inordre et le Postordre.Des parcours en largeur (breadth-first) explorentl'arbre niveau par niveau

32

PARCOURS EN PROFONDEUR

Dans un parcours en profondeur, on descend le plusprofondément possible dans l’arbre puis, une fois qu’unefeuille a été atteinte, on remonte pour explorer les autresbranches 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 (RacineFG FD),Inordre (Infixe) : où on affiche le fils gauche avant sa racine etson frère droit (FG Racine FD), Postordre(Postfixe) : où on affiche les fils avant leur racine (FGFD Racine).

33

PARCOURS EN PROFONDEUR

Ces parcours (préordre, inordre et postordre) sont desparcours 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 formesuivante (avec T1 et T2 des sous arbres définis de la même manièreque n) : R

T1 T2

Sous arbre gauche G Sous arbre droit D

34

PARCOURS PREORDRE

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

R

T1 T2

Sous arbre gauche G Sous arbre droit D

35

PARCOURS PREORDRE

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

A

B C

E GD F

H I

HID EB FGA CRésultat de parcours:

36

PARCOURS PREORDRE

La procédure (récursive) qui affiche les valeurs enparcours préordre d’un arbre de racine R est :

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

SI R ≠ NILecrire( Info(R) )Préordre( FG(R) )Préordre( FD(R) )

FSIfin

37

PARCOURS INORDRE

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

R

T1 T2

Sous arbre gauche G Sous arbre droit D

38

PARCOURS INORDRE

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

A

B C

E GD F

H IRésultat de parcours: H ID EB F GA C

39

PARCOURS INORDRE

La procédure (récursive) qui affiche les valeurs enparcours inordre d’un arbre de racine R est :

Procédure Inordre( R:*Tnoeud )Début

SI R ≠ NILInordre( FG(R) )ecrire( Info(R) )Inordre( FD(R) )

FSIfin

40

PARCOURS POSTORDRE

Le parcours postordre de R (s'il n'est pas vide) consisted'abord à parcourir récursivement en postordre les sousarbres T1 puis T2 ensuite visiter le nœud racine (R) ce quidonne [ T1 , T2 , R ou GDR]

R

T1 T2

Sous arbre gauche G Sous arbre droit D

41

PARCOURS POSTORDRE

Le parcours postordre de R (s'il n'est pas vide) consisted'abord à parcourir récursivement en postordre les sousarbres T1 puis T2 ensuite visiter le nœud racine (R) ce quidonne [ T1 , T2 , R ou GDR]

A

B C

E GD F

H I

Résultat de parcours: HIDEBFG AC

42

PARCOURS POSTORDRE

La procédure (récursive) qui affiche les valeurs enparcours postordre d’un arbre de racine R est :

Procédure Postordre( R: *Tnoeud)Début

SI R≠NILPostordre( FG(R) )Postordre( FD(R) )ecrire( Info(R) )

FSIfin

43

PARCOURS EN PROFONDEUR On peut faire ces trois parcours sans utiliser larécursivité. Il faudra alors un moyen pour pouvoir remonterdans les branches de l'arbre:

On pourra par exemple utiliser une structure de pile poursauvegarder les adresses des nœuds par lesquels on est descendu etles dépiler quand on en aura besoin pour remonter. On peut aussi enrichir la structure des nœuds en incluant unpointeur vers le nœud père.

Il existe d'autres types de parcours en profondeur, commepar exemple:

Le préordre inverse (R T2 T1 ou RDG), L'inordre inverse (T2 R T1 ou DRG), Le postordre inverse (T2 T1 R ou DGR).

44

PARCOURS EN LARGEUR

Dans le parcours par niveau, tous les nœuds d’un mêmeniveau sont traités avant de descendre au niveau suivant

Résultat de parcours:A

B C

E GD F

H I

HIDEB FGA C

45

PARCOURS EN LARGEUR

Dans le parcours par niveau, tous les nœuds d’un mêmeniveau sont traités avant de descendre au niveau suivant

Procédure parcours_largeur( R:* Tnoeud )Var F:filed’attente; P: *Tnoeud;DebutP←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));

FTQFin

46

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 desopérateurs, alors que les feuilles contiennent des valeurs(opérandes). Exemple: l'expression (a-b)*((c+d)/e) sera représentée par l'arbresuivant :

c

e

*

- /

+

d

ba

47

EXEMPLES D’APPLICATION

Représentation des Expressions Arithmétiques : Les différentes formes de représentation d’une expressionarithmé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 normalesans parenthèses)

c

e

*

- /

+

d

ba

48

EXEMPLES D’APPLICATION

Représentation des Expressions Arithmétiques : L’évaluation d’une expression arithmétiques peuvent se faire lesdeux fonctions suivantes:

La fonction Opérande(T) qui retourne vrai si T est unopérande, sinon elle retourne faux. La fonction Calcul qui permet de calculer l’opérationarithmétique entre deux opérandes

49

EXEMPLES D’APPLICATION

Représentation des Expressions Arithmétiques :

c

e

*

- /

+

d

ba

Fonction Eval_inordre(A: *Tnoeud): réelSI (A= Null) alorsRetourner (0)SINON

SI Operande(A) alorsRetourner (Info(A))

SINONEval ← Calcul(Eval(Fg(A)), Info(A), Eval(Fd(A)))

FSI

PARTIE III:ARBRES BINAIRES DE

RECHERCHE(ABR)

Définition

Complexité

Parcours

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

Suppression)

Exemples d’application: Tri par ABR51

PLAN DE LA PARTIE III

52

DÉFINITION

Un Arbre Binaire de Recherche (ABR) est un arbrebinaire 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.

53

DÉFINITION

Un Arbre Binaire de Recherche (ABR) est un arbrebinaire 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 dansl’arbre

54

COMPLEXITÉ

Intérêt de cette propriété : diminuer la complexitétemporel de recherche, d’insertion et de suppression dansl’arbre

O (n)O (h) tel que h = log2(n) dans un arbre équilibré

87 ?

55

PARCOURS

Voici un exemple d’un ABR contenant des valeursentières, appliquer les différents parcours vus sur lesarbres binaires. 20

15 59

5

3 10

27 71

33

8 55

52 Le parcours inordre de cet arbre donne la liste ordonnéesuivante : 3, 5, 8, 10, 15, 20, 27, 33, 52, 55, 59, 71

56

OPÉRATION DE RECHERCHE

La recherche est dichotomique, à chaque étape, un sousarbre est éliminé: Rechercher (55)

Rechercher (FD(20))

Rechercher (FG(59))

Rechercher (FD(27))

Rechercher (FD (33))

Élément trouvé

20

15 59

5

3 10

27 71

33

8 55

52

55 ?

57

OPÉRATION DE RECHERCHEFonction RechercherABR (R:*Tnoeud, x: entier) : * Tnoeud

Fin

Fonction RechercherABR (R:*Tnoeud, x: entier) : * TnoeudDebutSi R = Null alors

Retourner (Null)Sinon

Si Info (R) = x alorsRetourner (R)

SinonSi Info(R)>x alors

Retourner (RechercherABR (FG(R), x))Sinon

Retourner (RechercherABR (FD(R), x))Fin

58

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

59

OPÉRATION D’INSERTION

RechercherPosition (25)

Rechercher (FD(20))

Rechercher (FG(59))

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

Insérer 25 au niveau de la feuille dont le père est 27

20

15 59

5

3 10

27 71

33

8 55

52

+ 25

25

60

OPÉRATION D’INSERTION

Fonction InsererABR (R:*Tnoeud, x: entier) : * TnoeudDebutSi R = Null alors

RCreerNoeud(x)Sinon

Si Info(R)>x alorsAff_FG(R, InsererABR (FG(R), x))

SinonAff_FD(R, InsererABR (FD(R), x))

Retourner (R)Fin

61

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 :

62

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 »

« i »

20

15 59

5

3 10

27 71

33

8 55

52

12

63

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)

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

« i »

20

15 59

5

3 10

27 71

33

12 55

52

64

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)

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

« i »

20

15 59

5

3 10

27 71

33

55

52

8

65

OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils

Etape 1: On échange le nœud à supprimer avec son successeurle plus proche (le nœud le plus à gauche du sous-arbre droit) ouson plus proche prédécesseur (le nœud le plus à droite dusous-arbre gauche). Cela permet de garder une structure d'arbrebinaire de recherche. 34

66

50

56

55

71

70

69

81

22

8

17

9

29

25

23 32

Le plus proche prédécesseur

Le plus proche successeur

66

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 sonsuccesseur le plus proche (le nœud le plus à gauche ou le pluspetit du sous-arbre)

Racine: 71

La plus petite valeur : 6934

66

50

56

55

71

70

69

81

22

8

17

9

29

25

23 32

67

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 sonsuccesseur le plus proche (le nœud le plus à gauche ou le pluspetit du sous-arbre)

Racine: 71

La plus petite valeur : 6934

66

50

56

55

71

70

69

81

Fonction Successeur (R: *Tnoeud): *Tnoeud

Fin

Fonction Successeur (R: *Tnoeud): *TnoeudDebut

RFD(R)Si R≠Null alors

TQ FG(R)≠Null faire RFG(R)Retourner (R)

Fin

68

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 sonplus proche prédécesseur (le nœud le plus à droite ou le plusgrand du sous-arbre gauche).

Racine: 50

La plus petite valeur : 56

34

66

50

56

55

71

70

69

81

22

8

17

9

29

25

23 32

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 sonplus proche prédécesseur (le nœud le plus à droite ou le plusgrand du sous-arbre gauche).

Racine: 50

La plus petite valeur : 5634

66

50

56

55

71

70

69

Fonction Predecesseur (R: *Tnoeud): *Tnoeud

Fin

Fonction Predecesseur (R: *Tnoeud): *TnoeudDebut

RFG(R)Si R≠Null alors

TQ FD(R)≠Null faire RFD(R)Retourner (R)

Fin

70

OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils

Etape 2: on applique à nouveau la procédure de suppression quiest maintenant une feuille ou un nœud avec un seul fils.

Ainsi, si on choisit d’échanger le nœud « 66 » avec son plus prochesuccesseur « 69 », on obtient

34

66

50

56

55

71

70

69

81

22

8

17

9

29

25

23 32

69

71

OPÉRATION DE SUPPRESSION Cas 3: Suppression d'un nœud avec deux fils

Puis on applique à nouveau la procédure de suppression qui estmaintenant une feuille ou un nœud avec un seul fils.

Ainsi, si on choisit d’ échanger le nœud « 66 » avec son plus procheprédécesseur « 56 », on obtient

34

66

50

55

71

70

69

81

22

8

17

9

29

25

23 32

56

72

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 setrouve dans une des situations suivantes :

Cas « i » ActionFG FDFeuille Null Null Remplacer « i » par NullAvec un

filsNull ≠Null Remplacer « i » par FD(i)

≠Null Null Remplacer « i » par FG(i)

Avec deux fils

≠Null ≠Null

1. Rechercher le plus procheprédécesseur ou successeur de « i »,soit P.

2. Remplacer Info(i) par Info(P)3. Remplacer P par FG(P) ou FD(P)

73

OPÉRATION DE SUPPRESSION

Fonction SupprimerABR (R:*Tnoeud, x: entier) : * TnoeudDebutSi R = Null alors

Retourner (R)Sinon

Si Info(R)>x alorsAff_FG(R, SupprimerABR (FG(R), x))Retourner (R)

SinonSi Info(R)<x alors

Aff_FD(R, SupprimerABR (FD(R), x))Retourner (R)

Sinon // Info(R) = xRetourner (SupprimerRacine (R))

Fin

74

OPÉRATION DE SUPPRESSIONFonction SupprimerRacine (R:*Tnoeud) : * TnoeudDebutSi FG(R) = Null alors

Si FD(R) = Null alors //Cas n°1: R est une feuilleLibérerNoeud(R)Retourner (Null)

Sinon //Cas n°2: R possède un FDDFD(R)LibérerNoeud(R)Retourner (D)

SinonSi FD(Q) = Null alors //Cas n°2: R possède un FG

GFG(R)LibérerNoeud(R)Retourner (G)

Sinon // Cas n°3: R possède deux filsSSuccesseur (R)Aff_Info (R, Info(S))Aff_FD(R, SupprimerABR (DF(R), Info(S)))Retourner (R)

Fin

75

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

76

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

1019

5 13

3 7 12

25 40

38

16

EXEMPLE D’APPLICATION: TRI PAR ABR

77

2. Parcourir l’ABR en inordre : GRD

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

20

15 35

1019

5 13

3 7 12

25 40

38

16

EXEMPLE D’APPLICATION: TRI PAR ABR

78

Procedure Tri_ARB(Var T: Tableau, n: entier)

Debut

RNull

Pour i0 à n-1 faire RInsererABR (R, T[i]).

Inordre (R, T); //Parcours Infixe

Fin

EXEMPLE D’APPLICATION: TRI PAR ABR

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++

Inordre(FD(R), T)

PARTIE IV:ARBRES BINAIRES DE

RECHERCHE ÉQUILIBRÉS

(ARBRES AVL)

Introduction

Définition

Techniques d’équilibrage

Opérations de Base: Recherche, Insertion et

Suppression 80

PLAN DE LA PARTIE IV

81

INTRODUCTION

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

Cependant, la complexité au pire cas pour un arbre à nnœuds, est O(n). Ce cas est atteint par des arbres trèsdé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 arbresrouge et noir, etc.

82

INTRODUCTION

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

87 ?

ABR Equilibré Filiformes

83

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èred'au plus 1.

|Profondeur(FG(R) ) – Profondeur(FD(R)) | ≤ 1

les arbres gauches et droits d'un nœud sont des arbresAVL.

Un champs supplémentaire est ajouté à tous les nœuds: c’est lefacteur de déséquilibre (appelé aussi facteur de balance «Bal ») qui est calculé après chaque insertion/suppression.

84

EXEMPLE

100

50

30 80

200

10

150

40

Exemple: soit l’ABR suivant. Est-il un arbre AVL?

+1

+1 +1

0 0 0

0

Notons: qu’une feuille est un

arbre de hauteur 0, et que l’arbre vide a la

hauteur −1. L’arbre vide et l’arbre

réduit à une feuille,sont des arbres AVL

Cet arbre est un arbre AVL

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

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

85

EXEMPLE

Exemple: Cet ABR est un arbre AVL avant insertionInsérer la valeur 5 100

50

30 80

200

10

150

40

+1

+1 +1

0 0 0

0 0

86

EXEMPLE

Exemple: Cet ABR est un arbre AVL avant insertionInsérer la valeur 5 100

50

30 80

200

10

150

40

Cet arbre n’est pas un arbre AVL après insertion de 5 arbre déséquilibré

50

+1

+1

0

+1

0 0

+2Après insertion, calculer le

facteur de déséquilibre de

chaque nœud.

87

EXEMPLE

Exemple: Cet ABR est un arbre AVL avant insertionInsérer la valeur 45 100

50

30 80

200

10

150

40

+1

+1 +1

0 0 0

0 0

88

EXEMPLE

Exemple: Cet ABR est un arbre AVL avant insertionInsérer la valeur 45

Cet arbre n’est pas un arbre AVL après insertion de 45 arbre déséquilibré

100

50

30 80

200

10

150

40

450

0

-1

-1

+1

0 0

+2

89

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 hautque son sous-arbre gauche.

On opère une rotation droite dans le cas contraire à savoir sonsous-arbre gauche est plus haut que son sous-arbre droit.

Les rotations ne sont donc définies que pour les arbres binaires nonvides dont le sous-arbre gauche (pour rotation gauche) et sous-arbredroit (pour rotation droite) n’est pas vide.

Les rotations préservent l’ordre des données d’un ABR (parcoursinordre).

90

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))

R

P

X(hauteur

h+1)

Déséquilibre gauche

Y(hauteur

h)

Z(hauteur

h)

P

R

X(hauteur

h+1) Y(hauteur

h)

Z(hauteur

h)

+1

+20

0

Rotation droite

91

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))

R

P

X(hauteur

h)

Déséquilibre gauche

Y(hauteur

h)

Z(hauteur

h-1)

P

R

X(hauteur

h) Y(hauteur

h)

Z(hauteur

h-1)

0

+2-1

+1

Rotation droite

92

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)

P

R

X(hauteur h)

Y(hauteur h)

Z(hauteur

h+1)

R

P

Déséquilibre droit

X(hauteur

h) Y(hauteur

h)Z

(hauteur h+1)

-1

-2

0

0Rotation gauche

93

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)

P

R

X(hauteur h-1)

Y(hauteur

h)

Z(hauteur

h)

R

P

Déséquilibre droit

X(hauteur

h-1)

Y(hauteur

h)

Z(hauteur

h)

0

-2

-1

+1Rotation gauche

94

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

P

Q

R

D(h)

C (h)

B (h)

A (h)

Q

P

R

D(h)

C(h)

B(h)

A(h)

Rotation gauche Rotation droiteQ

P R

D(h)

C(h)

B(h)

A(h)

((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) →→ ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) →→ ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))

0

0

-1

+2

0

+1

0

0+2

95

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

P

Q

R

D(h)

C (h-1)

B (h)

A (h)

Q

P

R

D(h)

C(h-1)

B(h)

A(h)

Rotation gauche Rotation droiteQ

P R

D(h)

C(h-1)

B(h)

A(h)

((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) →→ ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) →→ ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))

0

+1

-1

+2

0

+2

-1

0+2

96

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

P

Q

R

D(h)

C (h)

B (h-1)

A (h)

Q

P

R

D(h)

C(h)

B(h-1)

A(h)

Rotation gauche Rotation droiteQ

P R

D(h)

C(h)

B(h-1)

A(h)

((((A,A, P,P, ((B,B, Q,Q, CC)))),, R,R, D)D) →→ ((((((A,A, P,P, BB)),, Q,Q, CC)),, R,R, D)D) →→ ((((A,A, P,P, BB)),, Q,Q, ((C,C, R,R, DD))))

+1

-1

-1

+2

+1

+1

0

0+2

97

TECHNIQUES D’ÉQUILIBRAGE

Rotation double : double rotation droite-gauche

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

Rotation droite Rotation gauche

(A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) →→ (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) →→ ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))

P

Q

R

A(h)

0

+1

-2

B(h)

C(h)

D(h)

Q

P

R

0

-1

-2

A(h)

B(h)

C(h)

D(h)

Q

R P0 0

0

A(h)

B(h)

C(h)

D(h)

98

TECHNIQUES D’ÉQUILIBRAGE

Rotation double : double rotation droite-gauche

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

Rotation droite Rotation gauche

(A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) →→ (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) →→ ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))

P

Q

R

A(h)

+1

+1

-2

B(h)

C(h-1)

D(h)

Q

P

R

-1

-1

-2

A(h)

B(h)

C(h-1)

D(h)

Q

R P0 -1

0

A(h)

B(h)

C(h-1)

D(h)

99

TECHNIQUES D’ÉQUILIBRAGE

Rotation double : double rotation droite-gauche

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

Rotation droite Rotation gauche

(A,(A, R,R, ((((B,B, Q,Q, CC)),, P,P, DD)))) →→ (A,(A, R,R, ((B,B, Q,Q, ((C,C, P,P, DD)))))) →→ ((((A,A, R,R, BB)),, Q,Q, ((C,C, P,P, DD))))

P

Q

R

A(h)

-1

+1

-2

B(h-1)

C(h)

D(h)

Q

P

R

0

-2

-2

A(h)

B(h-1)

C(h)

D(h)

Q

R P1 0

0

A(h)

B(h-1)

C(h)

D(h)

100

OPERATIONS DE BASE

La recherche est identique à celui des ABR car lesarbres AVL sont avant tout des ABR équilibrés.

L’insertion d’un élément dans un arbre AVL peutprovoquer un déséquilibre. Donc, pour rétablir l’équilibre(rééquilibrer) de l’arbre après une insertion, une seulerotation ou double rotation suffit.

La suppression d’un élément dans un arbre AVL peutprovoquer un déséquilibre. Donc pour rétablir l’équilibre(rééquilibrer) de l’arbre après une suppression, il fautjusqu’à h rotations (h est la hauteur de l’arbre) ou doublerotations.

101

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 adéséquilibré l’arbre.

Le déséquilibre est rencontré lorsque le facteurd’équilibrage d’un nœud de l’arbre égale à ± 2.

102

INSERTION

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

2 10 12 4 16 8 6 14

2 0

2 10 12 4 16 8 6 14

2

10 0

-1

2 10 12 4 16 8 6 14 2

10

12 0

-1

-2

Rotation simple

10

122 00

0

103

INSERTION

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

2 10 12 4 16 8 6 14

10

122

4 0

-1 0

1

2 10 12 4 16 8 6 14

10

122

4 16 00

-1-1

0

104

INSERTION

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

2 10 12 4 16 8 6 14 10

122

4 16

8 0

-1

-2

0

-1

1

Rotation simple

10

124

8 1620 0 0

-10

0

105

INSERTION

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

2 10 12 4 16 8 6 14

10

124

8 162

6 0

10

-1

0

-1

1

106

INSERTION

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

2 10 12 4 16 8 6 14

10

124

8 162

6 140

0

1

-2

10

-1

0

Rotation double

10

144

8 162

6

12

0

1

0 0

0-1

1

0

107

INSERTION

Exemple 2: soit l’arbre suivant, donner le résultat aprèsinsertion de 7

10

144

8 162

6

12

1 9

108

INSERTION

Exemple 2: soit l’arbre ci-dessus, donner le résultataprès insertion de 7

0

10

144

8 162

6

12

-1

1

0 0

0

1

-1

2

10 9 0

7

Nœud inséré

10

14

4

8

16

2 6

12

-1

0

01

-1

10

9

07 0

0

0

0

Rotation double

109

INSERTION

R

h h

R

hh+1

R

h h+1

R

hh+2

R

hh+1

R

h+1h+1

R

h h+2

R

h+1 h+1

R

h h+1

0

+1

-1

+1

+2

0

-1

0

-2

Avant Après insertion à gauche Après insertion à droite

Cas A

Cas B

110

INSERTION

Remarques:

Après une insertion, seules les nœuds qui sont sur le chemin dupoint d’insertion à la racine sont susceptibles d’être déséquilibrés.

Cas A: L’arbre devient non équilibré quand le nouveau nœudinséré est un descendant gauche d’un nœud qui avait un facteurd’équilibrage égal à 1

Cas B: L’arbre devient non équilibré quand le nouveau nœudinséré est un descendant droit d’un nœud qui avait un facteurd’équilibrage égal à -1

111

INSERTIONR

hh+2

+2

R

h

+1

P

hh

0

Cas A

Si insertion dans le sous-arbregauche du fils gauche alorsRotation Simple à droite

Si insertion dans le sous-arbre droitdu fils gauche alors RotationDouble Gauche-Droite

R

h

+2

P

h

+1

h+1

R

h

+2

P

h

-1

h+1

Avant

112

INSERTIONR

h h+2

-2 Cas B

R

h

-1

P

hh

0

R

hP

h

-2

+1

h+1

R

hP

hh

-2

-1

Si insertion dans le sous-arbredroit du fils droit alors RotationSimple à gauche

Si insertion dans le sous-arbre gauchedu fils droit alors Rotation DoubleDroite-Gauche

Avant

113

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 le

rééquilibrer.

114

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).

115

SUPPRESSION

Exemple: soit l’arbre suivant. Donner le résultat après lasuppression de 10:

10

14

4

8

16

2 6

12

-1

0

01

-1

10

9

07 0

0

0

0

12

14

4

8

16

2 6 -1-1

1

-1

10

9

07 0

0

0

0

116

SUPPRESSION

Exemple: soit l’arbre suivant. Donner le résultat après lasuppression de 8:

12

14

4

8

16

2 6 -1-1

1

-1

10

9

07 0

0

0

0

12

14

4

9

16

2 6 -1-1

1

-2

10 07 0

0

0

117

SUPPRESSION

Exemple: soit l’arbre suivant. Donner le résultat après lasuppression de 8:

12

14

4

9

16

2 6 -1-1

1

-2

10 07 0

0

0

14

12

4

9

162 6 -10

1

0

10 07

0

0

1

RSG

118

SUPPRESSION

Exemple: soit l’arbre suivant. Donner le résultat après lasuppression de 12 puis 16:

14

12

4

9

162 6 -10

1

0

10 07

0

0

1

144

9

2 6 -11

0

10 07

0

+2

119

SUPPRESSION

Exemple: soit l’arbre suivant. Donner le résultat après lasuppression de 12 puis 16:

144

9

2 6 -11

0

10 07

0

+2

9

4

14

2

6 -1

1 1

1 0

07

0

-1

RSD

120

SUPPRESSION

Exemple: soit l’arbre suivant. Donner le résultat après lasuppression de 30:

100

200

30

50

300

10 40-1

-1

+1

20

80

60

0

+1

+1

-1

9070+1

0

00

0

40

50

300

10-1

-1

+1

20

80

60

+2

+1

-1

9070+1

100

200

0

0

0 0

121

SUPPRESSION

Exemple: soit l’arbre suivant. Donner le résultat après lasuppression de 30:

40

50

300

10-1

-1

+1

20

80

60

+2

+1

-1

9070+1

100

200

0

0

0 0

RDG-D

20

50

300

10-1

+1

40 80

60

0

0

+1

-2

9070+1

100

2000 0

0

0

122

SUPPRESSION

Exemple: soit l’arbre suivant. Donner le résultat après lasuppression de 30:

RDD-G20

50

300

10-1

+1

40 80

60

0

0

+1

-2

9070+1

100

2000 0

0

0

20

80

30010

-1

-1

40

50

60

0

0

9070+1

100

200

0

0 0 0

0

0

PARTIE V:ARBRES M-AIRE DE

RECHERCHE (AMR)

Définitions

Modèle

Opérations de Base: Recherche, Insertion et

Suppression

124

PLAN DE LA PARTIE V

125

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.

126

DÉFINITION

Si s1, s2, ... sd sont les « d » sous arbres issus d'un nœuddonné 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.

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

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

127

DÉFINITION

Propriété d’ordre:

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

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

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

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

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

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

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

128

EXEMPLE

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

129

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

130

MODÈLE

Pour écrire des algorithmes sur ce type d'arbres, le modèledoit être formé des opérations suivantes :

CreerNoeud(x) Info(P, i) Fils (P, i) Degré(P)

LibererNoeud(P) Aff_info(P, x, i) Aff_fils(P, Q, i) Aff_Degré(P, n)

131

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.

132

RECHERCHE

Exemple: Rechercher l’élément 68.

On récupère l’adresse du nœud (nœud P) ainsi la positiondans le nœud (soit pos = 2) où l’élément 68 doit exister.

133

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 alorsinsérer l’élément à sa position « pos » dans ce tableau «Info ».

b. Sinon le tableau « Info » du « P » est plein alors créer unnouveau nœud contenant l’élément « x » à insérerensuite placer comme fils numéro « pos » du « P »

134

INSERTION

Exemple: Insérer les éléments suivants: 1, 40, 68, 170.

1 6 10 37 40

68

170

135

SUPPRESSION

On distingue deux types de suppression:1. Suppression logique:

Laisser la clé au niveau du nœud et le marquer commesupprimé

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 à celledes ABR

136

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

137

SUPPRESSION Suppression physique:

b. Si l’élément à supprimer a un sous arbre gauche oudroit vide alors supprimer l’élément, ensuite tasser lenœud (décalage dans le nœud + changer l’adresse dufils).

Exemple: la suppression du 65 entraîne le décalage de 69 à laposition de 65 ainsi le déplacement du fils droit de 65.

68

62 69

68

138

SUPPRESSION Suppression physique:

b. Si l’élément à supprimer a un sous arbre gauche oudroit vide alors supprimer l’élément, ensuite tasser lenœud (décalage dans le nœud + changer l’adresse dufils).

Exemple: la suppression du 120 entraîne le décalage de 150 àla position de 120.

68

100 120

110

139

SUPPRESSIONSuppression physique:

c. Si l’élément à supprimer a des sous arbres gauche etdroit tous les deux non vides alors remplacer l’élémentà supprimer par son successeur/prédécesseur, ensuitesupprimer ce successeur/prédécesseur

Exemple: la suppression du 85 entraîne le remplacement du85 par 100 , ensuite la suppression du 100

120 150

110

12 50 100

PARTIE VI:B-ARBRES: AMR EQUILIBRÉS

Introduction

Définition

Opérations de Base: Insertion et Suppression

141

PLAN DE LA PARTIE VI

142

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).

143

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.

144

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.

145

INSERTION

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

146

INSERTION

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

3. Sinon, si le nœud (P) est plein, l’éclatement se fait encascade (approche ascendante) comme suita. Classer les clés dans l’ordre croissant : a1, a2, …ad; soit

amil la clé du milieub. 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 à sagauche et Q à sa droite.

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

INSERTION

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

149

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 lenœud (non racine). C'est le cas de la suppression physique dans un Arbre deM-aire Recherche (AMR). En plus, si le nœud feuille quicontenait la clé à supprimer a moins de m clés, alors l'actionsuivante est entreprise :

150

SUPPRESSION

Cas 1: Si l'un des frères (gauche ou droit) contient plus dem clés, alors la clé, soit Ks, dans le nœud père qui sépareentre les deux frères est ajoutée au nœud "underflow" et ledernier (si frère droit) ou le premier élément (si frère gauche)est ajoutée au père à la place de Ks.

Suppression de 113

B-arbre d’ordre 5

151

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 aussila clé séparatrice de leur père.

Suppression de 120

B-arbre d’ordre 5

152

SUPPRESSION

Cas 2-b: Il est aussi possible que le père contientseulement 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.

Suppression de 65

B-arbre d’ordre 5

153

SUPPRESSION

Cas 2-c: Dans le pire des cas, quand les frères du pèren'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.

Suppression de 173

B-arbre d’ordre 5

154

SUPPRESSION

Cas 2-d: Si tous les antécédents d'un nœud et leurs frèrescontiennent exactement m clés, une clé sera prise de laracine (due aux concaténations en cascades):Si la racine avait plus d'une clé, ceci termine leprocessus.Si la racine contenait une seule clé, elle sera utiliséedans la concaténation. Le nœud racine est libéré et laprofondeur de l'arbre est réduit d'une unité.

SOURCES DE CE COURS

N. EL-ALLIA , Cours d’Algorithmique et Structures de données dynamiques, Ecolenationale Supérieure d’Informatique (ESI), 2014.

Djamel Eddine ZEGOUR, Cours de Structures de Données, Ecole nationaleSupérieure d’Informatique (ESI), Disponible surhttp://zegour.esi.dz/Cours/Cours_sdd.htm

W. K. Hidouci, Cours Structures De Données et Fichiers, École nationale Supérieured’Informatique, Disponible sur hidouci.esi.dz/algo/

B. Boutoumi, Cours d’Algorithmique et Structures de données, Université SaadDahlab 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 (ancienprogramme/semestre 2), Université de Blida 1, 2015, Disponible surhttps://sites.google.com/a/esi.dz/s-aroussi/algorithmique-et-structure-de-donnees/annee-universitaire-2014-2015/ancien-programme/semestre-2

155