Arbres - PowerPoint PPT Presentation

About This Presentation
Title:

Arbres

Description:

Nous tudierons deux types d'arbres : Arbre Binaires de Recherches et Arbres ... Un Arbre Binaire est un arbre o chaque n ud admet au plus 2 fils. ... – PowerPoint PPT presentation

Number of Views:1091
Avg rating:3.0/5.0
Slides: 104
Provided by: andreasv150
Category:
Tags: admet | arbres

less

Transcript and Presenter's Notes

Title: Arbres


1
Arbres
  • Un arbre est une structure de données organisées
    de façon hiérarchique, à partir dun nœud
    distingué appelé racine.
  • Très importante en informatique!.
  • Arbre de jeux (i.e., Echecs ), système de
    fichiers UNIX/Windows, Arbres de tri etc.
  • Nous étudierons deux types darbres Arbre
    Binaires de Recherches et Arbres équilibrés

2
Arbres définitions
  • Un arbre est un ensemble de Nœuds, reliés par des
    Arêtes. Entre deux nœuds il existe toujours un
    seul chemin.

noeuds
arêtes
3
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 (à
    lexception de la racine) a un parent et admet
    zéro ou plusieurs fils.

racine
niveau 0
niveau 1
nœuds internes
niveau 2
parent et fils
niveau 3
feuilles
4
Arbres binaires
  • Un Arbre Binaire est un arbre où chaque nœud
    admet au plus 2 fils.

5
Arbres Binaires définitions
  • Nœuds dun arbre contiennent des clés (mots,
    nombres, etc)
  • Arbre Binaire parfait les feuilles sont toutes
    situées dans les deux derniers niveaux. Les
    feuilles du dernier niveau sont toutes à gauche.

6
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 Ai est en A2i
  • Fils droit de Ai est en A2i 1
  • Parent de Ai est en Ai/2

7
Arbres Binaires représentation par tableau
1
2
3
4
5
6
7
9
10
8
11
1 2 3 4 5 6 7 8 9
10 11
14 10 16 8 12 15 18 7 9
11 13
tab A
8
Arbres Binaires représentation par pointeurs
  • typedef struct n
  • int clé
  • struct n fGauche, fDroit
  • nœud
  • typedef nœud Arbre

9
Parcours inOrdre
  • InOrdre est décrit réursivement
  • Visiter le sous-arbre gauche en InOrdre
  • Visiter la racine
  • Visiter le sous-arbre droit en InOrdre

10
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

11
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 ltgt nil visiter v empiler le
fils droit de v dans S empiler le fils gauche de
v dans S
12
Parcours postOrdre
  • PostOrdre est décrit réursivement
  • Visiter le sous-arbre gauche en PostOrdre
  • Visiter le sous-arbre droit en PostOrdre
  • Visiter la racine

13
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

14
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

15
Arbre Binaire de Recherche Exemples
racine
racine
C
A
D
racine
16
Arbre Binaire de Recherche
  • ABR est un arbre avec la propriété suivante
  • Clé.fGauche lt Clé.parent lt Clé.fDroit
  • NOTER! Le parcours InOrdre visite les clés
    dans lordre croissant.

void inOrdre(Arbre racine)
inOrdre(racine-gtfGauche) print(racine-gtkey)
inOrdre(racine-gtfDroit)
17
ABR InOrdre
Exemple
InOrdre visites
(8) (10) (11) (14) (15) (16) (18)
18
ABR Rechercher un élément
  • Soit un ABR
  • Problème rechercher un noeud avec une clé x ?

19
ABR Rechercher un élément
  • rechercher(racine, x)
  • comparer x à la clé de racine
  • - si x clé return
  • - si x lt clé gt chercher dans G
  • - si x gt clé gt chercher dans D
  • chercher de la même manière dans G ou D
  • Exemple

x8 (oui) x17 (non)
20
ABR Rechercher un élément
  • bool searchABR(Arbre racine typeCle clé)
  • if (racineNULL) return false
  • if (racine-gtcléclé)
  • return true
  • else if (key lt racine-gtclé)
  • return searchABR(racine-gtfGauche, clé)
  • else
  • return searchABR(racine-gtfDroit, clé)

Donner une version itérative ?
21
ABR Ajout dun élément
  • Comment ajouter une clé?
  • La même procédure que searchABR sapplique
    Déterminer la position dinsertion par searchABR.
    Ajouter la nouvelle clé si la recherche échoue.
  • Exemple

10
8
ajout 4?
4
3
9
5
2
22
Construction dun ABR
Exemple ajouter C A B L M
(dans lordre!)
2) ajouter A
3) ajouter B
1) Ajouter C
4) Ajouter L
5) Ajouter M
23
Construction dun ABR
  • LABR 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 C A B L M
Ajout de A B C L M
24
Trier avec un ABR
  • Soit un ABR, peut-on afficher les clés dans
    lordre?
  • Visiter lABR avec un parcours InOrdre
  • - visiter le sous-arbre gauche
  • - afficher racine
  • - visiter le sous-arbre droit
  • Comment trouver le minimum?
  • Comment trouver le maximum?

Example
InOrdre affichage
A B C L M
25
ABR supprimer un élément
  • Pour supprimer un nœud contenant x,
  • rechercher x, une fois trouvé appliquer lun des
    trois cas suivants
  • CAS A x est une feuille

p
p
q
q
x
r
r
supprimer x
On obtient un ABR
26
ABR supprimer un élément
  • Cas B x est un nœud interne avec un seul
  • sous-arbre

On obtient un ABR
27
ABR supprimer un élément
  • Cas C x est un nœud interne avec 2 sous-arbres

r
x
suppr x
q
u
W
Z
t s
28
ABR supprimer un élément
  • Cas C suite ou encore comme suit
  • q lt x lt u
  • q est inférieur au plus petit
  • élément de Z
  • r est supérieur au plus grand
  • élément de W

r
q
t
u
Z
Dautres façon ?
s
29
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 larbre

Analyse de la compléxité On est intéréssé par
la compléxité dans le meilleur cas, pire cas
et en moyenne
30
ABR Compléxité de rechercher
niveau 0
niveau 1
niveau 2
niveau 3
(h 3)
  • hauteur dun ABR niveau max
  • hauteur dun noeud
  • h(x) 0 si x est la racine
  • h(x) 1 h(y), y pere(x)
  • hauteur dun ABR B h(B) maxh(x), x nœud de
    B

31
ABR Compléxité de rechercher
Si tout les nœuds de larbre existent ABR
plein
Si tout les nœuds existent sauf ceux du dernier
niveau niveau-min ABR
32
ABR Compléxité de rechercher
Théorème Un ABR plein (complet) de hauteur h a
2 - 1 noeuds
h1
Preuve
Par induction
Cas de base un arbre de hauteur 0 a 1 nœud
(racine) Hypothèse inductive Supposant quun
ABR de hauteur h a
2 - 1 noeuds
h1
33
ABR Compléxité de rechercher
Etape dinduction Connecter 2 ABR de hauteur h
pour construire un ABR de hauteur h1. On a
besoin dajouter un noeud supplémentaire
racine
Par hypothèse inductive le nouveau nombre de
noeuds est (2 - 1) (2 -1) 1 2 - 1
CQFD! Ou encore n 122 2 - 1
h1
h1
h2
h
h1
34
ABR Compléxité de rechercher
Lemme 1 pour un ABR ayant n nœud et de hauteur
h log2 n lt h lt n -1
Remarque Un ABR parfait avec n noeuds a pour
hauteur h log
n car 2 lt n lt 2 - 1
2
h
h1
35
ABR Compléxité de rechercher
  • Conséquence pour un ABR plein avec N noeuds
    la compléxité de searchABR
  • meilleur cas O(1)
  • Pire cas O(log N)
  • en moyenne ???

36
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 larbre

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
37
ABR compléxité de rechercher
  • Maintenant que nous connaissons la compléxité de
    searchABR que peut-on dire des autres opérations?

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 lABR N
insertions)
(Parcourir ABR)
38
ABR Compléxité de rechercher
  • En résumé, il est nécessaire davoir un ABR
    plein ou niveau-min ABR
  • ? garder un arbre le plus équilibré possible
  • à tout moment (Arbre AVL)

39
Arbre AVL
  • Arbre AVL (Adelson-Velskii et Landis)
  • Le meilleur ABR maintenant à tout moment un
    arbre raisonnablement équilibré.
  • Idée si linsertion ou la suppression provoque
    un désiquilibre de larbre, 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!)

