diff --git a/slides/cours_22.md b/slides/cours_22.md index d7ec0de38149b933b02c510c4320bf89909cdb65..a062ecac8a6b6b61f3642062d670ce41c9385161 100644 --- a/slides/cours_22.md +++ b/slides/cours_22.md @@ -98,10 +98,24 @@ patat: . . . * 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. +* Sinon parcourir (par bissection ou séquentiellement) jusqu'à trouver ou descendre entre 2 éléments. # Les B-arbres +## La recherche de la clé `C` algorithme + +0. En partant de la racine. +1. Si on est dans une feuille: + * Si la `C` est dans une page, retourner la page; + * Sinon c'est perdu. +2. Sinon: + * Tant que `C > page` passer à la page suivante + * Descendre + +# Les B-arbres + +## Disclaimer + * Inspiration de <https://en.wikipedia.org/wiki/B-tree> ## Exemples d'insertion: `1` @@ -116,7 +130,7 @@ patat: ## Exemples d'insertion: `2` - + . . . @@ -126,7 +140,7 @@ patat: ## Exemples d'insertion: `3` -{width=50%} +{width=50%} * Comment on insère (1min de réflexion avant de donner une réponse!)? @@ -134,7 +148,7 @@ patat: ## Exemples d'insertion: `3` -{width=50%} +{width=50%} . . . @@ -154,7 +168,7 @@ patat: ## Exemples d'insertion: `4` -{width=50%} +{width=50%} . . . @@ -227,6 +241,58 @@ patat: # Les B-arbres +## L'algorithme d'insertion + +0. Rechercher la feuille (la page a aucun enfant) où insérer; +1. Si la page n'est pas pleine insérer dans l'ordre croissant. +2. Si la page est pleine, on sépare la page en son milieu : + 1. On trouve la médiane, `M`, de la page; + 2. On met les éléments `< M` dans la page de gauche de `M` et les `> M` dans la page de droite de `M`; + 3. `M` est insérée récursivement dans la page parent. + +# Les B-arbres + +## Exercice: insérer `22` dans l'arbre d'ordre 2 (3min matrix) + + + +. . . + + + + +# Les B-arbres + +## Exercice: insérer `5, 45, 50` dans l'arbre d'ordre 2 (3min matrix) + + + +. . . + + + +# Les B-arbres + +## Exercice: insérer `32, 55, 60` dans l'arbre d'ordre 2 (3min matrix) + + + +. . . + + + +# Les B-arbres + +## Exercice: insérer `41` dans l'arbre d'ordre 2 (3min matrix) + + + +. . . + + + +# Les B-arbres + ## Structure de données * Chaque page a une contrainte de remplissage, par rapport à l'ordre de l'arbre; @@ -238,15 +304,28 @@ 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. +* Il y a `m+1` pointeurs mais `m` clés. +* Comment faire pour gérer l'insertion? -## Pseudo-code structure de données? +# Les B-arbres + +## Faire un dessin de la structure de données (3min matrix)? + +. . . + + + + +# Les B-arbres + +## Pseudo-code structure de données (3min, matrix)? . . . ```C struct page int ordre, nb - element tab[] + element tab[2*ordre + 2] ``` ```C @@ -255,6 +334,10 @@ struct element page pg ``` +# Les B-arbres + + + # Les B-arbres ## Structure de données en C (3min, matrix) diff --git a/slides/figs/barbres_ex1.png b/slides/figs/barbres_ex1.png new file mode 100644 index 0000000000000000000000000000000000000000..accf156bb720bd1d07d7a3b9fdae5e4e31215835 Binary files /dev/null and b/slides/figs/barbres_ex1.png differ diff --git a/slides/figs/barbres_ex2.png b/slides/figs/barbres_ex2.png new file mode 100644 index 0000000000000000000000000000000000000000..a30bc0622ea1b8fe1335eff7de646abfc2f829d6 Binary files /dev/null and b/slides/figs/barbres_ex2.png differ diff --git a/slides/figs/barbres_ex3.png b/slides/figs/barbres_ex3.png new file mode 100644 index 0000000000000000000000000000000000000000..40ab87cb279bd6ef6fb8b806d42c1cadbe4084bf Binary files /dev/null and b/slides/figs/barbres_ex3.png differ diff --git a/slides/figs/barbres_ex4.png b/slides/figs/barbres_ex4.png new file mode 100644 index 0000000000000000000000000000000000000000..c2346e29a509ef9756b3dcd613c1fdc9e3f12aca Binary files /dev/null and b/slides/figs/barbres_ex4.png differ diff --git a/slides/figs/barbres_ex5.png b/slides/figs/barbres_ex5.png new file mode 100644 index 0000000000000000000000000000000000000000..3a23e8d8d80dd615016819dfe09bd389d50ea9d0 Binary files /dev/null and b/slides/figs/barbres_ex5.png differ