diff --git a/slides/cours_22.md b/slides/cours_22.md index c953028338f195eef240872720834fc98f15a548..9b72500e43c79455e622c7532e65843fbc2868fb 100644 --- a/slides/cours_22.md +++ b/slides/cours_22.md @@ -52,7 +52,7 @@ patat: ## Utilisation -* Bases de données; +* Bases de données (souvent très grandes donc sur le disque); * Système de fichier. # Les B-arbres @@ -84,16 +84,28 @@ patat: ## Oui! +* Dans chaque noeud les clés sont **triées**. * Chaque page contient au plus $n$ noeuds: check; * Chaque noeud avec $m$ clés a $m+1$ descendants; * Toutes les feuilles apparaissent au même niveau. # Les B-arbres +## Exemple de recherche: trouver `32` + + + +. . + +* Si `n` plus petit que la 1e clé ou plus grand que la dernière descendre. +* Sinon parcourir séquentiellement jusqu'à trouver ou descendre entre 2 éléments. + +# Les B-arbres + ## Structure de données -* Éléments triés dans un noeud; -* Un noeud est composé de clés et pointeurs vers les enfants; +* Chaque page a une contrainte de remplissage, par rapport à l'ordre de l'arbre; +* Un noeud (page) est composé d'un tableau de clés/pointeurs vers les enfants; ``` P_0 | K_1 | P_1 | K_2 | | P_i | K_{i+1} | | P_{m-1} | K_m | P_m @@ -102,4 +114,38 @@ P_0 | K_1 | P_1 | K_2 | | P_i | K_{i+1} | | P_{m-1} | K_m | P_m * `P_0`, ..., `P_m` pointeurs vers enfants; * `K_1`, ..., `K_m` les clés. +## Pseudo-code structure de données? + +. . . + +```C +struct page + int ordre, nb + element tab[] +``` + +```C +struct element + int clé + page pg +``` + +# Les B-arbres + +## Structure de données en C (3min, matrix) +. . . + +```C +typedef struct _page { + int order, nb; + struct _element *tab; +} page; +``` + +```C +typedef struct element { + int key; + struct _page *pg; +} element; +```