From 1e5d5482af16ab0a5fecf765421a3f014b59e7c8 Mon Sep 17 00:00:00 2001
From: Orestis <orestis.malaspinas@pm.me>
Date: Tue, 12 Apr 2022 22:11:51 +0200
Subject: [PATCH] last commit for tonight

---
 slides/cours_22.md | 127 ++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 126 insertions(+), 1 deletion(-)

diff --git a/slides/cours_22.md b/slides/cours_22.md
index 06fb1a2..0258375 100644
--- a/slides/cours_22.md
+++ b/slides/cours_22.md
@@ -287,7 +287,7 @@ patat:
 
 # Les B-arbres
 
-## Exercice
+## 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.
@@ -397,11 +397,14 @@ struct element
 
 # Les B-arbres
 
+\footnotesize
+
 ## Les fonctions utilitaires (5min matrix)
 
 ```C
 booléen est_feuille(page)     // la page est elle une feuille?
 entier position(page, valeur) // à quelle indice on insère?
+booléen est_dans_page(page, valeur) // la valeur est dans la page
 ```
 
 . . .
@@ -414,6 +417,9 @@ entier position(page, valeur)
     tant que i < page.nb && val >= page.tab[i]
         i += 1
     retourne i
+booléen est_dans_page(page, valeur)
+    i = position(page, valeur)
+    retourne (i > 0 && page.tab[i] == valeur)
 ```
 
 # Les B-arbres
@@ -448,6 +454,125 @@ rien liberer_memoire(page)
 
 # Les B-arbres
 
+## Les fonctions (5min matrix)
+
+```C
+page recherche(page, valeur) // retourner la page contenant
+                             // la valeur ou vide 
+```
+
+. . .
+
+```C
+page recherche(page, valeur)
+    si est_dans_page(page, valeur)
+        retourne page
+    sinon si est_feuille(page) && !est_dans_page(page, valeur)
+        retourne vide
+    sinon
+        recherche(page.tab[position(page, valeur)], valeur)
+```
+
+# Les B-arbres
+
+## Les fonctions
+
+```C
+page inserer(page, valeur) // inserer une valeur
+```
+
+. . .
+
+```C
+page inserer(page, valeur)
+    element = nouvel_element(valeur)
+    inserer_element(page, element) // on change elmement pour savoir s'il faut le remonter
+    si element.page != vide
+        page = ajouter_niveau(page, element) // si on atteint le sommet!
+    retourne page
+```
+
+# Les B-arbres
+
+## Les fonctions
+
+```C
+rien inserer_element(page, element) // inserer un element et voir s'il remonte
+```
+
+. . .
+
+```C
+rien inserer_element(page, element)
+    si est_feuille(page)
+        placer(page, element)
+    sinon
+        sous_page = page.tab[position(page, element)].page
+        inserer_element(sous_page, element)
+        si element.page != vide
+            placer(page, element)
+```
+
+# Les B-arbres
+
+## Les fonctions (5min matrix)
+
+```C
+rien placer(page, element) // inserer un élément
+```
+
+. . .
+
+```C
+rien placer(page, element)
+    i = position(page, element.clé)
+    pour i de 2*page.ordre à i+1
+        page.tab[i+1] = page.tab[i]
+    page.tab[i+1] = element
+    page.nb += 1
+    si page.nb > 2*page.ordre
+        scinder(page, element)
+```
+
+# Les B-arbres
+
+## Les fonctions (5min matrix)
+
+```C
+rien scinder(page, element) // casser une page et remonter
+```
+
+. . .
+
+```C
+rien scinder(page, element)
+    new_page = new_page(page.ordre)
+    new_page.nb = page.ordre
+    pour i de 0 à ordre inclu
+        new_page.tab[i] = page.tab[i+ordre+1]
+    element.clé = page.tab[ordre+1].clé
+    element.page = new_page
+```
+
+# Les B-arbres
+
+## Les fonctions (5min matrix)
+
+```C
+page ajouter_niveau(page, element) // si on remonte à la racine...
+                                   // on doit créer une nouvelle racine
+```
+
+. . .
+
+```C
+page ajouter_niveau(page, element) 
+    tmp = nouvelle_page(page.ordre)
+    tmp.tab[0].page = page
+    tmp.tab[1].clé = element.clé
+    tmp.tab[1].page = element.page
+    retourne tmp
+```
 
 
 <!-- # Les B-arbres -->
-- 
GitLab