You are on page 1of 19

Arbres (2,4)

2 5 7 10 14

CSI2510 1
Arbres (2,4)
Arbres de recherche généralisés (Multi-way search tree)
 Définition
 Recherche
Arbres (2,4)
 Définition
 Recherche
 Insertion
 Suppression

CSI2510 2
Arbre de recherche multi-branches
Un arbre de recherche généralisé (ou arbre de recherche m-aire) est un
arbre ordonné tel que:
 Chaque nœud interne a au moins deux enfants et emmagasine d -1 entrées

clé-élément (ki, oi), où d est le nombre des enfants de a


 Un nœud ayant comme enfants v v … v emmagasine les clés k k … k
1 2 d 1 2 d1 de
telle façon que:
 Les clés dans le sous-arbre v1 sont inférieures à k1
 Les clés dans le sous-arbre vi sont comprises entre ki1 et ki (i = 2, …,
d1)
 Les clés dans le sous-arbre vd sont supérieures à kd1
 Les feuilles n’emmagasinent aucune clé

11 24

2 6 8 15 27 32

30
CSI2510 3
Parcours infixe de l’arbre généralisé de recherche

Cas particulier avec d=2: arbre de recherche binaire


Extension du parcours infixe des arbres binaires
Nous visitons l’entrée (ki, oi) du nœud v entre les traversées
récursive des sous-arbres de v enracinés aux enfants vi et vi1
La parcours infixe d’un arbre de recherche généralisé visite
les clés dans l’ordre croissant

11 24
8 12
2 6 8 15 27 32
2 4 6 10 14 18
30
1 3 5 7 9 11 13 16 19

15 17
CSI2510 4
Recherche dans un arbre de recherche généralisé

Semblable à la recherche dans les arbres de recherche binaires


Pour chaque nœud interne d’enfants v1 v2 … vd et emmagasinant les clés k1 k2
… kd1
 k  k (i = 1, …, d1): la recherche est accomplie avec succès
i
 k  k : nous continuons la recherche dans le sous-arbre enfant v
1 1
 k
i1  k  ki (i = 2, …, d1): nous continuons la recherche dans le sous-
arbre enfant vi
 k k
d1: nous continuons la recherche dans l’enfant vd
Si un nœud externe est atteint, la recherche échoue
Exemple: chercher 30

11 24

2 6 8 15 27 32

30
CSI2510 5
Arbre (2,4)

un arbre (2,4) (appelé aussi arbre 2-4 ou arbre 2-3-4) est un arbre
de recherche généralisé qui satisfait les propriétés suivantes:
 Propriétés de taille des nœuds: chaque nœud interne a au
maximum quatre enfants et au minimum 2 enfants
 Propriétés de profondeur: tous les nœuds externes ont la même
profondeur
Un nœud interne d’un arbre (2,4) est nommé un 2-nœud, 3-nœud ou
4-nœud suivant le nombre de ses enfants

10 15 24

2 8 12 18 27 32

CSI2510 6
Hauteur d’un arbre (2,4)
Théorème: un arbre (2,4) emmagasinant n entrées a une hauteur
O(log n) :
 Soit h la hauteur d’un arbre (2,4) avec n entrées

 Comme il y a au moins 2 i entrées à la profondeur i = 0, … , h -


1 et aucune entrée à la profondeur h, nous avons:
n  1 + 2 + 4 + … + 2h-1 = 2h - 1
 Alors, h  log (n + 1)

La recherche dans un arbre (2,4) avec n entrées prend un temps


O(log n)

profondeur elements
0 1

1 2
h1 2h1

h 0

CSI2510 7
Hauteur d’un arbre (2,4)

Quand tous les nœuds internes ont 1 clé


# min. d’entrées, n: et 2 enfants arbre binaire parfait:
n = 2h-1 h = O(log n)

Quand tous les nœuds internes ont 3 clés


et 4 enfants
h-1
# max. d’entrées, n:
 4 =3*
n = 3*
i=0
i
(4h-1)
4-1

# clés = 4h-1 h = O(log4 n)


 Rechercher = O( log n )

CSI2510 8
Insertion
nous insérons une nouvelle entrée (k, o) dans le nœud parent v
de la feuille atteinte en recherchant k
 Nous conservons la propriété de profondeur mais…

 Nous pouvons causer un débordement (overflow) (c.-à-d., le


nœud v peut devenir un 5-nœud)
Exemple: insertion d’une clé 30 cause un débordement

10 15 24
v
2 8 12 18 27 32 35

10 15 24
v
2 8 12 18 27 30 32 35

CSI2510 9
Débordement et fractionnement

10 15 24 10 15 24

32 au parent 35
27 30 32 35
27 30

10 15 24 32 Overflow !

27 30 35

CSI2510 10
Débordement et fractionnement
24 au parent
10 15 24 32

27 30 35 32
10 15

24

10 15 32

2 8 12 18 27 30 35

CSI2510 11
Débordement et fractionnement
Nous contrôlons un débordement (overflow) à un nœud v avec une
opération de fractionnement  (ou séparation-split):
 Soit v … v les enfants de v et k … k les clés de v
