Professional Documents
Culture Documents
Arbres (2,4)
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
11 24
2 6 8 15 27 32
30
CSI2510 3
Parcours infixe de l’arbre généralisé de recherche
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é
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
profondeur elements
0 1
1 2
h1 2h1
h 0
CSI2510 7
Hauteur d’un arbre (2,4)
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…
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:
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
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:
u u
4 9 4 8
w v w v
2 6 8 2 6 9
CSI2510 16
Analyse de suppression (en remontant)
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
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