40
AVL Trees
Arbre AVL (propriété) cest un ABR tq. la
différence des hauteurs du sous-arbre gauche et
droit de la racine est dau plus 1 et les
sous-arbres gauche et droit sont des AVL
Exemple
41
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
dun 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) 1 h(D)
h(D) 1 h(G)
h(D) h(G)
h(D) gt 1 h(G)
h(G) gt 1 h(D)
42
Arbres AVL
Exemples
Les clés ne sont pas montré. On suppose quelles
satisfassent la propriété ABR
43
Arbres AVL
Un arbre AVL nest ni un arbre plein ni un arbre
niveau-min. Insertions et suppression 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é dAVL!. Car larbre peut ne
plus lêtre!

h diffère de 2!
nouveau noeuds
44
Arbres AVL
Après une insertion, si larbre est un AVL alors
on ne fait rien. Comme sur lexemple ci-dessous
/
\
-
-
-
/
-
-
/
-
/
\
\
/
-
\
-
-
-
-
/
-
-
-
-
45
Arbres AVL
Quand une insertion provoque le déséquilibre de
larbre?
46
Arbres AVL insertion dun noeud
Larbre devient déséquilibré si lélément ajouté
est le descendant gauche (droit) dun nœud avec
un léger déséquilibre gauche (droit). Alors la
hauteur de ce sous-arbre augmente. Dans les
figure suivantes, on note U nouveaux
nœuds pouvant déséquilibrer larbre B
nouveaux laissant larbre équilibré
47
Arbres AVL Insertion
\
-
/
/
-
-
\
-
-
-
-
-
-


B
B
-
-
-
-
B
B
B
B
U
U
U
U
U
U
U
U
U
U
U
U
48
Arbres AVL Insertion
Noter que linsertion dun 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
49
Arbres AVL Insertion
Supposons que le sous-arbre le plus haut est
celui de gauche et quun nœud est inséré pour
augmenter la hauteur de ce sous-arbre. Larbre
obtenu est déséquilibré Rétablir un arbre AVL en
utilisant des rotations
gt Soit A le plus jeune ancêtre où
apparaît le déséquilibre
A
/
Dans larbre AVL, avant linsertion, T1, T2 et T3
ont une hauteur h
B
-
T
h
3
Le même raisonnement peut être utilisé si
l arbre le plus haut est celui de droite
T
h
h
T
1
2
50
Arbres AVL Insertion
Cas I un nouveau nœud est inséré dans T1
Rééquilibrer par rotation droite P lt B lt q lt A lt
r gt gt propriété ABR maintenue!
Arbre Original
B
-
A
p
-
T
r
q
1
h1
T
h
h
T
3
2
51
Arbres AVL Insertion
Cas I rotation Droite ou rotation Gauche
void RD(Arbre a) Arbre aux (a)-gtfg
(a)-gtfg aux-gtfd aux-gtfd a a aux
void RG(Arbre a) Arbre aux (a)-gtfd
(a)-gtfd aux-gtfg aux-gtfg a a aux
52
Arbres AVL Insertion
Cas II nouveau noeud inséré dans T2
On a 3 cas a considérer 1- nouveau nœud en
C 2- nouveau nœud ajouté à T2a 3- nouveau
nœud ajouté à T2b
Les 3 cas sont similaires. On considérera le cas
2.
53
Arbres AVL Insertion
Cas II - T2a Rééquilibrage de larbre AVL avec
une double rotation (gauche sur B et ensuite
droite sur A)
Cas II - T2b Insertion en T2b gt rotation
droite sur B et ensuite gauche sur A
54
Arbres AVL Insertion
Cas II - T2a
Rotation gauche sur B
Rotation droite sur A
La propriété ABR est maintenue!
55
Arbres AVL Insertion
Cas II nouveau noeud inséré dans T2
Cas II - T2a
Cas II - T2b
void RGD(Arbre a) RG( ((a)-gtfg) )
RD(a)
void RDG(Arbre a) RD( ((a)-gtfd) )
RG(a)
56
Arbres AVL Insertion
  • Nous avons défini un arbre équilibré et nous
    avons aussi montré comment insérer dans larbre
    en utilisant les algorithmes ABR de manière à
    maintenir léquilibre (propriétés AVL) et la
    propriété ABR.