1 5 1 4
 nœud v est remplacé par deux nœuds v' et v" tel que:

 v' est un 3-nœud avec les clés k1 k2 et les enfants v1 v2 v3


 v" est un 2-nœud avec une clé k4 et les enfants v4 v5
 La clé k est insérée dans le parent u de v (une nouvelle racine peut être
3
créée)
Le débordement peut se propager au parent du nœud u

u u
15 24 15 24 32

v v' v"
12 18 27 30 32 35 12 18 27 30 35

v1 v2 v3 v4 v5 v1 v2 v3 v4 v5
CSI2510 12
Analyse d’insertion (en remontant)
Soit T un arbre (2,4) avec n
Algorithm insertItem(k, o) entrées:
 L’arbre T a une hauteur
O(log n)
1. Nous cherchons une clé k pour localiser  L’étape 1 prend un temps
le nœud d'insertion v O(log n) parce que nous
visitons O(log n) nœuds
2. Nous ajoutons le nouvel item (k, o) au  L’étape 2 prend un temps
noeud v O(1)
 L’étape 3 prend un temps
3. while overflow(v) O(log n) parce que chaque
if isRoot(v) séparation prends un
Créer une nouvelle racine vide au temps O(1) et nous
dessus de v effectuons O(log n)
v  split(v) séparations au max.
Alors, une insertion dans un
arbre (2,4) prends un temps
O(log n)

CSI2510 13
Suppression
Il suffit de considérer les cas où la clé à supprimer est dans un
nœud avec des enfants feuilles
Sinon, nous remplaçons l’entrée avec son successeur (ou
prédécesseur) dans le parcours infixe et nous enlèverons cette
dernière entrée
Exemple: pour enlever la clé 24, nous la remplaçons par la clé 27
(son successeur en parcours infixe )

10 15 24

2 8 12 18 27 32 35

10 15 27

2 8 12 18 32 35

CSI2510 14
Underflow et Fusion
La suppression d’une entrée d’un nœud v peut causer un underflow où le nœud v
devient un 1-nœud avec un enfant et aucune clé
Pour contrôler un underflow au nœud v de parent u, nous considérons deux cas
Cas 1: Les 2 frères adjacents de v sont des 2-nœud ou v possède un seul frère
adjacent qui est 2-noeud:
 Fusion : fusionner v avec un frère adjacent w et déplacer une entrée de u
dans le nœud fusionné v'
 Après la fusion, l’underflow peut se propager au parent u

 Si l’underflow se produit à la racine, alors le parent et les deux enfants


deviennent un 3-noeud

u u
9 14 9
w v v'
2 5 7 10 2 5 7 10 14

CSI2510 15
Underflow et transfert
Pour contrôler un underflow au nœud v de parent u, nous
considérons deux cas
Cas 2: un frère adjacent w de v est un 3-nœud ou un 4-nœud
 Transfert:

1. déplacer un enfant de w dans v


2. déplacer une entrée de w dans u
3. déplacer une entrée de u dans v
 Après le transfert, plus d’underflow possible

u u
4 9 4 8
w v w v
2 6 8 2 6 9

CSI2510 16
Analyse de suppression (en remontant)

Soit T un arbre (2,4) avec n entrées


 Un arbre T a une hauteur O(log n)
Lors d’une suppression
 Nous visitons O(log n) nœuds pour localiser le nœud dans
lequel aura lieu la suppression
 Nous résolvons l’underflow avec une série de O(log n)
fusions au max., suivie d’un transfert dans le pire des cas
 Chaque fusion ou transfert prend un temps O(1)
Alors, la suppression d’une entrée d’un arbre (2,4)
prend un temps O(log n)

CSI2510 17
Insertion et suppression en descendant
Il est aussi possible d’effectuer l’insertion en descendant
Chaque fois qu’un 4-nœud est rencontré lors de la descente, celui-ci est éclaté.
 Si c’est la racine, elle est éclaté en trois 2-nœuds.
 Sinon, son parent est forcément un 2-nœud ou un 3-nœud

Pour effectuer la suppression en descendant:


On s’arrange pour que l’élément à supprimer soit un 3-nœud ou un 4-nœud (sauf pour la racine)
 Si les 2 enfants de l’élément supprimé sont 2-nœud, alors on les fusionne
 Sinon, on remplace par successeur infixe
Donc, chaque fois que je rencontre un 2-nœud, celui-ci est transformé en un 3-nœud
 Si mon frère est un 3-nœud ou un 4-nœud, je vais lui chercher un élément
 Si mon frère est un 2-nœud, alors je dois aller chercher un élément en le prenant au parent qui sera forcement un 3-nœud ou un 4-nœud et je forme un 4-noeud
 A moins que le parent soit la racine, je créé alors un 4-noeud

CSI2510 18
Exemple
Insérer
 10,5,8,7,15,20,12,9,13,22,16,24
Retirer
 8,7,10,16,20

CSI2510 19

You might also like