Skip to content
Snippets Groups Projects
Verified Commit 37614e9f authored by orestis.malaspin's avatar orestis.malaspin
Browse files

added exercise

parent 503d3d37
No related branches found
No related tags found
No related merge requests found
......@@ -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`
![B-arbre d'ordre 1, nb pages = 2.](figs/barbres_2.svg)
![B-arbre d'ordre 1. Nombre pages max = 2.](figs/barbres_2.svg)
. . .
......@@ -126,7 +140,7 @@ patat:
## Exemples d'insertion: `3`
![B-arbre d'ordre 1, nb de pages max = 2.](figs/barbres_2.svg){width=50%}
![B-arbre d'ordre 1.](figs/barbres_2.svg){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`
![B-arbre d'ordre 1, nb de pages max = 2.](figs/barbres_3.svg){width=50%}
![B-arbre d'ordre 1. Nombre pages max = 2.](figs/barbres_3.svg){width=50%}
. . .
......@@ -154,7 +168,7 @@ patat:
## Exemples d'insertion: `4`
![B-arbre d'ordre 1.](figs/barbres_4.svg){width=50%}
![B-arbre d'ordre 1. Nombre enfants 0 ou 2.](figs/barbres_4.svg){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)
![](figs/barbres_ex1.png)
. . .
![](figs/barbres_ex2.png)
# Les B-arbres
## Exercice: insérer `5, 45, 50` dans l'arbre d'ordre 2 (3min matrix)
![](figs/barbres_ex2.png)
. . .
![](figs/barbres_ex3.png)
# Les B-arbres
## Exercice: insérer `32, 55, 60` dans l'arbre d'ordre 2 (3min matrix)
![](figs/barbres_ex3.png)
. . .
![](figs/barbres_ex4.png)
# Les B-arbres
## Exercice: insérer `41` dans l'arbre d'ordre 2 (3min matrix)
![](figs/barbres_ex4.png)
. . .
![](figs/barbres_ex5.png)
# 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)?
. . .
![Strcture d'une page de B-arbre d'ordre 2.](figs/barbres_struct.png)
# 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)
......
slides/figs/barbres_ex1.png

16.1 KiB

slides/figs/barbres_ex2.png

19.3 KiB

slides/figs/barbres_ex3.png

23.4 KiB

slides/figs/barbres_ex4.png

18.3 KiB

slides/figs/barbres_ex5.png

30.8 KiB

0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment