Structures de données IFT-2000

Slides:



Advertisements
Présentations similaires
Structures de données avancées : B arbres
Advertisements

Structures de données avancées : Principales structures de données
Chapitre 3 Les arbres binaires
Chapitre 3 (fin). Les arbres AVL
Chapitre VI. Arbres (définition, parcours, représentation)
Cours 8 Arbres équilibrés
LOGO Responsable du cours Mlle Amina GHRAB : 1 ère année IAG Institut Supérieur de Gestion de Tunis.
OCaml – Les arbres L3 MI.
Les structures de données arborescentes
IFT-2000: Structures de Données
Chapitre VII. Tri Tri par tas Tri rapide.
Arbre Rouge Noir.
Gestion de Fichiers Arbres B.
Structures de données IFT-2000
Les fichiers indexés (Les B-arbres)
LA STRUCTURE D'ARBRE-B Institut National des Sciences Appliquées – Rouen Département Architecture des Systèmes d’Information.
LES ARBRES IUP 2 Génie Informatique
Structures de données IFT-2000
Structures de données IFT-2000
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 5 : La surcharge des opérateurs Département dinformatique.
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT Abder Alikacem Gestion des exceptions Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Sous-séquence de somme maximale (Algo#4). Algorithme retour arrière. Département dinformatique et de génie.
Structures de données IFT-10541
Structures de données IFT-2000
Présentation Structures de Données et TDA
Gestion de Fichiers Indexes basés sur les structures d’arbres binaires et indexes à niveaux multiples.
Les arbres binaires.
Arbres binaires complets
Les arbres et tas binomiaux
Arbres équilibrés Les transformation restructurantes dans leur ordre de définition: LL RR LR RL Facteur d’équilibre de noeud = (hauteur de s-arbre a gauche)
Exposé en structures de données
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem La récursivité Semaine 5 Département dinformatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT Abder Alikacem Linéarisation des matrices Département dinformatique et de génie logiciel Édition septembre 2009.
Structures de données IFT-2000 Abder Alikacem Semaine 12 (2 ième partie) Les B-arbres Département d’informatique et de génie logiciel Édition septembre.
Structures de données IFT Abder Alikacem Semaine 10 Les arbres SPLAY Département dinformatique et de génie logiciel Édition septembre
Structures de données IFT-2000 Abder Alikacem Semaine 11 Gestion des arbres binaires de tri et de recherche. Les arbres cousus. Les arbres n-aires Département.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Arbres de recouvrement minimum Département dinformatique et de génie logiciel Édition Septembre 2009 JFK.
Structures de données IFT-2000 Abder Alikacem La récursivité Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-10541
201 UMLV  Type « dictionnaire » sous-ensembles finis de E (ordonné) avec les opérations : Ens_vide :  Ens Ajouter : Ens x Elément  Ens Enlever.
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000
Un exemple détaillé Pour chaque noeud on mettra 0 si ses deux sous-arbres ont la même hauteur +n si le sous-arbre gauche est plus profond avec une différence.
Structures de données avancées : Arbres Red-Black
Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
MIGO ET COMPLEXITE1 ARBRES EQUILIBRES Définition : On dit qu’un arbre binaire est H équilibré si en tout nœud de l’arbre, les hauteurs des sous-arbres.
Arbres binaires et tables de hachage
Structures de données avancées : Arbres ‘Left Leaning Red-Black’
Structures de données avancées : Arbres AA
B.Shishedjiev - Modèle relationnel
Structures de données avancées : B arbres
Structures de données avancées : Variantes des B arbres
1 UMLV  FICHIERS Mémoire de masse découpée en blocs Fichier :liste chaînée de blocs, ou arbre de blocs (répertoires - fichiers)‏ Bloc d’éléments Bloc.
Structures de données avancées : Principales structures de données
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Semaine 10 Les algorithmes de recherche Les structures arborescentes Département d’informatique et de génie.
Les monceaux (Heap) Monceaux Propriétés des Monceaux
CSI25101 Maps et Dictionnaries. CSI25102 Un dictionnaire (dictionary) est un modèle abstrait de base de données. tel une file à priorité, un dictionnaire.
Arbres AVL - Hauteur d’un arbre AVL - Insertion et restructuration
4/25/2017 4:30 PM Arbres (2,4) CSI2510 CSI2510.
. Le B-Arbre.
Transcription de la présentation:

Structures de données IFT-2000 Abder Alikacem Semaine 12 (1ière partie) Les arbres rouge et noir 6 v 3 8 z 4 Édition septembre 2009 Département d’informatique et de génie logiciel

Plan Arbre rouge noir Définition Propriétés Complexité Opération d’ajout Opération de suppression

Arbre rouge et noir Un arbre rouge et noir est un arbre binaire de recherche comprenant une donnée supplémentaire par nœud définissant sa couleur : rouge ou noir. En contrôlant les manières dont sont colorés les nœuds on garantit que tout chemin menant de la racine à une feuille n ’est pas plus de deux fois plus long qu’un autre. Ainsi, un arbre rouge et noir est un arbre binaire de recherche approximativement équilibré.

Arbre rouge et noir : Propriétés Dans un arbre rouge et noir : Chaque nœud est soit rouge, soit noir (condition #1). La racine est noire (condition #2). Si un nœud est rouge alors ses deux nœuds fils sont noirs (condition #3). Chaque chemin reliant un nœud à une feuille descendante a le même nombre de nœuds noirs (condition #4). 26 On utilise également la convention qui dit qu’un noeud NULL est noir. 17 41 14 21 30 47 11 16 19 26 28 38

Arbre rouge et noir : Propriétés La troisième condition stipule que les nœuds rouges ne sont pas trop nombreux. La quatrième condition est une condition d'équilibre. Elle signifie que s'il on oublie les nœuds rouges d'un arbre on obtient un arbre binaire parfaitement équilibré. Comme la racine est noire et il ne peut y avoir plus de deux noeuds rouges consécutifs, la longueur de tout chemin de la racine à une feuille ne peut être supérieure à 2 fois le nombre de noeuds noirs dans ce chemin. Un arbre binaire complet de hauteur h possède au plus 1 + 2 + … + 2h = 2h+1-1 nœuds internes. La hauteur minimale d'un arbre à n nœuds internes est atteinte lorsque l'arbre est parfaitement équilibré et que feuilles sont toutes sur un ou deux niveaux: log(n+1)-1 ≤ h. Les arbres rouge et noir sont relativement bien équilibrés: h ≤ 2log(n+1).

Arbre rouge et noir : Implémentation template <typename E> class Arbre { public: //.. private: // classe Noeud class Noeud { public: E data; Noeud *gauche; Noeud *droite; Nœud *parent; bool is_red; Noeud( const E&d ) {…} }; // Les membres données Noeud * racine; //racine de l'arbre

Arbre rouge et noir : Opérations Par rapport aux arbres de recherche (i.e. arbres AVL), les opérations : RECHERCHER, MINIMUM, MAXIMUM, SUCCESSEUR et PREDECESSEUR sont inchangées dans un arbre rouge et noir Par rapport aux arbres de recherche, les opérations INSERER et SUPPRIMER ne sont pas directement supportées dans un arbre rouge et noir Dans un arbre rouge et noir : Les opérations INSERER et SUPPRIMER modifient l ’arbre. Ainsi, pour garantir les propriétés des arbres rouge et noir, il faut changer les couleurs de certains nœuds et changer aussi les chaînages par pointeurs. On modifie ces chaînages par rotations.

Arbre rouge et noir : Insertion Un noeud inséré est toujours une feuille On peut pas le colorier en noir, puisque cela violerait la condition 4 On colore le noeud en rouge Si le père est noir, pas de problème Si le père est rouge, on viole la condition 3. Dans ce cas, on ajuste l’arbre, par le biais de changements de couleurs et de rotations Exemple. Insertion de 4: violation de la condition 3 6 6 3 8 3 8 4

Arbre rouge et noir : La condition 3 Soit z le fils de parent v et de frère w Cas 1: w est rouge Recoloriage: situation d’overflow Cas 2: w est noir Restructuration: changer 4 de place w 4 v v 4 w v 2 7 2 7 z z z 6 6

Arbre rouge et noir : Recoloriage L’oncle de z, le frère de v, est rouge La violation de la condition 3 peut être propagée au grand parent u u u 4 4 w v w v 2 7 2 7 z z 6 6

Arbre rouge et noir : Restructuration L’oncle de z, le frère de v, est noir 4 6 7 z v w 2 Il y a 4 situations de configuration pour une restructuration lorsque la condition 3 est violée 2 4 6

Arbre rouge et noir : INSERER - cas 1 (père de x et oncle de x sont rouges) 4 On insère un nœud 4 que l ’on colore au départ en rouge 11 2 14 5 1 7 8 15 Couleur (x) <- rouge Tant que (xracine) et (p[x] est rouge) faire si (p[x] = gauche p[p[x]]) alors y <- droit p[p[x]] si (couleur (y) = rouge) alors //cas 1 couleur (p[x] )<- noir couleur (y) <- noir couleur (p[p[x]] )<- rouge 5 7 8 4 x 5 8 Quand on insère un noeud on le colore tjrs en rouge au départ. HYPOTHESE : racine est noire (maintenue : dernière instrction) Arrêt : ou bien ce noeud est racine ou bien son père est noir Car si son père est rouge alors les ptés des ARN sur les couleurs ne sont plus respectées. Rqe : les autres ptés sont maintenues. tant que non arrêt : on applique le traitement T T : si père de x est à gauche de son g-père alors y = frère droit du père de x si y est rouge alors : père de x et son frère deviennent noir et le g-père rouge. x<- son grand père et on itère 7 x<- p[p[x]] //on itère le traitement 4 … // traitement symétrique à droite Fin tant que couleur (racine) <- noir

Arbre rouge et noir : INSERER - cas 2 (x est fils droit et oncle droit noir) Couleur (x) <- rouge Tant que (xracine) et (p[x] est rouge) faire si (p[x] = gauche p[p[x]]) alors y <- droit p[p[x]] //oncle droit si (couleur (y) = rouge) alors // cas 1 (diapo précédente) sinon // cas 2 si (x=droit(p[x] )) alors 5 7 8 4 x 2 1 14 x 11 7 14 5 8 15 2 1 4 14 x <- p[x] // x =2 2 x Rotation gauche (x) On fait une rotation pour amener la situation au cas 3

Arbre rouge et noir : INSERER - cas 2 (x est fils droit et oncle droit noir) Couleur (x) <- rouge Tant que (xracine) et (p[x] est rouge) faire si (p[x] = gauche p[p[x]]) alors y <- droit p[p[x]] //oncle droit si (couleur (y) = rouge) alors // cas 1 (avant dernière diapo) sinon // cas 2 si (x=droit(p[x] )) alors 5 7 8 4 x 2 1 11 7 14 5 8 15 2 1 4 7 x Cas 2 : frère du père de x est noir et x est un fils droit On fait une rotation pour amener la situation au cas 3 et nouveau x

Arbre rouge et noir : INSERER - cas 3 (x est un fils gauche et oncle droit noir) 11 7 14 5 8 15 2 1 4 11 Couleur (x) <- rouge Tant que ... faire ... sinon si (x=droit(p[x] )) alors // cas 2 ... Sinon // cas 3 couleur (p[x] ) <- noir couleur (p[p[x]]) <- rouge Rotation droite (p[p[x]])) fsi 7 x 11 7 14 5 8 15 2 1 4 Cas 3 : frère du père de x est noir et x est un fils gauche On a bien un arbre rouge noir

Arbre rouge et noir : Top-Down Pour éviter de devoir propager vers le haut l’algorithme de rotation, on peut utiliser une approche top-down Idée: garantir que, lorsqu’on arrive au point d’insertion, qu’il ne s’agisse pas d’un noeud rouge On pourra donc ajouter tout simplement un noeud rouge, sans risque de violer la propriété 3 En descendant dans l’arbre, lorsqu’on rencontre un nœud qui a deux fils rouges, on colore ce noeud rouge et noir ses deux fils: Ainsi, le nombre de noeuds noirs dans un chemin demeure inchangé Par contre, on peut se retrouver avec deux noeuds rouges consécutifs, si le parent de 6 est rouge. Dans ce cas, il faudra appliquer une rotation. 6 6 3 8 3 8

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 10

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 10 85

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 10 85 15

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 85 10 Rotation double

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 Attention: la racine ne change pas de couleur 15 85 10 Ajustement durant le parcours

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 85 10 70

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 85 10 70 20

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85 Rotation simple

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85 Ajustement durant le parcours

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85 60

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 20 85 60 30

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 20 60 Rotation double

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 20 60

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 20 60 Ajustement durant le parcours

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 15 70 10 30 85 20 60 50

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50 Rotation double

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50 Ajustement durant le parcours

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50 65

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50 65 80 Remarque: ces noeuds n’ont pas été modifiés parce qu’il ne sont pas dans le chemin parcouru

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50 65 80 90

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50 65 80 90

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50 65 80 90 Ajustement durant le parcours

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 50 65 80 90 40

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 5 50 65 80 90 40

Arbres Rouge-Noir – Exemple détaillé 10 85 15 70 20 60 30 50 65 80 90 40 5 55 30 70 15 10 20 60 85 5 50 65 80 90 40 55

Arbres Rouge-Noir – Suppression La suppression commence par une recherche classique du nœud à supprimer, puis on enchaîne sur la réalisation de la suppression. La suppression du nœud consiste par remplacer par le plus petit élément de son sous-arbre droit, s’il a deux fils, et en le supprimant effectivement, s’il n’a qu’un seul fils (comme pour les arbres AVL). Par la suite, il faut vérifier la propriété des arbres rouge et noir. Si le nœud supprimé est rouge, la propriété (4) reste vérifiée. Si le nœud supprimé est noir, alors sa suppression va diminuer la hauteur noire de certains chemins dans l’arbre. Le nœud qui remplacera le nœud supprimé doit porter une couleur noire en plus: il devient noir s'il est rouge et qu'il devient doublement noir s'il est déjà noir. La propriété (4) reste ainsi vérifié mais il y a éventuellement un nœud qui est doublement noir.

Arbres Rouge-Noir – Suppression Afin de supprimer ce nœud doublement noir, l'algorithme effectue des modifications dans l'arbre à l'aide de rotation. Soit x le nœud doublement noir. Cas 0 : le nœud x est la racine de l'arbre Le nœud x devient simplement noir. La propriété (2) est maintenant vérifiée et la propriété (4) le reste. C'est le seul cas où la hauteur noire de l'arbre diminue (l’inverse, lorsqu’on change en noir la couleur de la racine, c’est le seul cas ou la hauteur noire augmente).

Arbres Rouge-Noir – Suppression Cas 1 : le frère f de x est noir. Par symétrie, on suppose que x est le fils gauche de son père p et que f est donc le fils droit de p. Soient g et d les fils gauche et droit de f. L'algorithme distingue à nouveau trois cas suivant les couleurs des nœuds g et d. Cas 1a : les deux fils g et d de f sont noirs. Le nœud x devient noir et le nœud f devient rouge. Le nœud p porte une couleur noire en plus. Il devient noir s'il est rouge et il devient doublement noir s'il est déjà noir. Dans ce dernier cas, il reste encore un nœud doublement noir mais il s'est déplacé vers la racine de l'arbre. C'est ce dernier cas qui représenté à la figure suivante. d

Arbres Rouge-Noir – Suppression Cas 1b : le fils droit d de f est rouge. L'algorithme effectue une rotation droite entre p et f. Le nœud f prend la couleur du nœud p. Les noeuds x, p et d deviennent noirs et l'algorithme se termine.

Arbres Rouge-Noir – Suppression Cas 1c : le fils droit d est noir et le fils gauche g est rouge. L'algorithme effectue une rotation gauche entre f et g. Le nœud g devient noir et le nœud f devient rouge. Il n'y a pas deux nœuds rouges consécutifs puisque la racine du sous-arbre D est noire. On est ramené au cas précédent puisque maintenant, le frère de x est g qui est noir et les deux fils de g sont noir et rouge. L'algorithme effectue alors une rotation entre p et g. Le nœud f redevient noir et l'algorithme se termine.

Arbres Rouge-Noir – Suppression Cas 2 : le frère f de x est rouge. Par symétrie, on suppose que x est le fils gauche de son père p et que f est donc le fils droit de p. Puisque f est rouge, le père p de f ainsi que ses deux fils g et d sont noirs. L'algorithme effectue alors une rotation gauche entre p et f. Ensuite p devient rouge et f devient noir. Le nœud x reste doublement noir mais son frère est maintenant le nœud g qui est noir. On est donc ramené au cas 1.

Structures de données IFT-2000 Abder Alikacem Semaine 12 (2ième partie) Les B-arbres Édition septembre 2009 Département d’informatique et de génie logiciel

Plan Les arbres B Définition Notions de structures de données externes Opérations d’ajout Opérations d’enlèvement

Arbre-B d’ordre m définition : e1 e2 e3 e4 3 6 8 10 12 la racine a au moins 2 enfants à moins que ce ne soit une feuille aucun nœud n’a plus de m enfants tous les nœuds, sauf la racine et les feuilles, ont au moins m/2 enfants toutes les feuilles apparaissent au même niveau tout nœud qui a k enfants a k-1 éléments e1 e2 e3 e4 3  6   8  10 12 p0 p1 p2 p3 p4

Arbres-B : recherche 3 6 8 10 e1 e2 e3 e4 p0 p1 p2 p3 p4 3  6  8 10   p0 p1 p2 p3 p4 p0 si x < e1 pi si ei < x < ei+1 pm-1 si em-1 < x 8 15     3  6     9 12    16  20   

Arbre-B d’ordre m 3 6 8 10 e1 e2 e3 e4 p0 p1 p2 p3 p4 3  6   8  10 p0 p1 p2 p3 p4 Outils pour la gestion d’un fichier binaire Nœud typique & en-tête du fichier index (B-arbre) La mécanique de la construction d’un B-Arbre La procédure de la subdivision d’un nœud

Structure typique d’un arbre-B struct BTPAGE { short keycount; /* Le compteur de clefs. Indique quand le noeud est plein. */ struct uneCle key [MAXKEYS]; /* Le tableau des clef. */ short CHILD[MAXKEYS+1]; /* Le tableau qui contiendra les fils pointés */ };

Ajout dans un arbre-B d’ordre 5 +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20 +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20 40 +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 40 +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30 40 +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 15 20 30 40 +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 15 20 30 40 +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20    10  15 30  40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20    10  15 30  35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20    7 10  15 30  35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20    7 10  15 26 30  35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20    7 10  15 18 26 30  35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20    7 10 15 18 22 26 30  35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20    7 10 15 18 22 26 30  35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20 30    7 10 15 18 22 26   35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 20 30    5 7 10  15 18 22 26   35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5      20 30    5 7 10  15 18 22 26   35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30    5 7 15 18   22 26   35 40    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30    5 7 15 18   22 26   35 40 42    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30    5 7 13 15 18   22 26   35 40 42    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30    5 7 13 15 18   22 26   35 40 42 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30    5 7 13 15 18   22 26 27   35 40 42 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30    5 7 8 13 15 18   22 26 27   35 40 42 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30    5 7 8 13 15 18   22 26 27   32 35 40 42 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30    5 7 8 13 15 18   22 26 27   32 35 40 42 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30 40    5 7 8 13 15 18   22 26 27   32 35 42 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30 40    5 7 8 13 15 18   22 26 27   32 35 38 42 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30 40    5 7 8 13 15 18   22 24 26 27   32 35 38 42 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30 40    5 7 8 13 15 18   22 24 26 27   32 35 38 42 45 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30 40    5 7 8 13 15 18   22 24 25 26 27   32 35 38 42 45 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30 40    5 7 8 13 15 18   22 24 25 26 27   32 35 38 42 45 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 30 40    5 7 8 13 15 18   22 24 25 26 27   32 35 38 42 45 46    +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 25 30 40    5 7 8 13 15 18   22 24   32 35 38 42 45 46    26 27   +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 25 30 40    5 7 8 13 15 18   22 24   32 35 38 42 45 46    26 27   +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 10 20 25    30 40    5 7 8 13 15 18   22 24   32 35 38 42 45 46    26 27   +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 25 10 20    30 40    5 7 8 13 15 18   22 24   32 35 38 42 45 46    26 27   +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Ajout dans un arbre-B d’ordre 5 25 10 20    30 40    5 7 8 13 15 18   22 24   32 35 38 42 45 46    26 27   +: 20,40,10,30,15,35,7,26,18,22,5,42,13,46,27,8,32,38,24,45,25

Un B-arbre est une structure de données externe. Arbres-B Implantation Un B-arbre est une structure de données externe. On parle de fichier index Il s’agit d’un fichier binaire (ou structuré)

Les fichiers binaires Principe - un fichier est une séquence d'octets non interprétés Interprétation des données binaires - à la charge du programmeur - une séquence de n octets peut s'interpréter comme: un entier, un tableau, un enregistrement, ... Les outils Déclaration d’un pointeur de fichier Ouverture et fermeture Les différents modes d’ouverture Lecture et écriture Principe du numéro d’ordre relatif (rrn) Accès direct..

Les fichiers binaires fstream #include <fstream> #include <iostream> //3 classes: ifstream: pour lire dans des fichiers ofstream: pour écrire dans des fichiers fstream: pour lire et écrire dans des fichiers fstream f; f.open("toto.txt", ios::binary|ios::in|ios::out); mode d'ouverture: ios::in // ouverture en lecture ios::out // ouverture en écriture ios::app // ajout en fin de fichier ios::ate // se position à la fin ios:: binary // mode binaire ios::trunc // tronque le fichier à 0

Accès direct avec fseekg() struct Personne { int age; char nom[40]; }; Personne p; fstream f; … • Ecriture dans le fichier f.open(nomFich, ios::binary|ios::in|ios::out) f.write (reinterpret_cast<char*>&p, sizeof(Personne)); • Lecture du fichier f.read (reinterpret_cast<char*>&p, sizeof(Personne)); f.tellg(); //retourne Position courante du pointeur dans le fichier, en nombre d'octets Accès direct pour lire ou écrire: f.seekg (rrn*sizeof(Personne), ios_base::beg) déplacement par rapport à origine ios_base::beg début de f ios_base::cur position courante Ios_base::end fin de f

Arbre-B d’ordre m 3 6 8 10 e1 e2 e3 e4 p0 p1 p2 p3 p4 3  6  8 10 p0 p1 p2 p3 p4 Exemple et algorithme d’insertion détaillé (B-arbre d’ordre 3) I, K, A, Z, M, B, W, L, C, J, O

Structure typique d’un arbre-B struct BTPAGE { short keycount; /* Le compteur de clefs. Indique quand le noeud est plein. */ struct uneCle key [MAXKEYS]; /* Le tableau des clef. */ short CHILD[MAXKEYS+1]; /* Le tableau qui contiendra les fils pointés */ };

Ajout dans un B-arbre File Structures Michael J. Folk and all. /* --------------------------------------------------------*/ /* **** Driver.cpp **** Le "pilote" pour la création et la manipulation d’arbres-B. Crée ou ouvre un fichier arbre-B. Obtient la clef suivante et appelle la fonction insert pour l'insérer dans l'arbre. Au besoin, driver peut créer une nouvelle racine pour l'arbre. */ File Structures Michael J. Folk and all.

Ajout dans un B-arbre template <typename T> void BTree:: driver() { …… /* ouverture du fichier index*/ if btOpen() root = getRoot(); else { btfd.open("btree.dat", ios::binary|ios::out|ios::in); key = getClef(); /*première clé*/ root = createRoot(key, NIL, NIL); } key = getClef(); /*une clé à insérer*/ do { promoted = insert(root, key, &promoRrn, &promoKey); if (promoted) root = bt.createRoot(promoKey, root, promoRrn); key = getClef(); } while( /*il y a une clé*/ );

/* **** insert.cpp **** Contient la méthode insert() qui insère une clef dans un arbre-B. S'appelle de manière récursive tant que le bas de l'arbre n'est pas atteint. Alors, insert() insère une clef dans une feuille de l ’arbre. Si le noeud est plein, - appelle split() pour scinder le noeud - promouvoit la clef du milieu et le rrn du nouveau nœud et essaie d’insérer la clé promue lors de ses remontées d’appel */ /* insert() Arguments: rrn: Le rrn de la page dans laquelle on fait l'insertion *promoRchild: Le fils promu vers le prochain niveau key: La clef à être insérée *promoKey: La clef promue vers le prochain niveau

bool BTree:: insert (short rrn, T key, short. promoRchild, clef bool BTree:: insert (short rrn, T key, short *promoRchild, clef *promoKey) { …. if (rrn == NIL) { *promoKey = key; *promoRchild = NIL; return (true); } btread(rrn, &page); found = searchNode(key, page, &pos); if (found) { printf("Erreur: clé dupliquée); return (false); promoted = insert(page.child[pos], key, &pBrrn, &pBkey); if (!promoted) return (false); if (page.keycount < MAXKEYS) { insInPage( pBkey, pBrrn, &page); btWrite(rrn, page); else { split( pBkey, pBrrn, &page, promoKey, promoRchild, &newPage); btwrite(rrn, page); btwrite(*promoRchild, newPage);

Arbres-B : recherche 3 6 8 10 e1 e2 e3 e4 p0 p1 p2 p3 p4 3  6  8 10   p0 p1 p2 p3 p4 p0 si x < e1 pi si ei < x < ei+1 pm-1 si em-1 < x 8 15    3  6    9 12    16 20   

3 6 8 10 template <typename T> bool BTree::searchBTree(int rrn, T key, int *trouvRRN, short *trouvPos) { short pos; Bool found; BTPAGE page; if (rrn == NIL) return false; } else btread(rrn,&page); /*lecture d'un noeud (une page) dans le fichier B-Arbre*/ found = searchNode(key, page, &pos); /*recherche dans la page lue */ if (found) *trouvRRN = page.key[pos].RRN_FichPrin; return true; return(search(page.child[pos],key,trouvRRN,trouvPos)); /* RRN_FichPrin est le numéro du bloc dans le fichier de données (FichPrin) où se trouve toutes les données de l'enregistrement trouvé. Chaque clé est accompagnée par l'adresse où se trouve la donnée correspondante dans un autre fichier que le fichier index B-Arbre.*/ 3 6  8  10  

Enlèvement dans un arbre-B 25 10 20    30 40    5 7 8 13 15 18   22 24   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B x 25 10 20    30 40    5 7 8 13 15 18   22 24   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B x 25 10 20    30 40    5 7 8 13 15 18   22 24   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 24 10 20    30 40    5 7 8 13 15 18   22   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 24 10 20    30 40    5 7 8 13 15 18   22   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B x 24 10 20    30 40    5 7 8 13 15 18   22   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B x 24 10 20    30 40    5 7 8 13 15 18   22   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 22 10 20    30 40    5 7 8 13 15 18   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 22 10 20    30 40    5 7 8 13 15 18   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 22 10 18    30 40    5 7 8 13 15   20 32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B x 22 10 18    30 40    5 7 8 13 15   20 32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B x 22 10 18    30 40    5 7 8 13 15   20 32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 20 10 18    30 40    5 7 8 13 15   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 20 10 18    30 40    5 7 8 13 15   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 20 10 15    30 40    5 7 8 13   18 32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B x 20 10 15    30 40    5 7 8 13   18 32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B x 20 10 15    30 40    5 7 8 13   18 32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 18 10 15    30 40    5 7 8 13   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 18 10 15    30 40    5 7 8 13   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 18 10    30 40    5 7 8 13 15   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 18 10    30 40    5 7 8 13 15   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 18 10    30 40    5 7 8 13 15   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 10 18    30 40    5 7 8 13 15   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 10 18    + 30 40    5 7 8 13 15   32 35 38 42 45 46    26 27   -: 25,24,22,20

Enlèvement dans un arbre-B 10 18 30 40    5 7 8 13 15   32 35 38 42 45 46    26 27   -: 25,24,22,20

Les arbres-B+ Définitions: c ’est un B-arbre + duplications des clés + chaînage de toutes les feuilles

Construction d’un arbre-B+ Exemple Insérer 65 65

Insérer 25 25 65

Insérer 50 25 50 65

Insérer 30 25 30 50 65

Insérer 85 25 30 50 65 85 25 30 50 65 85 50 25 30 50 65 85

Insérer 75 50 25 30 50 65 75 85

Insérer 80 50 80 25 30 50 65 75 85 50 25 30 50 65 75 80 85 50 25 30 50 65 75 80 85 50 75 25 30 50 65 75 80 85