Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
cours
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
jacquesw.ndoumben
cours
Commits
cc0a0508
Verified
Commit
cc0a0508
authored
11 months ago
by
orestis.malaspin
Browse files
Options
Downloads
Patches
Plain Diff
updated 22
parent
4cefffd8
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
slides/cours_22.md
+1
-285
1 addition, 285 deletions
slides/cours_22.md
with
1 addition
and
285 deletions
slides/cours_22.md
+
1
−
285
View file @
cc0a0508
---
title
:
"
Arbres
quaternaires"
date
:
"
2024-0
5
-30"
date
:
"
2024-0
4
-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
\H
uge
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: $
\l
og_{100}(10^6)=3$;
*
Recherche ABR: $
\l
og_2(10^6)=20$.
*
Si on doit lire depuis le disque: $10
\m
athrm{ms}$ par recherche+lecture:
*
$30
\m
athrm{ms}$ (lecture beaucoup plus rapide que recherche) vs $200
\m
athrm{ms}=0.2
\m
athrm{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 $
\l
og(N)$;
. . .
## Définition: B-arbre d'ordre $n$
*
Chaque page d'un arbre contient au plus $2
\c
dot 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.
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment