• Aucun résultat trouvé

Arbre Binaire de Recherche

N/A
N/A
Protected

Academic year: 2022

Partager "Arbre Binaire de Recherche"

Copied!
46
0
0

Texte intégral

(1)

1

Arbre Binaire de Recherche

• Un Arbre Binaire de Recherche (ABR) est un arbre binaire avec les propriétés suivantes :

– La clé associée à un noeud est supérieur aux clés des nœuds de son sous-arbre gauche

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

clés des nœuds de son sous-arbre droit

(2)

2

Arbre Binaire de Recherche

propriété d’un a.b.r : A

1

∀ x nœud ∈ A

1

racine(g(x)) <= racine(x) < racine(d(x))

(3)

3

Arbre Binaire de Recherche:

Exemples

C

A D

14 10

15 11

8 18

16

14 10

15 11

8

16 racine

racine

racine

(4)

4

ABR : Ajout d’un élément

Comment ajouter aux feuilles

La même procédure que Rech_abr s’applique:

Déterminer la position d’insertion par Rech_abr.

Ajouter la nouvelle clé si la recherche échoue.

Exemple:

1 8

5

3 4

2

9

ajout 4?

(5)

5

Construction d’un ABR

Exemple: ajouter C A B L M (dans l’ordre!)

1) Ajouter C C

2) ajouter A

C A

3) ajouter B C A

B 4) Ajouter L C

A

B L

5) Ajouter M

C A

B L

M

(6)

6

Construction d’un ABR

L’ABR est-il unique pour une séquence de lettres A B C L M ?

NON! différentes séquences donnent différents ABR

C A

B L

M A

B

C

L

M

Ajout de : A B C L M Ajout de : C A B L M

(7)

7

Trier avec un ABR

Soit un ABR, peut-on afficher les clés dans l’ordre?

Visiter l’ABR avec un parcours InOrdre:

visiter le sous-arbre gauche afficher racine

visiter le sous-arbre droit

C A

B L

M Example:

A B C L M infixe: affichage:

(8)

8

ABR : supprimer un élément

Pour supprimer un nœud contenant x,

rechercher x, une fois trouvé appliquer l’un des trois cas suivants:

CAS 1: x est une feuille

x

supprimer x On obtient un ABR q

r

q r

p p

(9)

9

ABR : supprimer un élément

Cas 2: x est un nœud interne avec un seul Sous-arbre

L

x q

r

suppr x L

q r

On obtient un ABR

(10)

10

ABR : supprimer un élément

Cas 3: x est un nœud interne avec 2 sous-arbres

W

x q

r

suppr x

Z t s

u

W q

r

suppr x s Z

u

propriété ABR est conservé t

(11)

11

ABR : supprimer un élément

Cas 3 suite

W q r

s Z

u t

q < x < u

q est inférieur au plus petit élément de Z

r est supérieur au plus grand élément de W

(12)

12

ABR : Compléxité de rechercher

• Quelle est la compléxité de Rech_abr ?

• Dépend de :

– la clé x

– des autres données

– De la forme de l’arbre

Analyse de la compléxité : On est intéréssé par la compléxité dans le meilleur cas, pire cas et

en moyenne

(13)

13

ABR : Compléxité de rechercher

niveau 0 niveau 1 niveau 2 niveau 3

hauteur d’un ABR = niveau max

hauteur d’un noeud

h(x) = 0 si x est la racine h(x) = 1+ h(y), y = pere(x)

hauteur d’un ABR B : h(B) = max{h(x), x nœud de B}

(h =3)

(14)

14

ABR : Compléxité de rechercher

Si tous les nœuds de l’arbre existent : ABR plein

Si tous les nœuds existent sauf ceux du dernier niveau :

niveaumin ABR

(15)

15

Conséquence : pour un ABR plein avec N noeuds la compléxité de Rech_abr:

meilleur cas ………… O(1) Pire cas ………… O(log N)

en moyenne ………… ???

ABR : Compléxité de rechercher

(16)

16

ABR : Compléxité de rechercher

 compléxité en moyenne pour une recherche dans

un ABR plein est une fonction logarithmique du nombre de nœuds de l’arbre

