Les arbres (I)
Nour-Eddine Oussous, ´Eric Wegrzynowski
Licence ST-A, USTL - API2
12 novembre 2008
Les arbres (I) Licence ST-A, USTL - API2
Introduction
D´efinitions et vocabulaire Notion d’arbres
Branches et profondeur des nœuds Taille et hauteur
Arbres binaires D´efinition Constructeur S´electeurs Pr´edicat
Op´erations modificatrices Impl´ementation
Repr´esentation chaˆın´ee
Impl´ementation des op´erations primitives
Constructeur S´electeurs Pr´edicat
Op´erations modificatrices
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Introduction
I Les arbres offrent une des plus importantes structures de donn´ees non lin´eaires en informatique.
I Ils permettent une organisation naturelle des donn´ees, par exemple
I syst`eme de fichiers
I base de donn´ees
I sites web,. . .
I Dans les arbres, on a une relation hi´erarchique entre les objets.
I Ils permettent parfois d’obtenir des algorithmes plus performants que lorsqu’on utilise des structures de donn´ees lin´eaires (listes, tableaux,. . . )
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Exemple
L’arborescence des r´epertoires d’un syst`eme d’exploitation imaginaire.
etc
opt lib mail
kernel
misc sys
net
pop serv
usr var share admwww
home
bin PP
PP PP
`````````
@
@
A A
A A
A A
A
A
/
Notion d’arbres
Notion d’arbres
Un arbre est une sructure de donn´ees qui peut
I soit ˆetre vide
I soit comporter un nombre fini de nœuds tels que
I `a chaque nœud est associ´ee une valeur
I chaque nœud poss`ede un nombre fini de successeurs
I un (et un seul) nœud n’est le successeur d’aucun autre, c’est la racine
I tout autre nœud est le successeur d’un seul nœud, son p`ere.
Les arbres (I) Licence ST-A, USTL - API2
Branches et profondeur des nœuds
Branches et profondeur des nœuds
I Un nœud qui ne poss`ede aucun successeur est appel´e nœud externe ou feuille.
I Les autres nœuds sont appel´es nœuds internes.
I Une branche est une suite finie x0,x1, . . . ,xp de nœuds telle que
I x0 est la racine
I xp est une feuille
I ∀k∈[[1,p]] pere(xk) =xk−1
I La longueur d’une branche est le nombre de nœuds qui la composent moins 1 : p.
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Branches et profondeur des nœuds
Profondeur d’un nœud
I Un nœudy est un descendant d’un nœud x s’il existe une branche qui va dex `ay. Autrement dit,∃x0, . . . ,xp tels que
I x0=x
I xp=y
I ∀k∈[[1,p]], pere(xk) =xk−1
I Le nombre p est appel´e profondeur du nœudy par rapport `a x.
I La profondeur d’un nœud dans un arbre est la profondeur de ce nœud par rapport `a la racine.
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Taille et hauteur
Hauteur d’un arbre
I La hauteur d’un arbre non vide A, not´eeh(A), est la longueur maximale d’une branche de cet arbre.
I La hauteur d’un arbre est aussi la profondeur maximale d’un nœud.
I La hauteur n’est pas d´efinie pour un arbre vide.lorsque nous programmerons la hauteur, nous d´efinirons par convention la hauteur de l’arbre vide.
Les arbres (I) Licence ST-A, USTL - API2
Taille et hauteur
Exemple
4
−3 9
1 11
26 (3) (2)
(1) (2)
(3) (3)
15 10 2 14
18 (5)42 (4)
(2)
(3) (3)
(5) 8 (0)
6 (1)
Fig.:Un arbre de hauteur 5 et de taille 14 nœuds internes :pb feuilles : pb (profondeurs)
Les arbres (I) Licence ST-A, USTL - API2
Taille et hauteur
Arit´ e et taille d’un arbre
I Un arbre est dit d’arit´ea si chacun de ses nœuds poss`ede au maximum asuccesseurs. L’arbre vide est de toute arit´e.
I La taille d’un arbre Aest son nombre de nœuds.
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Taille et hauteur
Relation entre hauteur, arit´ e et taille
Th´eor`eme
SoitAun arbre d’arit´ea, de taillenet de hauteurh.
I Le nombrenp de nœuds deA`a profondeur 0≤p≤hv´erifie 1≤np≤ap
I La taillenv´erifie l’encadrement
h+ 1≤n≤ah+1−1 a−1
I La hauteurhv´erifie l’encadrement
loga(n(a−1) + 1)−1≤h≤n−1
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
D´efinition
D´ efinition r´ ecursive des arbres binaires
D´efinition
Un arbre binaire compos´es d’´el´ements d’un ensemble E est
I soit l’arbre vide∆;
I soit un triplet <e;g;d >compos´e d’un ´el´ement e∈E, et de deux arbres binaires g etd
En notantAB(E) l’ensemble des arbres binaires compos´es d’´el´ements deE, on a donc
AB(E) ={∆} ∪(E×AB(E)×AB(E))
D´efinition
Repr´ esentations abstraites d’un arbre binaire
XXXXX
!!
! 1
2 3
4 Fig.:Repr´esentation graphique
<1; <2; ∆; ∆> ;
<3; <4; ∆; ∆>; ∆> >
Fig.:Repr´esentation triplet
Les arbres (I) Licence ST-A, USTL - API2
D´efinition
Op´ erations primitives sur les arbres binaires
1. Constructeur 2. S´electeurs 3. Pr´edicat
4. Op´erations modificatrices
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Constructeur
Cr´ eation d’un arbre binaire
Sp´ecification
creerArbre : E×AB(E)×AB(E) −→ AB(E) e,g,d 7−→ <e;g;d >
Exemples
creerArbre(3,∆,∆) = <3; ∆; ∆>
creerArbre(1,<3; ∆; ∆>,∆) = <1;<3; ∆; ∆>; ∆>
C’est une op´eration de construction d’arbres.
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
S´electeurs
Acc` es ` a la racine
Sp´ecification
racine : AB(E) −→ E
<e;g;d > 7−→ e
CU :l’arbre pass´e en param`etre ne peut pas ˆetre vide Exemple
racine(<1;<3; ∆; ∆>; ∆>) = 1 C’est un s´electeur.
Les arbres (I) Licence ST-A, USTL - API2
S´electeurs
Acc` es au sous-arbre gauche
Sp´ecification
gauche : AB(E) −→ AB(E)
<e;g;d > 7−→ g
CU :l’arbre pass´e en param`etre ne peut pas ˆetre vide Exemple
gauche(<1;<3; ∆; ∆>; ∆>) =<3; ∆; ∆>
C’est un s´electeur.
Les arbres (I) Licence ST-A, USTL - API2
S´electeurs
Acc` es au sous-arbre droit
Sp´ecification
droit : AB(E) −→ AB(E)
<e;g;d > 7−→ d
CU :l’arbre pass´e en param`etre ne peut pas ˆetre vide Exemple
droit(<1;<3; ∆; ∆>; ∆>) =∆
C’est un s´electeur.
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Pr´edicat
Test de vacuit´ e d’un arbre
Sp´ecification
estArbreVide : AB(E) −→ Booleen a 7−→
Vrai sia est vide Faux sinon Exemples
estArbreVide(∆) = Vrai estArbreVide(<1; ∆; ∆>) = Faux C’est un pr´edicat.
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Op´erations modificatrices
Changer la valeur de la racine
Sp´ecification
modifierRacine : AB(E)×E −→ AB(E)
<e;g;d >,e0 7−→ <e0;g;d >
CU :l’arbre pass´e en param`etre ne doit pas ˆetre vide Exemple
modifierRacine(<1;<3; ∆; ∆>; ∆>,4) =<4;<3; ∆; ∆>; ∆>
C’est une op´eration de modification d’arbre.
Op´erations modificatrices
Changer le sous-arbre gauche
Sp´ecification
modifierGauche : AB(E)×AB(E) −→ AB(E)
<e;g;d >,g0 7−→ <e;g0;d >
CU :le premier arbre pass´e en param`etre ne doit pas ˆetre vide Exemple
modifierGauche(<1;<3; ∆; ∆>; ∆>,∆) =<1; ∆; ∆>
C’est une op´eration de modification d’arbre.
Les arbres (I) Licence ST-A, USTL - API2
Op´erations modificatrices
Changer le sous-arbre droit
Sp´ecification
modifierDroit : AB(E)×AB(E) −→ AB(E)
<e;g;d >,d0 7−→ <e;g;d0 >
CU :le premier arbre pass´e en param`etre ne doit pas ˆetre vide Exemple
modifierDroit(<1; ∆; ∆>,<2; ∆; ∆>) =<1; ∆;<2; ∆; ∆> >
C’est une op´eration de modification d’arbre.
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Repr´esentation chaˆın´ee
Repr´ esentation chaˆın´ ee
I l’arbre vide est repr´esent´e par un pointeur vers rien
∆=
I un arbre non vide<e;g;d >est repr´esent´e par un pointeur vers un nœud
A= - e
g d
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Repr´esentation chaˆın´ee
Repr´ esentation concr` ete d’un arbre binaire
2
3
4
- )
PP PP
PP PPq
=
A= 1
Fig.:Repr´esentation concr`ete de
A=<1;<2; ∆; ∆>;<3;<4; ∆; ∆>; ∆> >
Les arbres (I) Licence ST-A, USTL - API2
Repr´esentation chaˆın´ee
D´ eclaration en Pascal
D´efinition de types c o n s t
A R B R E V I D E = NIL; t y p e
A R B R E = ^ N O E U D ; N O E U D = r e c o r d
i n f o : E L E M E N T ;
gauche , d r o i t : A R B R E ; end { N O E U D };
Le type ELEMENT doit ˆetre d´eclar´e par ailleurs.
Les arbres (I) Licence ST-A, USTL - API2
Impl´ementation des op´erations primitives
Constructeur
Cr´eer un arbre
// c r e e r A r b r e (e,g,d) = <e;g;d>
f u n c t i o n c r e e r A r b r e ( e : E L E M E N T ;
g , d : A R B R E ) : A R B R E ; var
a1 : A R B R E ; b e g i n
new( a1 );
a1 ^. i n f o := e ; a1 ^. g a u c h e := g ; a1 ^. d r o i t := d ; c r e e r A r b r e := a1 ; end { c r e e r A r b r e };
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Impl´ementation des op´erations primitives
S´ electeurs
Racine d’un arbre
// r a c i n e (a)= ´e l ´e m e n t s i t u ´e `a la r a c i n e de a // CU : a non v i d e
f u n c t i o n r a c i n e ( a : A R B R E ) : E L E M E N T ; b e g i n
r a c i n e := a ^. i n f o ; end { r a c i n e };
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Impl´ementation des op´erations primitives
S´ electeurs
Sous-arbre gauche d’un arbre
// g a u c h e (a) = sous - a r b r e g a u c h e de a // CU : a non v i d e
f u n c t i o n g a u c h e ( a : A R B R E ) : A R B R E ; b e g i n
g a u c h e := a ^. g a u c h e ; end { g a u c h e };
Impl´ementation des op´erations primitives
S´ electeurs
Sous-arbre droit d’un arbre
// d r o i t (a) = sous - a r b r e d r o i t de a // CU : a non v i d e
f u n c t i o n d r o i t ( a : A R B R E ) : A R B R E ; b e g i n
d r o i t := a ^. d r o i t ; end { d r o i t };
Les arbres (I) Licence ST-A, USTL - API2
Impl´ementation des op´erations primitives
Pr´ edicat
Test de vacuit´e d’un arbre
// e s t A r b r e V i d e (a) ⇔ a est v i d e
f u n c t i o n e s t A r b r e V i d e ( a : A R B R E ): B O O L E A N; b e g i n
e s t A r b r e V i d e := ( a = NIL);
end { e s t A r b r e V i d e };
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Impl´ementation des op´erations primitives
Op´ erations modificatrices
Modifier la racine d’un arbre
// m o d i f i e r R a c i n e (a,e) m o d i f i e
// la v a l e u r de l ’ ´e l ´e m e n t `a la r a c i n e de a // CU : a non v i d e
p r o c e d u r e m o d i f i e r R a c i n e (c o n s t a : A R B R E ; c o n s t e : E L E M E N T );
b e g i n
a ^. i n f o := e ; end { m o d i f i e r R a c i n e };
Les arbres (I) Licence ST-A, USTL - API2
Plan Introduction D´efinitions et vocabulaire Arbres binaires Impl´ementation
Impl´ementation des op´erations primitives
Op´ erations modificatrices
Modifier le sous-arbre gauche d’un arbre // m o d i f i e r G a u c h e (a,g) m o d i f i e // le sous - a r b r e g a u c h e de a // en lui a t t r i b u a n t g
// CU : a non v i d e
p r o c e d u r e m o d i f i e r G a u c h e (c o n s t a : A R B R E ; c o n s t g : A R B R E );
b e g i n
a ^. g a u c h e := g ; end { m o d i f i e r G a u c h e };
Les arbres (I) Licence ST-A, USTL - API2
Impl´ementation des op´erations primitives
Op´ erations modificatrices
Modifier le sous-arbre droit d’un arbre // m o d i f i e r D r o i t (a,d) m o d i f i e // le sous - a r b r e d r o i t de a // en lui a t t r i b u a n t d // CU : a non v i d e
p r o c e d u r e m o d i f i e r D r o i t (c o n s t a : A R B R E ; c o n s t d : A R B R E );
b e g i n
a ^. d r o i t := d ; end { m o d i f i e r D r o i t };
Les arbres (I) Licence ST-A, USTL - API2