Structures de données IFT-2000 Abder Alikacem Semaine 11, 1 ère partie Les B-arbres Département dinformatique et de génie logiciel Édition septembre 2009.

Slides:



Advertisements
Présentations similaires
Rappels C.
Advertisements

Portée des variables VBA & Excel
GEF 243B Programmation informatique appliquée Types dérivés, structures et tableaux §
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Gestion de FICHIERS.
C.
Algorithme et structure de données
Chap. 1 Structures séquentielles : listes linéaires
FLSI602 Génie Informatique et Réseaux
FLSI602 Génie Informatique et Réseaux
ALGORITHMES RECURSIFS
Cours 7 - Les pointeurs, l'allocation dynamique, les listes chaînées
Structures de données linéaires
Récursivité.
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
Les structures de données arborescentes
Synchronisation et communication entre processus
II. Chaînage, SDD séquentielles
Les algorithmes: complexité et notation asymptotique
RECURSIVITE ARBRES BINAIRES
TRAITEMENT DE STRUCTURES
1 Les pointeurs et quelques rappels sur certains éléments du langage C.
IFT-2000: Structures de Données Listes chaînées Dominic Genest, 2009.
Les tris.
Gestion de Fichiers Arbres B.
FICHIERS.
Structures de données IFT-2000
Les fichiers binaires en C++
FICHIERS : Définition : Algorithme général:
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.
Structures de données IFT-2000
Structures de données IFT-2000
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-10541
Structures de données IFT-2000
Structures de données IFT-10541
Structures de données IFT-2000
/* */ /* **** btutil.c **** Contient les fonctions utilitaires du programme create_root() -- Obtient.
IFT Structures de données
IFT 6800 Atelier en Technologies d’information
Programme de baccalauréat en informatique Programmation Orientée Objets IFT Thierry EUDE Module 6. Gestion des erreurs et des exceptions : Fonctionnement.
Structures de données IFT-2000
Structures de données IFT-10541
/* */ /*Mise en garde….. Notez bien: dans les exemples qui suivent, la clé d ’indexation est un.
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-2000
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 Abder Alikacem Retour sur les listes ordonnées Département dinformatique et de génie logiciel Édition Septembre 2009.
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-2000
Les fichiers texte en C++
L’essentiel du langage C
Structures des données
Le langage C Structures de données
Ch. PAUL - Piles et Files à l'aide de listes chainées
LES PILES ET FILES.
Notions de pointeurs en C
Mémoire périphérique Stockage primaire: Mémoire principale (RAM)
1 FICHIERS. 2 Les Fichiers  Les "entrées-sorties conversationnelles" échangent des informations entre le programme et l'utilisateur.  Le terme de fichier.
Un survol du language C.
Labo 4 : Les structures et les entrées et sorties
1 Structures des données. 2  Le tableau permettait de désigner sous un seul nom un ensemble de valeurs de même type, chacune d'entre elles étant repérée.
Arbres binaires et tables de hachage
Les variables fichiers. Le type fichier On manipule les fichiers par l’intermédiaire de structures FILE décrites dans stdio.h FILE *monFichier; –Nom physique.
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 IFT-2000
Transcription de la présentation:

Structures de données IFT-2000 Abder Alikacem Semaine 11, 1 ère partie Les B-arbres Département dinformatique et de génie logiciel Édition septembre 2009

Plan Les arbres B Les arbres B+

Retour aux arbres binaires Insertion : par une feuille feuille après feuille toutes les racines sont fixées trop tôt

Arbres-B Idée : avoir un tampon (tableau) 2 types de gestion nœuds plus grands (tableau) choisir la bonne racine (plus stable)

Arbres-B

Arbres-B

Arbres-B

Arbres-B

Arbres-B

Arbres-B

Arbres-B

Arbres-B

Arbres-B

Arbres-B

Arbre-B dordre m définition : la racine a au moins 2 enfants à moins que ce ne soit une feuille aucun nœud na 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 p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

Arbres-B : recherche p 0 si x < e 1 p i si e i < x < e i+1 p m-1 si e m-1 < x p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

Utilisation darbres-B + indirection vers les données

Arbre-B dordre m Outils pour la gestion dun fichier binaire Nœud typique & en-tête du fichier index (B-arbre) La mécanique de la construction dun B-Arbre La procédure de la subdivision dun nœud p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

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 */ }; Structure typique dun arbre-B

+: 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 dordre 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 dordre 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 dordre 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 dordre 5

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Arbres-B Implantation Un B-arbre est une structure de données externe. On parle de fichier index Il sagit dun 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 dun pointeur de fichier Ouverture et fermeture Les différents modes douverture Lecture et écriture Principe du numéro dordre relatif (rrn) Accès direct..

Les fichiers binaires #include //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::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 fstream

Accès direct avec fseek..() 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 struct Personne { int age; char nom[40]; }; Personne p;fstream f; … Ecriture dans le fichierf.open(nomFich, ios::in|ios::out) f.write (reinterpret_cast &p, sizeof(Personne)); Lecture du fichier f.read (reinterpret_cast &p, sizeof(Personne)); f.tellg(); //retourne Position courante du pointeur dans le fichier, en nombre d'octets Accès direct pour lire ou écrire:

Organisations et modes daccès des fichiers Mode dorganisation SéquentielRelatif ou directSéquentiel indexé Mode daccès séquentiel Mode daccès direct Hashing Mode daccès séquentiel Mode daccès indexé

Arbre-B dordre m Exemple et algorithme dinsertion détaillé (B-arbre dordre 3) I, K, A, Z, M, B, W, L, C, J, O p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

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 */ }; Structure typique dun arbre-B

/* */ /* **** Driver.cpp **** Le "pilote" pour la création et la manipulation darbres-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. */ Ajout dans un B-arbre File Structures Michael J. Folk and all.