Complexité en moyenne pour des ABR quelconque

est approximativement 39% plus chère que la recherche dans un ABR plein pour le même nombres de nœuds :

3 log

386 .

1 )

( N2 N

T avg

(17)

17

• Maintenant que nous connaissons la

compléxité de Rech_abr que peuton dire des autres opérations?

ABR : compléxité de rechercher

Insertion ………… O(log N) Suppression ………… O(log N) Trouver le Min ………… O(log N) Trouver le Max ………… O(log N) Tri ABR = ………… O(N log N)

Idée: ABR tri = (Construction de l’ABR : N insertions)

+ (Parcourir ABR)

(18)

18

• En résumé, il est nécessaire d’avoir un ABR plein ou niveau-min ABR

 garder un arbre le plus équilibré possible à tout moment (Arbre AVL)

ABR : Compléxité de rechercher

(19)

19

Arbre AVL

Arbre AVL (AdelsonVelskii et Landis):

– Le meilleur ABR maintenant à tout moment un arbre raisonnablement équilibré.

Idée : si l’insertion ou la suppression provoque un déséquilibre de l’arbre, rétablir l’équilibre.

– Toutes les opérations insertion, suppression,…

sur un arbre AVL avec N noeuds en O(log N)

(en moyenne et dans le pire cas!)

(20)

20

AVL Trees

Arbre AVL (propriété): c’est un ABR tq. la différence des hauteurs du sous-arbre gauche et droit de la racine est d’au plus 1 et les sous-arbres gauche et droit sont des AVL

Exemple:

(21)

21

Arbres AVL

Facteur d’équilibre d’un nœud :

léger déséquilibre à gauche léger déséquilibre à droite

équilibré

déséquilibre droit déséquilibre gauche

h(g) - h(d) = +1 h(g) - h(d)

= -1

h(g) - h(d) = -2 h(g) - h(d) = +2 h(g)-h(d)= 0

(22)

22

Arbres AVL

Exemples :

0

1

1

0

0 0

0 0

0 +1

+2

+1

-1 -2

(23)

23

Arbres AVL

Un arbre AVL n’est ni un arbre plein ni un arbre niveau-min.

Insertions et suppressions sont éffectuées de la même manière

que pour les ABR. Après chaque opération,

on a besion de vérifier la propriété d’AVL!. Car l’arbre peut ne plus l’être!

0

h diffère de 2!

nouveau noeuds

0

0 0

0 0

2

1

1 0

0

(24)

24

Arbres AVL

Après une insertion, si l’arbre est un AVL alors on ne fait rien.

Comme sur l’exemple ci-dessous :

0 1 -1

0 0 1

0 0

0

1 0

0 1

(25)

25

Arbres AVL

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

(26)

26

Arbres AVL : insertion d’un noeud

L’arbre devient déséquilibré si l’élément ajouté est le descendant gauche (droit) d’un nœud avec un léger

déséquilibre gauche (droit). Alors la hauteur de ce sous-arbre augmente.

Dans les figures suivantes, on note :

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

B: nouveaux laissant l’arbre équilibré

(27)

27

Arbres AVL: Insertion

U B B

B B B B

U U U

U U U U

U U

U

U

(28)

28

Arbres AVL: Insertion

Noter que l’insertion d’un nœud peut provoquer des déséquilibres sur plusieurs nœuds.

Déséquilibre par insertion

propriété AVL n’est plus

respectée.

nouveau noeud

(29)

29

Arbres AVL: Insertion

Cas I: rotation Droite ou rotation Gauche

q

V

W V

U

U q

p

P

W

(30)

30

Arbres AVL: Insertion

Cas I: rotation Droite ou rotation Gauche

void RD(Arbre a){

Arbre tmp= g(a);

a->g = g(tmp);

tmp->d= a;

a= tmp;

}

void RG(Arbre a){

Arbre tmp= d(a);

a->d = g(tmp);

tmp>fg= *a;

a= tmp;

}

(31)

RDG

RGD

31

V W

P R

q R

q T

p W

U V

T U

Rotations Doubles

(32)

32

Arbres AVL: Insertion

void RGD(Arbre *a){

RG( &((*a)->fg) );

RD(a);

}

void RDG(Arbre *a){

RD( &((*a)->fd) );

RG(a);

}

Cas II: nouveau noeud inséré dans T

2

Cas II - T2a : Cas II - T2b :

(33)

33

Arbres 2.3.4

4 1 13 3 4

15

14 35 5 4

1 3 15

1 3 7 8 11 12 2 28

4 1 13

2noeud 3noeud 4noeud

Définition : Un arbre 2.3.4 est un arbre de recherche dont les nœuds sont de trois types, 2nœud, 3nœud, 4nœud, et dont toutes les feuilles sont situées au même niveau

(34)

34

Arbres 2.3.4

• la hauteur reste logarithmique par rapport au nombre de nœuds

–  algos de rééquilibrages qui maintiennent un arbre 2.3.4 après ajout ou suppression en effectuant une

suite de rotations sur chemin de la racine à une feuille

• O(log n) pour recherche, ajout et suppression

• implantation efficace sous la forme d’arbres

binaires de recherches bicolores

(35)

35

Arbres 2.3.4

Adjonction d ’un élément

L’adjonction d ’un nouvel élément ne pose problème que si la feuille qui doit le recevoir contient déjà 3 éléments.

Dans ce cas, il faut ajouter un nouveau nœud à l ’arbre et le réorganiser.

Adjonction avec éclatement en remonté :

On ajoute successivement 4, 35, 1, 13, 3, 3, 15, 12, 7, 4, 2, 11, 6

Ce nœud ne peut plus contenir de nouveau éléments.

On remarque que du point de vue recherche, M est équivalent à l ’arbre binaire :

Cet arbre est un arbre 2.3.4, on peut y ajouter de nouveaux éléments : 13, puis 3, puis 3

M 4

4 35 M

4 1 35 M

1 M

4 35

(36)

36

Arbres 2.3.4

L ’ajout de 15 provoque l ’éclatement de la feuille f en deux 2nœuds contenant respectivement le plus petit et le plus grand élément de f.

L ’élément médian 3 doit être ajouté au nœud père de f, il y a alors de la place pour 15 dans le même nœud que 13 qui devient alors un 3noeud

1

13 35 4

1

13 35 3 4

1

13 3 35

3 4 f

M M M

1 3

13 15 3 4

M

35

1 3

3 4 7 12 13 15 M

35 4

(37)

37

Arbres 2.3.4

L ’ajout de 2 entraîne un éclatement de la feuille contenant 12, 13 et 15

L ’adjonction de 6 provoque l ’éclatement de la feuille f, la remonté de 4 fait éclater à son tour la racine de l ’arbre en 2noeuds

=> les éclatements peuvent remonter en cascade sur toute la hauteur de l ’arbre.

1 13 3

3 4 7 15 2 M

12 35 4

1 13 3

3 4 7 15 2

M

35 4 11 12

f

3

15 2 M

35 4 4 1

13

11 12 3 6 7

(38)

38

Arbres 2.3.4

Pour éviter des éclatements de bas en haut, il suffit de travailler sur des arbres qui ne contiennent jamais deux 4nœuds qui se suivent. Dans ce cas toute adjonction provoque au plus un éclatement.

Ceci peut être réalisé en éclatant les 4nœuds à la descente : Lors de la recherche de la place de l’élément à ajouter, on parcourt un chemin à partir de la racine jusqu ’à une feuille;

seuls les 4nœuds de ce chemin risquent d ’éclater suite à l ’adjonction.

• On prévient ce risque en les faisant éclater, au fur et à mesure de leur rencontre avant de réaliser l ’adjonction. (Ceci provoque parfois des éclatements inutiles)

(39)

39

Une représentation des arbres 2.3.4 : les arbres bicolores

• Définition : Un arbre bicolore est un arbre binaire de recherche dont les nœuds portent une information supplémentaire (rouge et noir).

• Les 4nœuds et 3nœuds sont transformé en arbre binaire de recherche.

• Double trait si le lien appartient à un nœud de l ’arbre 2.3.4 (lie des nœuds jumeaux)

• On peut aussi représenter par un double cercle les nœuds vers lesquels « pointent » des doubles traits

a b c

p p1 p2 p3

a b c p p1 p2 p3

b

p p1 p2 p3

a c

b

p p1 p2 p3

a c

b

p p1 p2 p3

a c

(40)

40

Une représentation des arbres 2.3.4 : les arbres bicolores

• Pour les 3nœuds, il existe 2 transformations possibles

• Les deux représentations pourront exister à la suite de rotations

• La hauteur de l’arbre bicolore obtenu par ces transformations est au plus 2*la hauteur de l’arbre 2.3.4 initial, augmentée de 1.

• => Tout arbre bicolore associé à un arbre 2.3.4 contenant n éléments a une hauteur de l’ordre O(log n)

a b p p1 p2

a b p p1 p2

a p

p1 p2 b

a p

p1 p2 b

Penché à droite

a b p p1 p2

a b

p p1 p2

b

p2 p p1

a

b p2

p p1 a

Penché à gauche

(41)

41

Arbres 2.3.4 /Arbres bicolores

2 25 4 5 6 12 45

43 48 63 65

15 22 24 3 35 38 55 59

3 5 1

8

Représentation en arbre bicolore ?

45

12 5

8 25

3 5

1 2 4

15 24 35 43

48 6

59 63

55 65

22 3 38

(42)

42

Arbres 2.3.4 /Arbres bicolores

• On simule l ’adjonction avec éclatement à la descente dans un arbre 2.3.4

• Eclater un 4nœud revient à inverser les couleurs des éléments de ce nœud

• Ceci peut cependant faire apparaître deux nœuds rouges consécutifs, ce qui doit être évité si l ’on veut conserver la propriété de hauteur logarithmique

=> utilisation de transformations locales : rotations

b

p p1 p2 p3

a c

b

p p1 p2 p3

a c

(43)

43

Arbres 2.3.4 /Arbres bicolores

Plusieurs situations possibles

1) Le 4nœud à éclater est attaché à un 2nœud