57
Arbre AVL Insertion (Algorithme)
  • Propriété Toute adjonction dans un AVL
    nécessite au plus une rotation pour le
    rééquilibrer.

T
  • Supposons que x soit ajouté en tant que feuille
    dans T.
  • C est uniquement sur le chemin de la racine à x
    que vont intervenir des rotations éventuelles.
  • On considère sur ce chemin le nœud le plus bas
    dont le déséquilibre avant adjonction est non
    nul, et l on note A le sous arbre enraciné en ce
    nœud
  • De par la nature des rotations, la hauteur de A
    n est pas modifiée par l adjonction de x (y
    compris en prenant compte une rotation)
  • gt Dans l AVL résultant de l adjonction de x,
    le père de A et tous ses ascendants ont
    exactement le déséquilibre qu ils avaient avant
    l adjonction de x, il n y a donc jamais besoin
    d effectuer de rotation  au-dessus  de A, ni
    de mise à jour du déséquilibre.

A
?1
Y
58
Arbre AVL Insertion (Algorithme)
  • Algorithme d adjonction dans un AVL
  • Pour conserver la valeur du déséquilibre en
    chaque nœud de l arbre, on utilisera les
    déclarations suivantes.
  • typedef struct n
  • int val
  • int deseq
  • struct n fg, fd
  • nœud
  • typedef nœud AVL
  • Principe
  • Lors de la descente dans l arbre à la recherche
    de la place où l on doit ajouter x, on mémorise
    le dernier sous-arbre A pour lequel le
    déséquilibre est ?1.
  • Après avoir ajouté x à la feuille Y, c est
    uniquement sur le chemin de A à Y qu il est
    nécessaire de modifier les valeurs du
    déséquilibre. Il faut ensuite faire le cas
    échéant, un rééquilibrage en A.

59
Arbre AVL Insertion (Algorithme)
  • Void ajouterAVL (AVL t, int x)
  • AVL y, a, p, aa, pp
  • / création du nœud à ajouter /
  • y nouveau(nœud) y-gtval x y-gtdeseq
    0y-gtfgy-gtfdNULL
  • If (tNULL) ty
  • else
  • at aaNULL pt ppNULL
  • /aa et pp sont les pères de a et p/
  • while(p!NULL)/descente mémorisation du
    dernier nœud dont le déséquilibre est ?1/
  • if(p-gtdeseqltgt0)apaapp
  • ppp
  • if(xltp-gtval) pp-gtfg else pp-gtfd
  • /adjonction/
  • if (xltpp-gtval) pp-gtfgy else pp-gtfdy

1
2
60
Arbre AVL Insertion (Algorithme)
  • /modification du déséquilibre sur le chemin de
    A à Y/
  • pa
  • while (pltgty)
  • if (xltp-gtval)p-gtdeseqp-gtdeseq1pp-gtfg
  • else p-gtdeseqp-gtdeseq-1pp-gtfd
  • / rééquilbrage/
  • switch (a-gtdeseq)
  • case 0
  • case 1
  • case -1 return
  • case 2 switch (a-gtfg-gtdeseq)
  • case 1 RD (a) a-gtdeseq0a-gtfd-gtdeseq0br
    eak
  • case -1
  • RGD(a)
  • switch (a-gtdeseq)
  • case 1 a-gtfg-gtdeseq0
    a-gtfd-gtdeseq-1break
  • case -1 a-gtfg-gtdeseq1
    a-gtfd-gtdeseq0break
  • case 0 a-gtfg-gtdeseq0
    a-gtfd-gtdeseq0break /ay/

1
2
61
Arbre AVL Insertion (Algorithme)
  • If(aaNULL)
  • ta
  • else if (a-gtvalltaa-gtval)
  • aa-gtfga
  • else aa-gtfda

1
2
62
Arbre AVL suppression
  • La réorganisation de l arbre peut nécessiter
    plusieurs rotations successives.

On veut supprimer 26, on le remplace par 24,
cette suppr diminue la hauteur du sous-arbre de
racine 22 et le sous-arbre de racine 16 est alors
trop déséquilibré. On le réorganise par une
rotation droite, mais cela accentue le
déséquilibre du niveau immédiatement supérieur et
il faut faire une rotation droite gauche en 24.
Les rotations peuvent ainsi remonter en cascade
jusqu à la racine de l arbre. gt 1.5 log2 n
rotations. gt la suppression est en O(log2 n)
63
Arbre AVL suppression
  • L arbre n est plus un AVL

