Professional Documents
Culture Documents
B. Jacob
IC2/LIUM
27 février 2010
INF601 : Algorithme et Structure de données
Plan
1 Introduction
2 Primitives du TDA Arbin
3 Réalisations du TDA Arbin
par cellules chaînées
par cellules contiguës
par curseurs (faux pointeurs)
Réalisation des Arbres parfaits
4 Recherche d’un élément
5 Adjonction d’un élément
Adjonction aux feuilles
Adjonction à la racine
6 Suppression d’un élément
7 Conclusion sur les arbres
INF601 : Algorithme et Structure de données
Introduction
Plan
1 Introduction
INF601 : Algorithme et Structure de données
Introduction
Méthodes arborescentes
Cours précédent :
si ensemble d’éléments sont dans un TDA Liste triée
→ recherche d’un élément en log (n) comparaisons
Problème : représentation contiguë (liste) mal adaptée lorsque
l’ensemble évolue dynamiquement
→ adjonction et suppression peuvent être en O(n)
Solution : pour que les 3 opérations
recherche
adjonction
suppression
soient efficaces → structures arborescentes
INF601 : Algorithme et Structure de données
Introduction
Méthodes arborescentes
Définitions informelle
Définition informelle
un arbre = ensemble de sommets tel que :
∃ un sommet unique appelé racine r qui n’a pas de supérieur
Tous les autres sommets sont atteints à partir de r par une
branche unique
Terminologie
Arbres Binaires
Définition informelle
Dans un arbre binaire tout noeud a au plus deux fils
Un arbre binaire possède exactement deux sous-arbres
(éventuellement vides)
sous-arbre
sous-arbre
Droit
Gauche
X
X
INF601 : Algorithme et Structure de données
Introduction
b f
a c e g
INF601 : Algorithme et Structure de données
Introduction
d racine
b f
a c e g
b racine f racine
a c e g
Arbres particuliers
d w
b f u y
a c e g t v x z
INF601 : Algorithme et Structure de données
Introduction
Arbres particuliers
z
INF601 : Algorithme et Structure de données
Introduction
Arbres particuliers
d w
b f u y
a c e g
INF601 : Algorithme et Structure de données
Introduction
Arbres particuliers
Arbre équilibré
d w
b f u y
c e
x z
INF601 : Algorithme et Structure de données
Primitives
Plan
Primitives :
Création et destruction
Construction
Primitives de modification d’un arbre non vide
Accès aux caractéristiques des noeuds (aux éléments)
INF601 : Algorithme et Structure de données
Réalisation
Plan
Plan
Traduction en C
/∗ D e f i n i t i o n d ’ un noeud ∗/
t y p e d e f s t r u c t noeud {
ELEMENT e t i q ; /∗ E t i q u e t t e ∗/
s t r u c t noeud ∗ ag , /∗ ABG ∗/
∗ ad ; /∗ ABD ∗/
} NOEUD;
/∗ D e f i n i t i o n d ’ un a r b r e
∗ = un p o i n t e u r s u r s o n Noeud r a c i n e ∗/
t y p e d e f NOEUD ∗ ARBIN ;
/∗ l ’ a r b r e v i d e e s t l e p o i n t e u r n u l l ∗/
#d e f i n e ARBRE_VIDE NULL
INF601 : Algorithme et Structure de données
Réalisation
par cellules chaînées
NOEUD
ARBIN d
ag etiq ad
b f
a c
NULL
INF601 : Algorithme et Structure de données
Réalisation
par cellules contiguës
Plan
Par tableau
Traduction en C
/∗ D e f i n i t i o n d ’ un noeud ∗/
t y p e d e f s t r u c t noeud {
ELEMENT e t i q ; /∗ E t i q u e t t e ∗/
i n t fg , /∗ ABG ∗/
fd ; /∗ ABD ∗/
} NOEUD;
/∗ D e f i n i t i o n d ’ un a r b r e ∗/
typedef s t r u c t {
NOEUD t a b [ TAILLE_MAX ] ;
int racine ;
} rep ;
t y p e d e f r e p ∗ ARBIN ;
INF601 : Algorithme et Structure de données
Réalisation
par cellules contiguës
4 1 2 a 3
2 0 b 0
3 0 c 0
4 2 d 6
6 0 f 0
8
fg etiq fd
INF601 : Algorithme et Structure de données
Réalisation
par curseurs (faux pointeurs)
Plan
ARBIN A2 2 0 b 4
7
3 0 c 0
4 0 d 0
6 0 i 0
7 6 j 8
8 0 k 0
INF601 : Algorithme et Structure de données
Réalisation
Réalisation des Arbres parfaits
Plan
→ un tableau avec :
1 : indice de la racine de A
T[i] étiquette du père
T[2i] étiquette du fils gauche
T[2i+1] étiquette du fils droit
b f
a c e g
Plan
P a r c o u r s ( ARBIN A)
Début
S I A e s t v i d e ALORS
t e r m i n a i s o n (A)
SINON
t r a i t e m e n t 1 (A)
P a r c o u r s ( s o u s −a r b r e G a u c h e (A ) )
t r a i t e m e n t 2 (A)
P a r c o u r s ( s o u s −a r b r e D r o i t (A ) )
t r a i t e m e n t 3 (A)
FS I
Fin
INF601 : Algorithme et Structure de données
Recherche
Cas particuliers
Parcours particuliers
Parcours préfixé R G D
→ le noeud racine est traité au premier passage avant le parcours
des sous-arbres
P a r c o u r s ( ARBIN A)
Début
S I A e s t v i d e ALORS
t e r m i n a i s o n (A)
SINON
traitement (A)
P a r c o u r s (ABG de A)
P a r c o u r s (ABD de A)
FS I
Fin
INF601 : Algorithme et Structure de données
Recherche
Parcours particuliers
Parcours symétrique G R D
→ le noeud racine est traité au second passage après le parcours du
sous-arbre gauche et avant le parcours du sous-arbre droit
P a r c o u r s ( ARBIN A)
Début
S I A e s t v i d e ALORS
t e r m i n a i s o n (A)
SINON
P a r c o u r s (ABG de A)
traitement (A)
P a r c o u r s (ABD de A)
FS I
Fin
INF601 : Algorithme et Structure de données
Recherche
Parcours particuliers
Parcours postfixé G D R
→ le noeud racine est traité au troisième passage après le parcours
des sous-arbres gauche et droit
P a r c o u r s ( ARBIN A)
Début
S I A e s t v i d e ALORS
t e r m i n a i s o n (A)
SINON
P a r c o u r s (ABG de A)
P a r c o u r s (ABD de A)
traitement (A)
FS I
Fin
INF601 : Algorithme et Structure de données
Recherche
Parcours en Largueur
P a r c o u r s E n L a r g e u r ( ARBIN A)
Début
c r é e r une f i l e v i d e F
S I A e s t non v i d e ALORS
E n f i l e r A dans F
TQ F non v i d e FRE
A <−− D é f i l e r ( F )
t r a i t e m e n t (A)
S I ABG de A non v i d e ALORS
E n f i l e r ABG de A d a n s F
FS I
S I ABD de A non v i d e ALORS
E n f i l e r ABD de A d a n s F
FS I
FTQ
FS I
détruire F
Fin
INF601 : Algorithme et Structure de données
Adjonction
Plan
Préparation
Insertion à la racine
Ajout à la racine
→ ajout à n’importe quel niveau de A
→ à rapprocher des méthodes auto-adaptatives des listes
Méthode pour ajouter X dans A :
1 Couper A en 2 ARBIN G et D
G contient tous les éléments de A ≤ X
D contient tous les éléments de A > X
2 Former un nouvel ARBIN A0 dont la racine avec :
étiquette de A’ ← X
ABG(A’) ← G
ABD(A’) ← D
INF601 : Algorithme et Structure de données
Adjonction
Méthode de coupure
Exemple de coupure
f q G D
d t
a i
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
X < N
f q G D
d t
a i
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
d t
a i
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
q
d t
t
a i
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
X
f q G D
>=
q
d N t
t
a i
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
q
d t
t
a i
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
d q
d t
t
a
a i
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
Xf q G D
d q
d t
<
t
a
a i N
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
d q
d t
t
a
a i
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
d q
d t
i t
a
a i
l
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
Xf q G D
d q
d t
i t
a
a i
l
>= e l
N
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
d q
d t
i t
a
a i
l
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
d q
d t
e i t
a
a i
l
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
Xf q G D
d q
d t
e i t
a
a i
l
e l
< g N
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
d q
d t
e i t
a
a i
l
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Exemple de coupure
f q G D
d q
d t
e i t
a
a i
g l
e l
g
INF601 : Algorithme et Structure de données
Adjonction
Procédure de coupure
Coupure de A en 2 ARBIN G et D
Coupure (ELEMENT X , ARBIN A , G , D )
Début
S I A e s t v i d e ALORS
G <−− v i d e
D <−− v i d e
SINON
S I X <= A ALORS
D <−− A
Coupure ( X , ABG(A ) , G , ABG(D) )
SINON
G <−− A
Coupure ( X , ABD(A ) , ABD(G ) , D)
FS I
FSI
Fin
INF601 : Algorithme et Structure de données
Adjonction
A r b i n A j o u t e r R a c i n e (ELEMENT X , ARBIN A)
ARBIN R
Début
é t i q u e t t e de R <−− X
ABG(R) <−− v i d e
ABD(R) <−− v i d e
Coupure (X , A , ABG(R ) , ABD(R ) )
A <−− R
Fin
INF601 : Algorithme et Structure de données
Suppression
Plan
Méthodes de suppression
q z
d t
a i
e l
g
INF601 : Algorithme et Structure de données
Suppression
q z
d t
a i
e l X
g
INF601 : Algorithme et Structure de données
Suppression
q z
d t
a i
g
INF601 : Algorithme et Structure de données
Suppression
q z
d t
e l
g
INF601 : Algorithme et Structure de données
Suppression
q z
X
d t
e l
g
INF601 : Algorithme et Structure de données
Suppression
q z
X
d t
e l
g
INF601 : Algorithme et Structure de données
Suppression
q z
t
i
e l
g
INF601 : Algorithme et Structure de données
Suppression
q z
d t
a i
e l
g
INF601 : Algorithme et Structure de données
Suppression
X
q z
d t
a i
e l
g
INF601 : Algorithme et Structure de données
Suppression
X
q z
ABG
d t
a i
e l
g
INF601 : Algorithme et Structure de données
Suppression
X
q z
ABG
d t
a i
e l MAX
g
INF601 : Algorithme et Structure de données
Suppression
X
q z
ABG
d t
a i
e l MAX
g
INF601 : Algorithme et Structure de données
Suppression
l z
d t
a i
g
INF601 : Algorithme et Structure de données
Suppression
Suppression du MAX
Plan
Propiétés :
Un arbre binaire ayant n sommets a une hauteur h qui vérifie :
[log 2 (n + 1)] − 1 ≤ h(a) ≤ n − 1
Un arbre binaire de hauteur h a un nombre de sommets n qui
vérifie : h + 1 ≤ n ≤ 2h+1 − 1
Utilisation : mesures de complexité
Parcours de chaque noeud de l’arbre en O(n)
Parcours d’une branche : complexité dans le pire des cas en
O(h) = O(log (n))
Objectif :
→ avoir h minimum (arbre complet ou presque ou équilibré)
INF601 : Algorithme et Structure de données
Fin
The End