La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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.

Présentations similaires


Présentation au sujet: "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."— Transcription de la présentation:

1 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 2009

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

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

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

5 Arbre-B d’ordre m définition :  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 3 6 8 10 12 p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

6 8 15 3 6 9 12 16 20 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 3 6 8 10 p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

7 Utilisation d’arbres-B  + indirection vers les données 10 20 5 7 8 22 24 32 35 38 13 15 18 42 45 46 26 27 25 30 40

8 Arbre-B d’ordre m  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 3 6 8 10 p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

9 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 d’un arbre-B

10 +: 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

11 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

12 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

13 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

47 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é)

48 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..

49 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::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 fstream

50 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::binary|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:

51 Arbre-B d’ordre m Exemple et algorithme d’insertion détaillé (B-arbre d’ordre 3) I, K, A, Z, M, B, W, L, C, J, O 3 6 8 10 p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

52 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 d’un arbre-B

53 /* --------------------------------------------------------*/ /* **** 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. */ Ajout dans un B-arbre File Structures Michael J. Folk and all.

54 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é*/ ); }

55 /***** 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 */

56 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) { std::cout<<"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); return (false); } else {split( pBkey, pBrrn, &page, promoKey, promoRchild, &newPage); btwrite(rrn, page); btwrite(*promoRchild, newPage); return (true); }

57 8 15 3 6 9 12 16 20 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 3 6 8 10 p0p0 p1p1 p2p2 p3p3 p4p4 e1e1 e2e2 e3e3 e4e4

58 /* 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 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; } else { return(search(page.child[pos],key,trouvRRN,trouvPos)); } 3 6 8 10

59 Visite d’un 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]; };

60 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; }

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

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

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

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

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

66 -: 25,24,22,20 10 20 5 7 8 22 32 35 38 13 15 18 42 45 46 26 27 24 30 40 x

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

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

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

70 -: 25,24,22,20 10 18 5 7 8 32 35 38 13 15 42 45 46 26 27 22 30 40 20

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

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

73 -: 25,24,22,20 10 18 5 7 8 32 35 38 13 15 42 45 46 26 27 20 30 40

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

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

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

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

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

79 -: 25,24,22,20 10 15 5 7 8 32 35 38 13 42 45 46 26 27 18 30 40

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

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

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

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

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

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

86 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 n’a 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

87 Utilisation d’arbres-B + indirection vers les données 10 20 5 7 8 22 24 32 35 38 13 15 18 42 45 46 26 27 25 30 40

88 Arbres-B d’ordre m Désavantages : gestion plus complexe 2 types de structures à gérer pour chaque opération espace perdu les nœuds (tableaux) contiennent de l’espace inutilisé quel impact a le choix de m : sur le temps de recherche d’une information ? sur le temps d’ajout d’une information ? sur le temps de traitement d’intervalles ? comment choisir m ?

89 Arbres-B d’ordre m Désavantages : gestion plus complexe 2 types de structures à gérer pour chaque opération espace perdu les nœuds (tableaux) contiennent de l’espace inutilisé quel impact a le choix de m : sur le temps de recherche d’une information ? sur le temps d’ajout d’une information ? sur le temps de traitement d’intervalles ? comment choisir m ? souvent selon la taille des secteurs disque selon les caractéristiques et besoins de l’application

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

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

92 Insérer 25 2565

93 Insérer 50 255065

94 Insérer 30 25305065

95 Insérer 85 85 25305065 25305065 50 2530 5065 85

96 Insérer 75 50 2530 5065 7585

97 Insérer 80 50 2530 5065 7585 80 50 2530 5065 758085 50 2530 5065 758085 5075 2530 50 65 75 8085


Télécharger ppt "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."

Présentations similaires


Annonces Google