=> une simple inversion de couleur suffit

  

a a

a

a

(44)

44

Arbres 2.3.4 /Arbres bicolores

2) Le 4nœud , E, à éclater est attaché à un 3nœud : 3 cas lorsque le 3nœud est penché à droite

3 cas lorsque le 3nœud est penché à gauche a) E est premier fils du 3nœud

=> on inverse les couleurs des éléments du 4noeud

  

a

a

a b

a b

b b

(45)

45

Arbres 2.3.4 /Arbres bicolores

b) E est second fils du 3nœud

=> une inversion de couleurs entraîne une mauvaise disposition des éléments jumeaux a,  et b

=> rotation droitegauche au niveau du nœud contenant a

  

a

a

a  b

a b

b b

a

b

RDG

(46)

46

Arbres 2.3.4 /Arbres bicolores

c) E est troisième fils du 3nœud

=> rotation gauche au niveau du nœud contenant a

  

a

b a

a b 

a b

b

a RG

b

Références

Documents relatifs

Chercher sur Internet l‘algorithme DSW (c’est un algorithme qui prend en entrée un arbre de recherche binaire afin de réaliser son équilibrage) et l’algorithme de

[r]

Un ABR, Arbre Binaire de Recherche (anglais : BST, Binary Search Tree) est arbre binaire dans lequel chaque nœud est porteur d’une valeur de clef unique, et donc les clefs des

Le probl` eme de cet exercice consiste ` a d´ eterminer le nombre de points du plan contenus dans un rectangle donn´ e.. Ce genre de situation apparait tr` es souvent dans les

L’insertion et la suppression utilisent la rotation ` a gauche et ` a droite d’un arbre lorsqu’il est trop d´ es´ equilibr´ e :.

Complexit´ e des op´ erations pr´ ec´ edentes Pour un arbre binaire de taille n,. la complexit´ e dans le pire des

d- En supposant qu’il existe une fonction point/2 qui permette de dessiner un point de coordonn´ ees (x, y), d´ efinir une fonction qui dessine la repr´ esentation graphique

L’insertion et la suppression utilisent la rotation ` a gauche et ` a droite d’un arbre lorsqu’il est trop d´ es´ equilibr´ e :.