Ajout dans un B-arbre template 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 fonction 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 dinsérer la clé promue lors de ses remontées dappel */ /* 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 */

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

Arbres-B : recherche p 0 si x < e 1 p i si e i < x < e i+1 p m-1 si e m-1 < x p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

RECHERCHE (RRN, CL, TROUV_RRN, TROUV_POS) si RRN == NIL alors/* condition d'arrêt de la récursion */ retourner NON TROUVE sinon lire page RRN dans PAGE regarder à travers la PAGE pour trouver CL mettre POS égale à la position où KEY apparaît ou devrait apparaître. si CL est trouvé alors/* RRN contient la clef */ TROUV_RRN = RRN TROUV_POS = POS retourner TROUVE sinon/* le FILS suivant fait référence à un niveau plus bas*/ return (RECHERCHE(PAGE.FILS[POS], CL, TROUV_RRN, TROUV_POS) finsi Recherche dans un arbre-B

/* 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.*/ template bool BTree::searchBTree(int rrn, T key, int *trouvRRN, short *trouvPos) { short pos; Bool found; BTPAGE page; if (rrn == NIL) { return FAUX; } 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 VRAI; } else { return(search(page.child[pos],key,trouvRRN,trouvPos)); }

Visite dun arbre-B visite symétrique du B-arbre pour afficher les clés triées, rrn est l'adresse de la page racine du B-arbre. Cette fonction retourne un flag pour contrôler son exécution BTPAGE est la structure typique du B-arbre: struct BTPAGE { short keycount; struct uneCle key [MAXKEYS]; short CHILD[MAXKEYS+1]; };

template int BTree:: visiteSymetriqueB_Arbre(short rrn) { BTPAGE page; if (rrn == NIL) { return (-1); //arbre vide } btRead(rrn, &page); for(short pos = 0; pos < page.keycount; pos++) { //appel récursif pour chaque sous-arbres visiteSymetriqueB_Arbre(page.child[pos]); cout << page.key[pos].nom; } //dernier appel récursif pour le sous-arbrequi se trouve à droite de la dernière clé visiteSymetriqueB_Arbre(page.child[pos]); return 0; }

Enlèvement dans un arbre-B -: 25,24,22,

-: 25,24,22, x Enlèvement dans un arbre-B

-: 25,24,22, x Enlèvement dans un arbre-B

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22, x

Enlèvement dans un arbre-B -: 25,24,22, x

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22,

Enlèvement dans un arbre-B -: 25,24,22, x

-: 25,24,22, x Enlèvement dans un arbre-B

-: 25,24,22,

-: 25,24,22, Enlèvement dans un arbre-B

18 -: 25,24,22, Enlèvement dans un arbre-B

18 -: 25,24,22, x Enlèvement dans un arbre-B

18 -: 25,24,22, x Enlèvement dans un arbre-B

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22,

Enlèvement dans un arbre-B -: 25,24,22,

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22, Enlèvement dans un arbre-B

-: 25,24,22, Enlèvement dans un arbre-B

1.Si la clé à supprimer ne se trouve pas dans une feuille, la remplacer par son prédécesseur ou successeur se trouvant dans une feuille. 2.Supprimer la clé. 3.Si la feuille a le nombre requis de clés, ne rien faire. 4.Si la feuille contient moins de clés que requis, regarder à sa droite et à sa gauche pour trouver la cible. 1.Si la cible a le nombre requis de clés, redistribution 2.Si la cible na pas le nombre requis de clés, concaténation 5.Si la feuille a subi la concaténation, appliquer 3. à 6. au père de cette feuille. 6.Si la dernière clé de la racine a été déplacée, mettez à jour la racine. Algorithme Enlèvement dans un arbre-B

Utilisation darbres-B + indirection vers les données

Arbres-B dordre m Désavantages : gestion plus complexe 2 types de structures à gérer pour chaque opération espace perdu les nœuds (tableaux) contiennent de lespace inutilisé quel impact a le choix de m : sur le temps de recherche dune information ? sur le temps dajout dune information ? sur le temps de traitement dintervalles ? comment choisir m ?

Arbres-B dordre m Désavantages : gestion plus complexe 2 types de structures à gérer pour chaque opération espace perdu les nœuds (tableaux) contiennent de lespace inutilisé quel impact a le choix de m : sur le temps de recherche dune information ? sur le temps dajout dune information ? sur le temps de traitement dintervalles ? comment choisir m ? souvent selon la taille des secteurs disque selon les caractéristiques et besoins de lapplication

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

Insérer Exemple Construction dun arbre-B+

Insérer

Insérer

Insérer

Insérer

Insérer

Insérer

Suppression

Supprimer 70 (Cas 1) Sans violation 70 nappartient pas à une page interne Suppression

Suppression

Supprimer 25 (Cas 1) Sans violation 25 appartient à une page interne

Suppression

Supprimer 60 (Cas 2 et 3) Violation

Supprimer 60 (Cas 2 et 3) Fusionner

Supprimer 60 (Cas 2 et 3) On peut fusionner avec lautre frère Cas 2 Fusion

Supprimer 60 (Cas 2 et 3)

Supprimer 60 (Cas 2 et 3) Violation

Supprimer 60 (Cas 2 et 3) Fusionner

Supprimer 60 (Cas 2 et 3) Fusionner

Supprimer 60 (Cas 2 et 3)

Site Web du Cours, semaine 12 Lecture complémentaires : Une synthèse sur les arbres AVL ainsi que sur les B-arbre et B-arbre+.synthèse Une trace des algorithmes d'ajout et de suppression dans un B-arbre.Une trace La même chose en ce qui concerne les B-arbre+.même chose