-1
T
24
2
1
16
50
1
0
40
22
1
E
10
0
C
D
0
20
23
A
B
On distingue différents cas
64
Arbre AVL suppression
  • Cas I Cas II

T
T
1
0
A
B
A
B
  • Rien à faire, car la hauteur de larbre na pas
    été modifié
  • Avec -1 même situation
  • Ici la hauteur du sous-arbre va évoluer(-1)
    localement aucun déséquilibre n est apparu, au
    contraire, le sous arbre devient équilibré. Des
    déséquilibre peuvent apparaître plus haut!

65
Arbre AVL suppression
  • Cas III

T
2
A
B
Ici la hauteur du sous-arbre na pas évolué mais
le déséquilibre est passé à 2 il faut
intervenir on distingue la différents cas de
figure qui sont liées au fils gauche
66
Arbre AVL suppression
  • Cas III.1

T
p
T
RD(T)
q
q
-1
A
2
1
p
C
B
C
0
A
B
  • Il y a arrêt du traitement ici, puisque
  • le sous-arbre est équilibré
  • sa hauteur na pas été modifiée (il est donc
    inutile de propager le résultat vers le haut)

67
Arbre AVL suppression
  • Cas III.2

T
p
T
RD(T)
q
q
0
A
2
0
p
C
B
C
-1
A
B
Le sous-arbre est rééquilibré, mais la hauteur a
été modifié il faut remonter l information au
dessus de T pour procéder éventuellement à des
rééquilibrage gt appliquer le même principe que
celui qui vient d être appliqué en considérant
I,II et les différents cas de III.
68
Arbre AVL suppression
  • Cas III.3

T
RD(T)
T
r
q
2
0
r
p
p
D
-1,0
-1
1,0
q
D
C
B
A
A
-1,0,1
C
B
Le sous-arbre est rééquilibré, mais sa hauteur a
diminué de 1 gt remonté de l information comme
en III.2
69
Arbre AVL suppression
  • Principe de l algorithme
  • Réorganisation de l arbre de la feuille
    supprimée jusqu à la racine de l arbre avec
    éventuellement des rotations (on sarrête pour
    les cas I ou III.1)
  • recalcul des déséquilibres occasionnés par la
    suppression et éventuelle exécutions des
    rotations nécessaires du fait de nouveaux
    déséquilibres
  • la propagation continue tant que l arbre demeure
    déséquilibré lors de la remontée
  • Au pire cas le nombre de rotation est log2 n

70
Arbres AVL analyse de compléxité
  • Soit T(n) la compléxité de linsertion dun nœud
    dans un arbre AVL.
  • Quelle est la meilleur structure darbre AVL
    possible?
  • Arbre plein ? T(n) O(log n)

71
Arbres AVL analyse de compléxité
Le pire cas darbres AVL quon peut rencontrer
sont les AVL ayant la partie gauche (ou droite)
en léger déséquilibre pour tous les nœuds.
72
Arbres AVL analyse de compléxité
  • Quelle est la hauteur maximale dun AVL avec N
    noeuds?
  • Quelle est le plus petit nombre Nh de noeuds dun
    AVL avec une hauteur h

Nh 1 Nh-1 Nh-2
Chacun est le plus petit arbre avec les tailles
respectives
73
Arbres AVL analyse de compléxité
  • La hauteur dun arbre AVL avec n nœuds est au
    plus égale à 1.44 log2 (n2).
  • La hauteur dun arbre binaire avec n noeuds est
    au moins égale à log2 (n1).
  • log2 (n1) lt height lt 1.44 log2 (n2)

74
Arbres AVL analyse de compléxité
  • Soit Nh min noeuds dun arbre AVL avec une
    hauteur h.
  • N0 0.
  • N1 1.
  • Nh, h gt 1
  • G et D sont des arbres AVL.
  • La hauteur de lun est h-1.
  • La hauteur de lautre est h-2.
  • 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.

