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