Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
noeuds
arêtes
2
Arbres: définitions
• Les arbres sont enracinés. Une fois la racine définit tous les
nœuds admettent un niveau.
• Les arbres ont des noeuds internes et des feuilles (nœuds
externes). Chaque noeud (à l’exception de la racine) a un
parent et admet zéro ou plusieurs fils.
racine
niveau 0
niveau 1 nœuds internes
niveau 2
parent
niveau 3 et
feuilles 3 fils
Arbres binaires
• Un Arbre Binaire est un arbre où chaque
nœud admet au plus 2 fils.
4
Arbres – définitions
Terminologie
degré d’un noeud n deg(n): nombre de fils de n
degré d’un arbre deg(A) : max des degres de ses noeuds
5
Arbres Binaires: définitions
• Nœuds d’un arbre contiennent des clés (mots, nombres,
etc)
• Arbre Binaire plein : Un arbre binaire est plein si
chaque nœud a 0 ou 2 enfants. Nous pouvons également
dire qu'un arbre binaire plein est un arbre binaire dans
lequel tous les nœuds, à l'exception des feuilles, ont
deux enfants.. 14
10 16
8 12
7 9 11 13 6
Arbres Binaires: définitions
• Nœuds d’un arbre contiennent des clés (mots, nombres,
etc)
• Arbre Binaire complet : Un arbre binaire est complet
si tous les niveaux sont complètement remplis, sauf
peut-être le dernier niveau et le dernier niveau a toutes
les clés aussi gauche que possible. 14
10 16
8 12 15 18
7 9 11 13 7
Arbres Binaires: définitions
• Nœuds d’un arbre contiennent des clés (mots, nombres,
etc)
• Arbre Binaire parfait : Un arbre binaire est parfait si
tous les nœuds internes ont deux enfants et toutes les
feuilles sont au même niveau. Un arbre binaire parfait
est complet. 14
10 16
8 12 15 18
7 9 11 13
8
Exemples d’arbres non parfait
Exemples d’arbres complet
Arbre non complet Arbre complet
Arbres Binaires: représentation par
tableaux
• Un arbre binaire complet peut être
représenté par un tableau A avec un accès
en O(1) à chaque noeud:
– Mémoriser les neouds séquentiellement de la
racine aux feuilles et de gauche vers la droite.
– Fils gauche de A[i] est en A[2i]
– Fils droit de A[i] est en A[2i + 1]
– Parent de A[i] est en A[i/2]
11
Arbres Binaires: représentation par
tableau
1
14
2 3
10 16
4 5 6 7
8 12 15 18
8 9 10 11
7 9 11 13
1 2 3 4 5 6 7 8 9 10 11
tab A: 14 10 16 8 12 15 18 7 9 11 13
12
Arbres Binaires: représentation par
pointeurs
typedef struct n{
int clé;
struct n *fGauche, *fDroit;
}nœud;
13
Parcours : inOrdre
InOrdre est décrit réursivement :
14
Parcours : préOrdre
PréOrdre est décrit réursivement :
• Visiter la racine
• Visiter le sous-arbre gauche en PréOrdre
• Visiter le sous-arbre droit en PréOrdre
15
Parcours: non-récursif
PréOrdre itératif en utilisant une Pile.
Pile S
empiler racine dans S
répéter jusqu’à S=φ
v = dépiler S
si v <> nil
visiter v
empiler le fils droit de v dans S
empiler le fils gauche de v dans S
16
Parcours: postOrdre
PostOrdre est décrit réursivement :
17
Parcours: levelOrdre
LevelOrdre visite les noeuds niveau par niveau depuis la racine:
• Peut être décrit facilement en utilisant une File (Comment??)
• Parcours appelé “Breadth First Search” (parcours en largeur)
dans les graphes
18
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
10 16
8 11 15
20
Arbre Binaire de Recherche:
Exemples
Arbre Binaire de Recherche
• ABR est un arbre avec la propriété suivante :
Clé.fGauche < Clé.parent < Clé.fDroit
InOrdre visites :
14
(8)
(10)
10 16 (11)
(14)
8 11 15 18
(15)
(16)
(18)
23
ABR : Rechercher un élément
Soit un ABR :
G D
24
ABR : Rechercher un élément
rechercher(racine, x) Exemple:
comparer x à la clé de racine:
14
- si x = clé return
- si x < clé => chercher dans G
10 16
- si x > clé => chercher dans D
8 11 15
chercher de la même manière
dans G ou D
10
La même procédure que
searchABR s’applique:
Déterminer la position 8 ajout 4?
d’insertion par searchABR.
3 9 4
Ajouter la nouvelle clé si la
recherche échoue.
2 5
28
ABR : Ajout d’un élément
ABR : Ajout d’un élément
Construction d’un ABR
Exemple: ajouter C A B L M (dans l’ordre!)
A L
A L
B
B M 31
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
Ajout de : A B C L M Ajout de : C A B L M
A
C
B
A L
C
L B M
M 32
Trier avec un ABR
Soit un ABR, peut-on afficher les Example:
clés dans l’ordre?
C
Visiter l’ABR avec un parcours
InOrdre:
A L
- visiter le sous-arbre gauche
- afficher racine B M
- visiter le sous-arbre droit
InOrdre affichage:
Comment trouver le minimum? A B C L M
Comment trouver le maximum? 33
Max dans un ABR
ABR : supprimer un élément
ABR : supprimer un élément
Pour supprimer un nœud contenant x,
rechercher x, une fois trouvé appliquer l’un des trois
cas suivants:
q q
r x r
r r
x
q
q
suppr x L
L
On obtient un ABR
37
ABR : supprimer un élément
Cas C: x est un nœud interne avec 2 sous-arbres
r
r
u suppr x
x suppr x
s Z
q u
q
W Z
W
ts t
propriété ABR est conservé 38
ABR : supprimer un élément
Cas C suite: … ou encore comme suit
q < x < u
r ⇒ q est inférieur au plus petit
élément de Z
q
⇒ r est supérieur au plus grand
W t élément de W
u
Z D’autres façon ?
s
39
ABR : supprimer un élément
38
ABR : supprimer un élément
ABR : supprimer un élément
ABR : supprimer un élément
ABR : Compléxité de rechercher
• Quelle est la compléxité de searchABR ?
• Dépend de :
– la clé x
– des autres données
– De la forme de l’arbre
niveau 1
niveau 2
niveau 3
• hauteur d’un ABR = niveau max (h =3)
• 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}
45
ABR : Compléxité de rechercher
46
ABR : Compléxité de rechercher
Théorème: h+1
Un ABR plein (complet) de hauteur h a 2 - 1 noeuds
Preuve: Par induction
h+1
h
G D
h = log2 n
Car
h h+1
2 <= n <= 2 - 1 49
ABR : Compléxité de rechercher
Conséquence : pour un ABR plein avec N noeuds
la compléxité de searchABR:
50
ABR : compléxité de rechercher
52
Definition1 d’un tas
- Un tas est un arbre binaire dont tous les niveaux sont complètement
remplis sauf éventuellement le dernier. De plus, toutes les feuilles
doivent être le plus à gauche possible.
- On peut le représenter par un tableau A et un entier taille tels que les
éléments du tas soient dans A[1 . . . taille].
- Un tas max est un tas tel que la racine de tout sous-arbre est plus grande
que les éléments du sous-arbre
Definition 2 d’un tas
Definition d’un tas
Exercices : faire des exemples et rechercher la
complexité de :
- Insertion d’un élément ??
- Rechercher un élément ??
- Suppression d’un élément ??
Arbre équilibré et non équilibré
Arbre AVL
• Arbre AVL (Adelson-Velskii et Landis):
– Le meilleur ABR maintenant à tout moment un
arbre raisonnablement équilibré.
– Idée : si l’insertion ou la suppression provoque
un désiquilibre de l’arbre, rétablir l’équilibre.
Exemple:
58
Arbres AVL
Pour plus lisibilité , remplaçer les clés associées aux
nœuds en utilisant /, \, -, // et \\ pour représenter le
facteur d’équilibre d’un nœud :
/ : léger déséquilibre à gauche h(G) = 1 + h(D)
\ : léger déséquilibre à droite h(D) = 1 + h(G)
- : équilibré h(D) = h(G)
\\ : déséquilibre droit h(D) > 1 + h(G)
/ -
- / // \\
- - - / \
- - - - - -
/ //
- - / -
- - / -
h diffère de 2!
nouveau -
noeuds 61
Arbres AVL
Après une insertion, si l’arbre est un AVL alors on ne fait rien.
Comme sur l’exemple ci-dessous :
- \ - /
- - - / -
- -
- /
/ \ - \ / \
- - - - - / - -
-
62
Arbres AVL
\
/ -
- - / \
- - - - - -
- - - -
64
Arbres AVL: Insertion
\
/ -
- - / \
- - - - - -
B B - - - -
UU UU BBBB
U UUU U U UU
65
Arbres AVL: Insertion
Noter que l’insertion d’un nœud peut provoquer des
déséquilibre sur plusieurs nœuds.
Déséquilibre
par insertion //
/
/ - // -
- - - - / - - -
- - / -
- Le plus jeune ancêstre
du nœud inséré où la
propriété AVL est violée
nouveau noeud
66
Arbres AVL: Insertion
Supposons que le sous-arbre le plus haut est celui de gauche
et qu’un nœud est inséré pour augmenter la hauteur de ce
sous-arbre. L’arbre obtenu est déséquilibré
Rétablir un arbre AVL en utilisant des rotations
=> Soit A le plus jeune ancêtre où apparaît le déséquilibre
A
Dans l’arbre AVL, avant /
l’insertion, T1, T2 et T3
ont une hauteur h B
-
h T
Le même raisonnement peut être 3
utilisé si l ’arbre le plus haut est celui T1 h h T2
de droite 67
Rotations simples
Droite Gauche
Rotations Doubles
Droite Gauche
Arbres AVL: Insertion
Cas I: un nouveau nœud est inséré dans T1
71
Arbres AVL: Insertion
Cas II: nouveau noeud inséré dans T2
On a 3 cas a considérer :
A 1- nouveau nœud en C
/ 2- nouveau nœud ajouté à T2a
B s 3- nouveau nœud ajouté à T2b
-
p C h T3
T1 -
h
q s Les 3 cas sont similaires.
T2a h-1 h-1 T2b On considérera le cas 2.
72
Arbres AVL: Insertion
Cas II - T2a :
Rééquilibrage de l’arbre
A AVL avec une double rotation
// (gauche sur B et ensuite droite sur A)
B s
\
p C h T3
T1 /
h
q r
Cas II - T2b :
T2a h-1 h-1 T2b
Insertion en T2b => rotation
droite sur B et ensuite gauche
sur A
73
Arbres AVL: Insertion
Cas II - T2a :
Rotation gauche Rotation droite
sur B sur A
A
// C
C // s -
B- r h T3 B- A
\
p q h-1 T2b p q r s
T1 T2aT2b
h h-1 T2a T1 h h-1 h-1 h T3
75
Arbres AVL: Insertion
76
Arbre AVL: Insertion (Algorithme)
78
Arbre AVL: suppression
• La réorganisation de l ’arbre peut nécessiter plusieurs
rotations successives.
T -1
On veut supprimer 26, on le
26
remplace par 24, cette suppr
diminue la hauteur du sous-arbre
1 1 de racine 22 et le sous-arbre de
16 50 racine 16 est alors trop
1 déséquilibré.
-1
1 22 40 On le réorganise par une rotation
10
droite, mais cela accentue le
-1 déséquilibre du niveau
0 2 23
0 immédiatement supérieur et il faut
E faire une rotation droite gauche en
B
A 24 0
D 24. Les rotations peuvent ainsi
C
remonter en cascade jusqu ’à la
racine de l ’arbre.
=> 1.5 log2 n rotations.
=> la suppression est en O(log2 n)
79
Arbre AVL: suppression
• L ’arbre n ’est plus un AVL
T -1
24
2 1
16 50
1
0
1 22 40
10
0
0 2 23
0
E
B D
A C
On distingue différents80
cas…
Arbre AVL: suppression
• Cas I: Cas II:
T T
+1 0
A
A B B
+2
B
A
82
Arbre AVL: suppression
• Cas III.1: T
T p
RD(T)
q -1
q
+2 +1
p
A
0
B C
C
A B
B C
87
Arbres AVL : analyse de
compléxité
Le pire cas d’arbres AVL qu’on peut rencontrer sont
les AVL ayant la partie gauche (ou droite) en léger
déséquilibre pour tous les nœuds.
/
/ /
/ / / -
/ - - -
-
88
Arbres AVL : analyse de
compléxité
• Quelle est la hauteur maximale d’un AVL
avec N noeuds?
• Quelle est le plus petit nombre Nh de
noeuds d’un AVL avec une hauteur h :
Nh = 1 + Nh-1 + Nh-2
90
Arbres AVL : analyse de compléxité
• Soit Nh = min # noeuds d’un arbre AVL avec une
hauteur h.
• N0 = 0.
• N1 = 1.
• Nh, h > 1
• G et D sont des arbres AVL.
• La hauteur de l’un est h-1.
• La hauteur de l’autre est h-2. G D
• Le sous arbre ayant une hauteur h-1 à Nh-1 noeuds.
• Le sous arbre ayant h-2 à Nh-2 noeuds.
• alors, Nh = Nh-1 + Nh-2 + 1. 91
Arbres AVL : analyse de compléxité
Séquence de nombre de Fibonacci
• F0 = 0, F1 = 1.
• Fi = Fi-1 + Fi-2 , i > 1.
• N0 = 0, N1 = 1.
• Nh = Nh-1 + Nh-2 + 1, h > 1.
• Nh = Fh+2 – 1.
• Fi ~ φ i/ 5.
i
1 ⎡1+ 5 ⎤
• Fi ≈ ⎢ ⎥
5⎣ 2 ⎦
92
Arbres AVL : analyse de
compléxité
h+3
1 ⎡1+ 5 ⎤
Nh ≈ ⎢ ⎥
5⎣ 2 ⎦
⇒ h ≈ 1.44 log2 Nh
⇒ h ≈ 1.44 log2 N
⇒
Toutes les opérations AVL sont en O(log2 N)
93