75
Arbres AVL analyse de compléxité
  • Séquence de nombre de Fibonacci
  • F0 0, F1 1.
  • Fi Fi-1 Fi-2 , i gt 1.
  • N0 0, N1 1.
  • Nh Nh-1 Nh-2 1, h gt 1.
  • Nh Fh2 1.
  • Fi fi/ .
  • f (1 sqrt(5))/2.

5
i
ù
é

5
1
1

F
ú
ê
i
2
5
û
ë
76
Arbres AVL analyse de compléxité

h
3
ù
é

5
1
1

N
ú
ê
h
2
5
û
ë

Þ
N
h
log
44
.
1
h
2
Þ
N
log
44
.
1

h
2
Þ
77
Arbres 2.3.4
  • Pour éviter les cas d arbres de recherche
    dégénérés, on peut aussi faire varier le nombre
    de directions de recherche à partir d un nœud.
  • Définition générale Un arbre de recherche est
    un arbre général étiqueté dont chaque nœud
    contient un k-uplet déléments distincts et
    ordonnées (k1,2,3). Un nœud contenant les
    éléments x1lt x2 ltxk a k1 sous-arbres, tels que
  • tous les éléments du premier sous-arbre sont
    inférieurs ou égaux à x1
  • tous les éléments du ième sous-arbre (i2,,k)
    sont strictement supérieurs à xi-1 et inférieurs
    ou égaux à xi
  • tous les éléments du (k1)ième sous-arbre sont
    strictement supérieurs à xk

78
Arbres 2.3.4
15
4 10 13
30 40
50 40
14
11 12
20 28
35
15
4 10 13
1 3
2-noeud
4-noeud
3-noeud
Définition Un arbre 2.3.4 est un arbre de
recherche dont les nœuds sont de trois types,
2-nœud, 3-nœud, 4-nœud, et dont toutes les
feuilles sont situées au même niveau
79
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 suppr 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 darbres
    binaires de recherches bicolores

80
Arbres 2.3.4
  • Propriété La hauteur h(n) d un arbre 2.3.4
    contenant n élément est en ?(log n). Plus
    précisément, on a lencadrement suivant
  • log4(n1)? h(n)1 ? log2(n1)
  • Preuve on considère les arbres 2.3.4 extrémaux
  • contenant le moins déléments (que des
    2-nœuds)
  • puisque toutes les feuilles sont au même
    niveau,le nombre de nœuds 20 21... 2h
    2h1-1
  • contenant le plus déléments (que des 4-nœuds)
  • 40 41... 4h 4h1-1
  • on en déduit qu un arbre 2.3.4 contenant n nœuds
    et de hauteur h(n) 2h(n)1-1 lt n lt 4h(n)1-1
  • doù lon tire l encadrement de la hauteur

81
Arbres 2.3.4
  • Algorithme de recherche (principe)
  • Soit M un arbre 2.3.4, Soit x un élément à
    rechercher dans M.
  • x est comparé avec le(s) éléments x1,.., xi
    (i?1..3) de la racine de M
  • si ? j? 1..i tq. X xj alors trouvé
  • si x ?x1 gt recherche dans le premier sous-arbre
    de M
  • si xj ltxltxj1 (j? 1..i-1 ) gt recherche dans la
    (j1)ième sous-arbre de M
  • si x gtxj gt recherche dans le dernier sous-arbre
    de M
  • si la recherche se termine sur une feuille qui ne
    contient pas x gt x ?M
  • Exercice Implanter cet algorithme,
  • on utilisera les déclarations suivantes
  • typedef struct n
  • int n / nombre de pointeurs /
  • struct n sArbre4 / sous arbres /
  • int elements3 / les éléments /
  • nœud
  • typedef nœud Arbre234
  • Refaire le même exercice en utilisant le type
    union

82
Arbres 2.3.4 Recherche
  • typedef struct n
  • int n / nombre de pointeurs /
  • struct n sArbre / sous arbres /
  • int elements / les éléments /
  • nœud
  • typedef nœud Arbre234
  • void ELEMENT (int x Arbre234 A )
  • int pos
  • if (A NULL )
  • return 0
  • else
  • pos position (x, A)
  • if ( (x A-gtelements pos ) )
  • return 1
  • else
  • return ELEMENT (x, A-gtsArbre pos )

83
Arbres 2.3.4
  • Adjonction d un élément
  • Ladjonction 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, 10, 13, 3, 30,
    15, 12, 7, 40, 20, 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 30

