Vous êtes sur la page 1sur 35

NFP136- Cours 7

ARBRES DE RECHERCHE
PLAN
Arbres binaires de recherche
Arbre h-quilibrs

7.1 ARBRES BINAIRES DE


RECHERCHE
Dfinition
Arbre binaire tel quen tout nud la
cl du nud est suprieure celle de
tous ses descendants de gauche et
infrieure celle de tous ses
descendants de droite
2

EXEMPLE
11
15

8
cl min 5

10
6

12

30
21

35 cl max

25
3

RAPPEL: Voir cours n 3 sur les arbres

ABR:

structures de donnes pour grands


volumes variables d'informations
structures dynamiques

Arbre binaire a
a.g = sous-arbre de gauche de racine(a)
a.d = sous-arbre de droite de racine(a)

Cls une donne une cl


{cls} ensemble totalement ordonn
4

class ABR {
private int cle;
private String element;
private ABR gauche;
private ABR droit;
public ABR(int a, String s, ABR g, ABR d) {
cle = a;
element = s;
gauche= g;
droit=d;
}
//les mthodes

Recherche :
descente de larborescence avec
comparaison en chaque nud
EXEMPLE
11

recherche de 21
15

8
10

5
6

12

30
21

35

25
6

principe de la recherche de l'lment e de


cl c dans l'arbre a
prcondition: ca
recherche(c,a) renvoie String
si c == a.cle
alors retourner (a.element )
//lment de la racine de a
sinon
si c< a.cle
alors retourner (recherche(c, a.gauche))
sinon retourner (recherche(c, a.droit))
finsi
finsi

complexit: O(h(a))7

ADJONCTION DUN ELEMENT


EXEMPLE

ajout de 14

11
15

8
10

5
6

complexit: O(h(a))

12

30
14 21
place
25

35

adjonction dans a d'un lment e


ABR ajouter (ABR a, String e, int c)
de cl c
b=a;
si b == null alors b=new ABR (c, e, null, null ) ;
sinon tant que non place_trouve faire
si b.cle == c alors "erreur" //lment dj prsent
si b.cle > c
alors //descendre gauche
si b.gauche == null alors place_trouve=vrai //fils gauche de b
b.gauche=new ABR (c, e, null, null ) ;
sinon b = b.gauche;
finsi;
sinon //descendre droite
si b.droit == null alors place trouve=vrai //fils droit
b.droit=new ABR (c, e, null, null ) ;
sinon b =b.droit;
finsi;
finsi;
fait;
finsi;
retourner b;
9

suppression d'un nud N


cas 1: N est une feuille
cas 2: N a un seul fils F
cas 3: N a 2 fils
( 2 cas cas 3-1 cas 3-2)

10

10

EXEMPLE

15

12

11

c3-2

14

30

21

35

c3-1

suppression d'une feuille cas 1 (11)


sup. d'un nud sans fils droit cas 2 (8)
sup. de nuds avec 2 fils
cas 3-1 (15) puis cas 3-2 (16)

17

16

23

19

18

20
11

10

EXEMPLE
8

15

3
2

12

11

30

14

21
17

16

35
23

19

suppression d'une feuille cas 1 (11)


sup. d'un nud sans fils droit cas 2 (8)

18

20
12

10

EXEMPLE

15

3
2

12

30

14

21
17

16

suppression dun nud avec 2 fils


cas 3-1 (15)

35
23

19

18

20
13

10

EXEMPLE

16

3
2

12

30

14

21
17

35
23

19

suppression dun nud avec 2 fils


cas 3-2 (16)

18

20
14

10

EXEMPLE

17

3
2

12

30

14

21

19

18

35
23

20

15

o'

cas 2
o

o'
b
o'

o
a
b

C. Carrez

16

Cas 3.2

o'

o'
o"

o
a

a
b

o"

b
c

c
C. Carrez

17

suppression d'un nud N


cas 1: N est une feuille
suppression simple
cas 2: N a un seul fils F
F prend la place de N
(remonte du sous-arbre)
cas 3: N a 2 fils
est remplac par le nud de plus
petite cl de son sous-arbre de droite
cas 3-1:
c'est une feuille
cas 3-2:
ce noeud n'a qu'un fils
droit qui prend sa place

18

cas 3

a a 2 fils:

rechercher le plus petit du sous-arbre de droite


f = a.d;
tant que f.g faire f=f.g fait;
a.element = f.element;
a.cle=f.cle; l'lment de f remplace l'lment supprim
f = f.d; si f n'a pas de fils gauche remonter le fils droit de f;
f.d = si f feuille

Complexit de la suppression: O(h(a))

19

Conclusion arbre binaire de recherche


recherche,
adjonction,
suppression
complexit: O(h(a))
avec log2n h(a) n-1
complexit en moyenne: O(log n)
problme:
viter les cas dfavorables
arbres quilibrs

20

quilibre
arbre non quilibr:

arbre quilibr:

r
a

les feuilles sont sur au plus 2 niveaux


21

7.2 ARBRES H-EQUILIBRES


dfinition: Arbre tel quen tout nud la diffrence
de hauteur entre les sous-arbres gauche et droit
est au plus de 1
dsquilibre:
dseq(a) = h(a.g)-h(a.d)
dseq(a) = 0 si a =
arbre H-quilibr
pour tout b sous-arbre de a,
dsq(b) {-1, 0, +1}
arbre H-quilibr log2(n+1) h + 1 1.45log2(n+1)

22

arbre AVL:
arbre binaire de recherche
H-quilibr

la recherche dans un arbre AVL est


au pire en (log2 n)
o

h
h-1

(en O(log(n))

(ou+ou- 1)

problme: maintenir lquilibre

23

notations des dsquilibres:


=
-+
++

si h(a.g) = h(a.d)
si h(a.g) = h(a.d)-1
si h(a.g) = h(a.d)-2
si h(a.g) = h(a.d)+1
si h(a.g) = h(a.d)+2

10 =
4-

17
12

=
6

++

14

24

1 7

exemple de rotation
3 0

2 1

1 9

1 8

++

3 5

2 3

2 0

1 7

2 1 =

1 9

R-quilibrage 1
1 8

2 0

3 0

2 3

3 5

25

rquilibrage: rotation droite


A

o++

o' +
D

h-1
h

h-3

h-3
h-2

dsquilibre(A)=2, et
dsquilibre(A.g))=1 ou 0
o

rotation
droite

A '

'

=
h

h -1
h -2
h

D
D

C. Carrez

h -2

h -3

h -3

26

4 0 ++

17

12

50

30

14

21

19

45

52

35

23
27

17 - 12

40
30

14

21
19

35

50

45

52

23

La rotation simple apporte un nouveau dsquilibre:


double rotation ncessaire
28

+ +

4 0
2

1 7

50

1 2

3 0

4 5

5 2

+ +

4 0

3 0

1 4

2 1

3 5
3 5

1 7

1 9

2 3
1 2

R-quilibrage 2
1 7

3 0

4 0

1 9

2 3

2 3

3 5

2 1

1 4

1 9

1 4

1 2

2 1

5 0

4 5

5 2

29

rotation gauche-droite
A
o

++

o'
h

o"
h -1

h -2

h -3

h -3

h - 3 ( +/- 1 )

h - 3 ( + /- 1 )

dsq(A)=2, dsq(g(A))= -1 rotation gauche-droite


A '

o" =

o'

h -1
h -2

C. Carrez

h -3

h -3

(+ / - 1 )

h -3

( + / -1 )

E
h -3

30

adjonction et suppression
mme principe que dans un arbre binaire de
recherche mais en rquilibrant par rotations aprs
l'opration si c'est ncessaire (si a n'est plus H
quilibr)
Dans les arbres AVL
recherche
adjonction
suppression

en (log2n)

On constate exprimentalement:
en moyenne 1 rotation pour 2 adjonctions
en moyenne 1 rotation pour 5 suppressions
31

Exemple
71
83

44
37

61

Cest bien un AVL

32

Exemple
71 ++
83

44 37

61
50

Insertion de 50. ABR mais non AVL

33

Exemple
71 ++
83

44 37

Double rotation gauche puis droite

61
50
71
61

83

44
37

50

34

Exemple
71 ++
83

44 37

Double rotation gauche puis droite

61
50
71
61

61

83

71

44

puis

AVL

44

83
37

37

50

50
35

Vous aimerez peut-être aussi