Forked from
algorithmique / cours
430 commits behind the upstream repository.
-
orestis.malaspin authoredorestis.malaspin authored
- Le cours précédent
- Les B-arbres
- Problématique
- Exemple
- Remarques
- Les B-arbres
- Illustration, arbre divisé en pages de 3 noeuds
- Utilisation
- Les B-arbres
- Avantages
- Définition: B-arbre d'ordre n
- Les B-arbres
- Est-ce un B-arbre?
- Oui!
- Les B-arbres
- Exemple de recherche: trouver 32
- Les B-arbres
- La recherche de la clé C algorithme
- Les B-arbres
- Disclaimer
- Exemples d'insertion: 1
- Les B-arbres
- Exemples d'insertion: 2
- Les B-arbres
- Exemples d'insertion: 3
- Les B-arbres
- Exemples d'insertion: 3
- Les B-arbres
- Exemples d'insertion: 4
- Les B-arbres
- Exemples d'insertion: 4
- Les B-arbres
- Exemples d'insertion: 5
- Les B-arbres
- Exemples d'insertion: 5
- Les B-arbres
- Exemples d'insertion: 6
- Les B-arbres
- Exemples d'insertion: 6
- Les B-arbres
- Exemples d'insertion: 7
- Les B-arbres
- Exemples d'insertion: 7
- Les B-arbres
- L'algorithme d'insertion
- 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
- Exercice
- Les B-arbres
- 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)?
- Les B-arbres
- Les B-arbres
- Structure de données en C (3min, matrix)
cours_22.md 7.46 KiB
title: "B-Arbres"
date: "2022-04-13"
patat:
eval:
tai:
command: fish
fragment: false
replace: true
ccc:
command: fish
fragment: false
replace: true
images:
backend: auto
Le cours précédent
- Questions:
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 noeuds par page et l'arbre comporte 10^6noeuds:
- Recherche B-arbre: \log_{100}(10^6)=3;
- Recherche ABR: \log_2(10^6)=20.
- Recherche B-arbre:
- Si on doit lire depuis le disque: 10\mathrm{ms}par recherche+lecture:
-
30\mathrm{ms}(lecture beaucoup plus rapide que recherche) vs200\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 noeuds
. . .
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);
. . .
n
Définition: B-arbre d'ordre - Chaque page d'un arbre contient au plus 2\cdot nclés;
- Chaque page (excepté la racine) contient au moins nclés;
- Chaque page qui contient mclés contient soit:
-
0descendants;
-
m+1descendants.
-
- Toutes les pages terminales apparaissent au même niveau.
Les B-arbres
Est-ce un B-arbre?
. . .
Oui!
- Dans chaque noeud les clés sont triées.
- Chaque page contient au plus nnoeuds: check;
- Chaque noeud avec mclés am+1descendants;
- Toutes les feuilles apparaissent au même niveau.
Les B-arbres
32
Exemple de recherche: trouver
. . .
- 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
C
algorithme
La recherche de la clé - En partant de la racine.
- Si on est dans une feuille:
- Si la
C
est dans une page, retourner la page; - Sinon c'est perdu.
- Si la
- Sinon:
- Tant que
C > page
passer à la page suivante - Descendre
- Tant que
Les B-arbres
Disclaimer
- Inspiration de https://en.wikipedia.org/wiki/B-tree
1
Exemples d'insertion:
. . .
- L'arbre est vide, on insère juste dans la première page.
Les B-arbres
2
Exemples d'insertion:
. . .
- La première page est pas pleine, on insère dans l'ordre (après 1).
Les B-arbres
3
Exemples d'insertion:
- Comment on insère (1min de réflexion avant de donner une réponse!)?
Les B-arbres
3
Exemples d'insertion:
. . .
- La page est pleine, on crée deux enfants.
- On choisit,
2
, la médiane de1, 2, 3
et il est inséré à la racine. -
1
descend à gauche,3
descend à droite.
Les B-arbres
4
Exemples d'insertion:
- Comment on insère (1min de réflexion avant de donner une réponse!)?
Les B-arbres
4
Exemples d'insertion:
. . .
- On pourrait insérer à droite de
2
, mais... ça ferait 2 parents pour 2 enfants (maism
parents =>m+1
enfants ou0
); - On descend à droite (
4 > 2
); - On insère à droite de
3
.
Les B-arbres
5
Exemples d'insertion:
- Comment on insère (1min de réflexion avant de donner une réponse!)?
Les B-arbres
5
Exemples d'insertion:
. . .
- 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 de3, 4, 5
, remonte à la racine; - On crée un nouveau noeud à droite de
4
; - La règle
m => m+1
est ok.
Les B-arbres
6
Exemples d'insertion:
- Comment on insère (1min de réflexion avant de donner une réponse!)?
Les B-arbres
6
Exemples d'insertion:
. . .
-
6 > 4
on descend à droite; -
6 > 5
et on a à la place à droite, on insère.
Les B-arbres
7
Exemples d'insertion:
- Comment on insère (1min de réflexion avant de donner une réponse!)?
Les B-arbres
7
Exemples d'insertion:
. . .
-
7 > 4
on descend à droite; -
7 > 6
mais on a dépassé la capacité; -
6
est la médiane de5, 6, 7
, remonte à la racine; -
5
reste à gauche,7
à droite, mais6
fait dépasser la capacité de la racine; -
4
est la médiane de2, 4, 6
,4
remonte,2
reste à gauche,6
à droite.
Les B-arbres
L'algorithme d'insertion
- Rechercher la feuille (la page a aucun enfant) où insérer;
- Si la page n'est pas pleine insérer dans l'ordre croissant.
- Si la page est pleine, on sépare la page en son milieu :
- On trouve la médiane,
M
, de la page; - On met les éléments
< M
dans la page de gauche deM
et les> M
dans la page de droite deM
; -
M
est insérée récursivement dans la page parent.
- On trouve la médiane,
Les B-arbres
22
dans l'arbre d'ordre 2 (3min matrix)
Exercice: insérer
. . .
Les B-arbres
5, 45, 50
dans l'arbre d'ordre 2 (3min matrix)
Exercice: insérer
. . .
Les B-arbres
32, 55, 60
dans l'arbre d'ordre 2 (3min matrix)
Exercice: insérer
. . .
Les B-arbres
41
dans l'arbre d'ordre 2 (3min matrix)
Exercice: insérer
. . .
Les B-arbres
Exercice
- 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.
Les B-arbres
Structure de données
- 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
-
P_0
, ...,P_m
pointeurs vers enfants; -
K_1
, ...,K_m
les clés. - Il y a
m+1
pointeurs maism
clés. - Comment faire pour gérer l'insertion?
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)?
. . .
struct page
int ordre, nb
element tab[2*ordre + 2]
struct element
int clé
page pg
Les B-arbres
Les B-arbres
Structure de données en C (3min, matrix)
. . .
typedef struct _page {
int order, nb;
struct _element *tab;
} page;
typedef struct element {
int key;
struct _page *pg;
} element;