84
Arbres 2.3.4
  • L ajout de 15 provoque l éclatement de la
    feuille f en deux 2-nœuds contenant
    respectivement le plus petit et le plus grand
    élément de f. L élément médian 30 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 3-noeud

M
M
M
10
10
10
f
13 35
13 35
13 30 35
4
3 4
3 4
M
M
10 30
10 30
13 15
3 4
35
3 4 7
12 13 15
35 40
85
Arbres 2.3.4
  • L ajout de 20 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 2-noeuds
  • gt les éclatements peuvent remonter en cascade
    sur toute la hauteur de l arbre.

M
M
10 13 30
10 13 30
f
3 4 7
15 20
35 40
12
3 4 7
15 20
35 40
11 12
M
13
30
4 10
15 20
35 40
11 12
3
6 7
86
Arbres 2.3.4
  • Pour éviter des éclatements de bas en haut, il
    suffit de travailler sur des arbres qui ne
    contiennent jamais deux 4-nœuds qui se suivent.
    Dans ce cas toute adjonction provoque au plus un
    éclatement.
  • Ceci peut être réalisé en éclatant les 4-nœ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 4-nœ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)

87
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 4-nœuds et 3-nœ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

b
b
a b c
a
c
a
c
p0
p1
p2
p3
p0
p1
p2
p3
p0
p1
p2
p3
b
b
a
c
a
c
p0
p1
p2
p3
p0
p1
p2
p3
88
Une représentation des arbres 2.3.4 les arbres
bicolores
  • Pour les 3-nœuds, il existe 2 transformations
    possibles
  • Les deux représentations pourront exister à la
    suite de rotations
  • La hauteur de larbre bicolore obtenu par ces
    transformations est au plus 2la hauteur de
    larbre 2.3.4 initial, augmentée de 1.
  • gt Tout arbre bicolore associé à un arbre 2.3.4
    contenant n éléments a une hauteur de lordre
    O(log n)

a
a
a
Penché à droite
a b
b
b
p0
b
p0
p0
p1
p2
p0
p1
p2
p1
p2
p1
p2
b
b
b
Penché à gauche
a b
a
p2
a
p2
a
p0
p1
p2
p0
p1
p2
p0
p1
p0
p1
89
Arbres 2.3.4 /Arbres bicolores
12 45
20 25 40
8
50 60
43
15
22 24
30 35 38
63 65
48
55 59
3 5
10
Représentation en arbre bicolore ?
45
12
50
25
60
8
48
20
40
3
10
59
63
5
15
24
35
43
65
55
22
30
38
90
Arbres 2.3.4 /Arbres bicolores
  • On simule l adjonction avec éclatement à la
    descente dans un arbre 2.3.4
  • Eclater un 4-nœ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
  • gt utilisation de transformations locales
    rotations

b
b
a
c
a
c
p0
p1
p2
p3
p0
p1
p2
p3
91
Arbres 2.3.4 /Arbres bicolores
  • Plusieurs situations possibles
  • 1) Le 4-nœud à éclater est attaché à un 2-nœud
  • gt une simple inversion de couleur suffit

a
a
a
a ?
?
? ? ?
?
?
?
?
?
?
?
92
Arbres 2.3.4 /Arbres bicolores
  • 2) Le 4-nœud , E, à éclater est attaché à un
    3-nœud
  • 3 cas lorsque le 3-nœud est penché à droite
  • 3 cas lorsque le 3-nœud est penché à gauche
  • a) E est premier fils du 3-nœud
  • gt on inverse les couleurs des éléments du
    4-noeud

a b
a
a
? a b
b
?
?
?
b
? ? ?
?
?
?
?
?
93
Arbres 2.3.4 /Arbres bicolores
  • b) E est second fils du 3-nœud
  • gt une inversion de couleurs entraîne une
    mauvaise disposition des éléments jumeaux a,
    ? et b
  • gt rotation droite-gauche au niveau du nœud
    contenant a

RDG
?
a
a
a b
b
a
b
b
? ? ?
?
?
?
?
?
?
?
?
a ? b
?
?
94
Arbres 2.3.4 /Arbres bicolores
  • c) E est troisième fils du 3-nœud
  • gt rotation gauche au niveau du nœud
    contenant a

