From cc0a0508fcd2bb7d3352b8805397d4e1712ca399 Mon Sep 17 00:00:00 2001 From: Orestis <orestis.malaspinas@pm.me> Date: Mon, 6 May 2024 14:53:13 +0200 Subject: [PATCH] updated 22 --- slides/cours_22.md | 286 +-------------------------------------------- 1 file changed, 1 insertion(+), 285 deletions(-) diff --git a/slides/cours_22.md b/slides/cours_22.md index dd92cf0..d26fcb8 100644 --- a/slides/cours_22.md +++ b/slides/cours_22.md @@ -1,6 +1,6 @@ --- title: "Arbres quaternaires" -date: "2024-05-30" +date: "2024-04-30" --- # Rappel sur ls arbres quaternaires @@ -937,287 +937,3 @@ rien maj_force_sur_etoile(arbre, e, theta) maj_force_sur_etoile(enfant, e, theta) ``` -# Les B-arbres - -\Huge - -Les B-arbres - - -# Les B-arbres - -## Problématique - -* Grands jeux de données (en 1970). -* Stockage dans un arbre, mais l'arbre tiens pas en mémoire. -* Regrouper les sous-arbres en **pages** qui tiennent en mémoire. - -## Exemple - -* 100 nœuds par page et l'arbre comporte $10^6$ nœuds: - * Recherche B-arbre: $\log_{100}(10^6)=3$; - * Recherche ABR: $\log_2(10^6)=20$. -* Si on doit lire depuis le disque: $10\mathrm{ms}$ par recherche+lecture: - * $30\mathrm{ms}$ (lecture beaucoup plus rapide que recherche) vs $200\mathrm{ms}=0.2\mathrm{s}$. - -## Remarques - -* On sait pas ce que veut dire `B`: Bayer, Boeing, Balanced? -* Variante plus récente B+-arbres. - -# Les B-arbres - -## Illustration, arbre divisé en pages de 3 nœuds - - - -. . . - -## Utilisation - -* Bases de données (souvent très grandes donc sur le disque); -* Système de fichier. - -# Les B-arbres - -## Avantages - -* Arbres moins profonds; -* Diminue les opération de rééquilibrage; -* Complexité toujours en $\log(N)$; - -. . . - -## Définition: B-arbre d'ordre $n$ - -* Chaque page d'un arbre contient au plus $2\cdot n$ *clés*; -* Chaque page (excepté la racine) contient au moins $n$ clés; -* Chaque page qui contient $m$ clés contient soit: - * $0$ descendants; - * $m+1$ descendants. -* Toutes les pages terminales apparaissent au même niveau. - -# Les B-arbres - -## Est-ce un B-arbre? - - - -. . . - -## Oui! - -* Dans chaque nœud les clés sont **triées**. -* Chaque page contient au plus $n$ nœuds: check; -* Chaque nœud 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 (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` - - - -. . . - -* L'arbre est vide, on insère juste dans la première page. - -# Les B-arbres - -## Exemples d'insertion: `2` - - - -. . . - -* La première page est pas pleine, on insère dans l'ordre (après 1). - -# Les B-arbres - -## Exemples d'insertion: `3` - -{width=50%} - -* Comment on insère (1min de réflexion avant de donner une réponse!)? - -# Les B-arbres - -## Exemples d'insertion: `3` - -{width=50%} - -. . . - -* La page est pleine, on crée deux enfants. -* On choisit, `2`, la médiane de `1, 2, 3` et il est inséré à la racine. -* `1` descend à gauche, `3` descend à droite. - -# Les B-arbres - -## Exemples d'insertion: `4` - -{width=50%} - -* Comment on insère (1min de réflexion avant de donner une réponse!)? - -# Les B-arbres - -## Exemples d'insertion: `4` - -{width=50%} - -. . . - -* On pourrait insérer à droite de `2`, mais... ça ferait 2 parents pour 2 enfants (mais `m` parents => `m+1` enfants ou `0`); -* On descend à droite (`4 > 2`); -* On insère à droite de `3`. - -# Les B-arbres - -## Exemples d'insertion: `5` - -{width=50%} - -* Comment on insère (1min de réflexion avant de donner une réponse!)? - -# Les B-arbres - -## Exemples d'insertion: `5` - - - -. . . - -* On descend à droite (on peut pas insérer à la racine comme pour `4`); -* On dépasse la capacité de l'enfant droite; -* `4`, médiane de `3, 4, 5`, remonte à la racine; -* On crée un nouveau nœud à droite de `4`; -* La règle `m => m+1` est ok. - -# Les B-arbres - -## Exemples d'insertion: `6` - -{width=50%} - -* Comment on insère (1min de réflexion avant de donner une réponse!)? - -# Les B-arbres - -## Exemples d'insertion: `6` - - - -. . . - -* `6 > 4` on descend à droite; -* `6 > 5` et on a à la place à droite, on insère. - -# Les B-arbres - -## Exemples d'insertion: `7` - -{width=50%} - -* Comment on insère (1min de réflexion avant de donner une réponse!)? - -# Les B-arbres - -## Exemples d'insertion: `7` - -{width=50%} - -. . . - -* `7 > 4` on descend à droite; -* `7 > 6` mais on a dépassé la capacité; -* `6` est la médiane de `5, 6, 7`, remonte à la racine; -* `5` reste à gauche, `7` à droite, mais `6` fait dépasser la capacité de la racine; -* `4` est la médiane de `2, 4, 6`, `4` remonte, `2` reste à gauche, `6` à droite. - -# 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, 45, 50` dans l'arbre d'ordre 2 (3min matrix) - - - -. . . - - - - -# Les B-arbres - -## Exercice: insérer `5` 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 - -## Exercice (matrix, 15min) - -* Insérer 20, 40, 10, 30, 15, 35, 7, 26, 18, 22, 5, 42, 13, 46, 27, 8, 32, 38, 24, 45, 25, 2, 14, 28, 32, 41, -* Dans un B-arbre d'ordre 2. - -- GitLab