b
RG
a
a b
a
b
a
?
b
? ? ?
?
?
?
?
?
?
?
?
a b ?
95
Arbres 2.3.4 /Arbres bicolores
  • Algorithme dadjonction
  • Descendre à partir de la racine à la recherche de
    la feuille où insérer lélément
  • Sur le chemin, lorsquun nœud A a ses deux fils
    rouges on inverse les couleurs de A et de ses
    fils si de plus le père de A est lui aussi
    rouge, on fait une rotation au niveau du
    grand-père de A avant de poursuivre la descente.
  • Ladjonction d un nouvel élément se fait
    toujours dans une feuille qui devient un nœud
    rouge, puisque le nouvel élément est ajouté en
    tant que jumeau dans le cas où le père du nœud
    ajouté est rouge, mais n a pas de frère rouge,
    il faut effectuer une rotation comme en b)

96
Arbres 2.3.4 /Arbres bicolores
  • Exercice
  • Écrire lalgorithme dadjonction en utilisant le
    type suivant
  • typedef enumblanc, rouge couleur
  • typedef struct bn
  • couleur coul
  • int val
  • struct bn fg, fd
  • Bnoeud
  • typedef Bnoeud Bicolore

97
Recherche externe
  • Grandes collections d éléments stockés sur
    mémoire secondaire paginée.
  • Le nombre d accès à la mémoire secondaire est
    prépondérant
  • gt minimiser le nombre de transferts de pages
  • B-Arbres
  • généralisation des arbres 2.3.4

98
Recherche externe B-arbres
  • Un B-arbre d ordre m est
  • un arbre binaire de recherche formé de nœuds qui
    peuvent chacun contenir jusquà 2m éléments
  • chaque nœud est dans une page différente du
    support externe et
  • la complexité des algos de recherche, adjonction
    et suppression d un élément parmi n, compté en
    nombre d accès à la mémoire secondaire, est en
    O(logm n)

99
B-arbres
  • Un B-arbre d ordre m est un arbre binaire de
    recherche dont
  • toutes les feuilles sont située au même niveau
  • tous les nœuds, sauf la racine, sont des k-nœuds
    avec k ? m1..2m1
  • la racine est un k-nœud avec k ?2..2m1

100
B-arbres
  • Exemple

25
30 40
6 10 20
41 42 44 46
32 35 38
13 14 15 18
22 24
1 2 3 4
26 27 28
7 8
Exemple de B-arbre dordre 2
101
B-arbres
  • Dans la réalité m est choisi de manière à ce
    qu un nœud corresponde au contenu d une page.
  • Exemple
  • m250 gt un arbre de hauteur 2 peut contenir plus
    de 125 millions d éléments
  • 500 éléments à la racine
  • 500 501 (environ 25104) éléments dans les nœuds
    de profondeur 1
  • 5012 500 (environ 125106) éléments dans les
    nœuds de profondeur 2
  • gt Dans les B-arbres, les niveaux les plus bas de
    l arbre contiennent la quasi-totalité des
    éléments
  • Algorithmes de recherche, d adjonction et de
    suppression
  • gt généralisation des algorithmes pour les arbres
    2.3.4

102
Recherche externe Hachage dynamique
  • Le tableau de hachage est remplacé par un index
    en mémoire centrale
  • Cet index est un arbre binaire de recherche dont
    les feuilles contiennent des adresses en mémoire
    secondaire
  • Exemple
  • Adjonction successive par hachage dynamique des
    éléments E, X, T, F, R, N, C, L, S, G, B
  • valeurs de hachage
  • h(E)00101, h(X) 11000, h(T) 10100,
    h(F)00110,h(R)10010, h(N)01110, h(C)00011,
    h(L)01100, h(S)10011, h(G)00111, h(B)00010

103
Recherche externe Hachage dynamique
  • Exemple (suite)
  • En supposant que les pages en mémoire secondaire
    peuvent contenir 4 éléments.

1
0
1
0
R
Index en mémoire centrale
N,C
E X T F
E F
X T R
E F N C
X T R
Pages en mémoire secondaire
1
0
1
0
1
0
L
S,G
B
0
1
0
1
0
1
0
1
X T R
X T R S
X T R S
N L
E F C
N L
E F C G
N L
C B
E F G
Write a Comment
User Comments (0)
About PowerShow.com